author | Tero Marttila <terom@paivola.fi> |
Tue, 20 Mar 2012 13:59:30 +0200 | |
changeset 573 | fdb9e03e423d |
parent 543 | d390f9bc3237 |
permissions | -rwxr-xr-x |
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)) |