bin/update-serial
author Tero Marttila <terom@paivola.fi>
Thu, 15 Mar 2012 18:32:17 +0200
changeset 3 cd10c4fe44bb
child 11 879917cebb9c
permissions -rwxr-xr-x
update-serial: implement serial-update separately
3
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
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    16
log = logging.getLogger()
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
    """
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    25
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    26
    parser = optparse.OptionParser(
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    27
            prog        = argv[0],
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    28
            usage       = '%prog: [options]',
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    29
            version     = __version__,
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    30
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    31
            # module docstring
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    32
            description = __doc__,
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    33
    )
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    34
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    35
    # logging
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    36
    general = optparse.OptionGroup(parser, "General Options")
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    37
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    38
    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
    39
    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
    40
    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
    41
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    42
    parser.add_option_group(general)
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
    # defaults
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    45
    parser.set_defaults(
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    46
        loglevel            = logging.WARN,
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    47
        expand              = [],
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    48
    )
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    49
    
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    50
    # parse
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    51
    options, args = parser.parse_args(argv[1:])
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    52
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    53
    # configure
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    54
    logging.basicConfig(
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    55
        format  = '%(processName)s: %(name)s: %(levelname)s %(funcName)s : %(message)s',
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    56
        level   = options.loglevel,
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    57
    )
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    58
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    59
    return options, args
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
# date fmt to use in serial
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    62
DATE_FMT = '%Y%m%d'
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    63
DATE_LEN = 8
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    64
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    65
SERIAL_FMT = "{date:8}{count:02}"
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    66
SERIAL_LEN = 10
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    67
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    68
def format_serial (date, count) :
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    69
    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
    70
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    71
def next_count (value, date, 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
        Return serial with next 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
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    76
    count += 1
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
    # check
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    79
    if count > 99 :
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    80
        serial = str(value + 1)
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    81
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    82
        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
    83
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    84
        return 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 format_serial(date, count)
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
def update_serial (serial) :
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
        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
    91
    """
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    92
    
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    93
    today = datetime.now().date()
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
    # handle
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    96
    if not serial :
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    97
        # fresh
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    98
        log.info("Setting initial serial: %s:%s", date, count)
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    99
        
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   100
        return format_serial(today, 1)
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
    elif len(serial) != SERIAL_LEN :
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   103
        log.warn("Invalid serial format: %s", serial)
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   104
        
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   105
        value = int(serial)
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   106
        serial = str(value + 1)
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   107
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   108
        log.info("Incrementing serial: %d -> %s", value, serial)
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
        return 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
    else :
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   113
        # parse
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   114
        value = int(serial)
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   115
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   116
        try :
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   117
            date = datetime.strptime(serial[:DATE_LEN], DATE_FMT).date()
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   118
            count = int(serial[DATE_LEN:])
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   119
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   120
        except ValueError, e :
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   121
            # invalid date/count format?
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   122
            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
   123
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   124
            serial = str(value + 1)
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
            log.info("Incrementing serial: %d -> %s", value, serial)
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
            return 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
        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
   131
        
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   132
    # update
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   133
    if date < today :
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   134
        log.info("Updating to today: %s -> %s", date, today)
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   135
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   136
        # update date
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   137
        return format_serial(today, 1)
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   138
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   139
    elif date == today :
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   140
        # keep date, update count
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   141
        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
   142
        
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   143
        # handle count rollover
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   144
        return next_count(value, date, count)
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   145
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   146
    elif date > today :
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   147
        # keep, update count
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   148
        serial = next_count(value, date, count)
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   149
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   150
        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
   151
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   152
        return 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
    else :
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   155
        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
   156
    
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   157
def process_serial (path) :
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
        Read old serial, generate new one, and update file.
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
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   162
    # read
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   163
    if os.path.exists(path) :
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   164
        serial = open(path).read().strip()
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   165
        log.debug("current serial: %s", serial)
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   166
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   167
    else :
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   168
        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
   169
        serial = None
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   170
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   171
    # update
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   172
    serial = update_serial(serial)
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   173
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   174
    # write
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   175
    open(path, 'w').write(serial)
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   176
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   177
    return serial
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
def main (argv) :
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   180
    global options
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   181
    
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   182
    options, args = parse_options(argv)
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
    # serial files to update
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   185
    for path in args :
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   186
        process_serial(path)
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   187
    
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   188
    return 0
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
if __name__ == '__main__':
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   191
    import sys
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   192
cd10c4fe44bb update-serial: implement serial-update separately
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   193
    sys.exit(main(sys.argv))