bin/update-serial
author Tero Marttila <terom@paivola.fi>
Tue, 20 Mar 2012 14:15:22 +0200
changeset 577 b474e2e6f54e
parent 543 d390f9bc3237
permissions -rwxr-xr-x
update: docdoc
526
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     1
#!/usr/bin/env python
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     2
# vim: set ft=python :
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     3
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     4
"""
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     5
    Update zone serials.
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     6
"""
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     7
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     8
__version__ = '0.0.1-dev'
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     9
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    10
import optparse
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    11
import codecs
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    12
import os.path
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    13
from datetime import datetime
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    14
import logging
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    15
534
879917cebb9c update-serial: fix logging processName
Tero Marttila <terom@paivola.fi>
parents: 526
diff changeset
    16
log = logging.getLogger('main')
526
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    17
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    18
# command-line options, global state
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    19
options = None
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    20
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    21
def parse_options (argv) :
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    22
    """
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    23
        Parse command-line arguments.
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    24
    """
534
879917cebb9c update-serial: fix logging processName
Tero Marttila <terom@paivola.fi>
parents: 526
diff changeset
    25
    
879917cebb9c update-serial: fix logging processName
Tero Marttila <terom@paivola.fi>
parents: 526
diff changeset
    26
    prog = argv[0]
526
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    27
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    28
    parser = optparse.OptionParser(
534
879917cebb9c update-serial: fix logging processName
Tero Marttila <terom@paivola.fi>
parents: 526
diff changeset
    29
            prog        = prog,
526
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    30
            usage       = '%prog: [options]',
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    31
            version     = __version__,
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    32
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    33
            # module docstring
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    34
            description = __doc__,
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    35
    )
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    36
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    37
    # logging
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    38
    general = optparse.OptionGroup(parser, "General Options")
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    39
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    40
    general.add_option('-q', '--quiet',     dest='loglevel', action='store_const', const=logging.ERROR, help="Less output")
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    41
    general.add_option('-v', '--verbose',   dest='loglevel', action='store_const', const=logging.INFO,  help="More output")
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    42
    general.add_option('-D', '--debug',     dest='loglevel', action='store_const', const=logging.DEBUG, help="Even more output")
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    43
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    44
    parser.add_option_group(general)
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    45
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    46
    # defaults
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    47
    parser.set_defaults(
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    48
        loglevel            = logging.WARN,
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    49
        expand              = [],
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    50
    )
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    51
    
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    52
    # parse
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    53
    options, args = parser.parse_args(argv[1:])
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    54
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    55
    # configure
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    56
    logging.basicConfig(
534
879917cebb9c update-serial: fix logging processName
Tero Marttila <terom@paivola.fi>
parents: 526
diff changeset
    57
        format  = prog + ': %(name)s: %(levelname)s %(funcName)s : %(message)s',
526
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    58
        level   = options.loglevel,
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    59
    )
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    60
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    61
    return options, args
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    62
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    63
# date fmt to use in serial
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    64
DATE_FMT = '%Y%m%d'
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    65
DATE_LEN = 8
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    66
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    67
SERIAL_FMT = "{date:8}{count:02}"
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    68
SERIAL_LEN = 10
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    69
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    70
def format_serial (date, count) :
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    71
    return SERIAL_FMT.format(date=date.strftime(DATE_FMT), count=count)
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    72
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    73
def next_count (value, date, count) :
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    74
    """
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    75
        Return serial with next count.
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    76
    """
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    77
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    78
    count += 1
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    79
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    80
    # check
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    81
    if count > 99 :
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    82
        serial = str(value + 1)
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    83
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    84
        log.warn("Serial count rollover: %s, %s; fallback -> %s", date, count, serial)
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    85
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    86
        return serial
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    87
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    88
    return format_serial(date, count)
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    89
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    90
def update_serial (serial) :
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    91
    """
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    92
        Update new serial number into given file, based on date.
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    93
    """
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    94
    
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    95
    today = datetime.now().date()
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    96
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    97
    # handle
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    98
    if not serial :
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    99
        # fresh
537
b883ef452cd8 fix handling of initial serial
Tero Marttila <terom@paivola.fi>
parents: 534
diff changeset
   100
        log.info("Setting initial serial: %s01", today)
526
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   101
        
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   102
        return format_serial(today, 1)
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   103
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   104
    elif len(serial) != SERIAL_LEN :
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   105
        log.warn("Invalid serial format: %s", serial)
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   106
        
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   107
        value = int(serial)
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   108
        serial = str(value + 1)
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   109
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   110
        log.info("Incrementing serial: %d -> %s", value, serial)
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   111
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   112
        return serial
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   113
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   114
    else :
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   115
        # parse
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   116
        value = int(serial)
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   117
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   118
        try :
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   119
            date = datetime.strptime(serial[:DATE_LEN], DATE_FMT).date()
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   120
            count = int(serial[DATE_LEN:])
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   121
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   122
        except ValueError, e :
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   123
            # invalid date/count format?
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   124
            log.warn("Unable to parse serial: %s: %s", serial, e)
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   125
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   126
            serial = str(value + 1)
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   127
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   128
            log.info("Incrementing serial: %d -> %s", value, serial)
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   129
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   130
            return serial
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   131
            
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   132
        log.debug("old serial=%s, value=%d, date=%s, count=%s", serial, value, date, count)
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   133
        
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   134
    # update
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   135
    if date < today :
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   136
        log.info("Updating to today: %s -> %s", date, today)
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   137
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   138
        # update date
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   139
        return format_serial(today, 1)
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   140
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   141
    elif date == today :
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   142
        # keep date, update count
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   143
        log.info("Updating today's count: %s, %s", date, count)
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   144
        
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   145
        # handle count rollover
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   146
        return next_count(value, date, count)
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   147
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   148
    elif date > today :
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   149
        # keep, update count
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   150
        serial = next_count(value, date, count)
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   151
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   152
        log.warn("Serial in future; incrementing count: %s, %s -> %s", date, count, serial)
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   153
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   154
        return serial
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   155
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   156
    else :
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   157
        raise Exception("Invalid serial: %s:%s", old_date, old_count)
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   158
    
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   159
def process_serial (path) :
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   160
    """
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   161
        Read old serial, generate new one, and update file.
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   162
    """
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   163
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   164
    # read
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   165
    if os.path.exists(path) :
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   166
        serial = open(path).read().strip()
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   167
        log.debug("current serial: %s", serial)
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   168
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   169
    else :
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   170
        log.warn("Given .serial does not yet exist: %s", path)
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   171
        serial = None
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   172
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   173
    # update
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   174
    serial = update_serial(serial)
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   175
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   176
    # write
543
d390f9bc3237 update-serial: write newline
Tero Marttila <terom@paivola.fi>
parents: 537
diff changeset
   177
    open(path, 'w').write(serial + '\n')
526
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   178
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   179
    return serial
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   180
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   181
def main (argv) :
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   182
    global options
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   183
    
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   184
    options, args = parse_options(argv)
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   185
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   186
    # serial files to update
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   187
    for path in args :
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   188
        process_serial(path)
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   189
    
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   190
    return 0
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   191
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   192
if __name__ == '__main__':
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   193
    import sys
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   194
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   195
    sys.exit(main(sys.argv))