diff options
Diffstat (limited to 'upgrade/r4132_reglog2db.py')
-rwxr-xr-x | upgrade/r4132_reglog2db.py | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/upgrade/r4132_reglog2db.py b/upgrade/r4132_reglog2db.py new file mode 100755 index 00000000..5fe7ed49 --- /dev/null +++ b/upgrade/r4132_reglog2db.py @@ -0,0 +1,108 @@ +#!/usr/bin/env python +# +# parse register.log and create reglog.db +# +# please first test and fix your register.log, then +# try writing to database. +# +# Create: piaip + +# python 2.5: +#import sqlite3 +# python 2.4 or prior: +from pysqlite2 import dbapi2 as sqlite3 + +import sys +import time + +def initdb(dbfn) : + db = sqlite3.connect(dbfn) + c = db.cursor() + # separate the tables to 'approved' and 'rejected', + # since the 'rejected' is rarely used... + c.execute('create table if not exists approved ' + + '(uid text, name text, career text, ' + + ' addr text, phone text, date text, approved text)'); + c.execute('create table if not exists rejected ' + + '(uid text, name text, career text, ' + + ' addr text, phone text, date text, rejected text)'); + return (db, c) + +def processblk(m) : + #print "process blk!" + if not m.has_key('uid') : + print "no uid record at line: ", lineno + sys.exit(-1) + if (not m.has_key('approved')) and (not m.has_key('rejected')) : + print "invalid record (action?) at line: ", lineno + sys.exit(-1) + if c != None : + type = 'rejected'; + if m.has_key('approved') : type = 'approved'; + # write into database + sql = 'insert into ' + type + ' values (?,?,?,?,?,?,?)'; + # follow the orders + c.execute(sql, (m['uid'], m['name'], m['career'], m['addr'], m['phone'], m['date'], m[type])); + +# default input +fn = "register.log" +dbfn= "" +db = None +c = None +if len (sys.argv) < 1 : + print "syntax:", sys.argv[0], "register.log [reglog.db]" + sys.exit(0) +if len (sys.argv) > 1 : + fn = sys.argv[1] +if len (sys.argv) > 2 : + dbfn = sys.argv[2] + +print "Opening ", fn, "..." +f = open(fn, "rt") + +if dbfn != '' : + (db, c) = initdb(dbfn) + +m={} +lineno = 0 +tickets = 0 +for s in f : + lineno = lineno +1 + # for each line... + if s.startswith("num:") : continue + if s.startswith("email:") : continue + if s.startswith("ident:") : continue + if s.startswith("]") : continue + if s.startswith("----") : + # ready to build new one + processblk(m) + m = {} + tickets = tickets +1 + if tickets % 10000 == 0 : + if db : db.commit() + print tickets, "forms processed." + continue + v = s.split(': ', 1) + if len(v) != 2 : + print "error at line ", lineno + sys.exit(-1) + k = v[0].lower() + if (m.has_key(k)) : + print "key duplicated at line ", lineno + sys.exit(-1) + # convert timestamp + v = v[1].strip() + if (k == 'date') : + # strip final weekday + v = v.split(' ') # mdy HMS abrv + if len(v) < 2 or len(v) > 3 : + print "invalid date entry at line ", lineno + sys.exit(-1) + v = v[0] + ' ' + v[1] + # build timestamp + v = str(int(time.mktime(time.strptime(v, "%m/%d/%Y %H:%M:%S")))) + m[k] = v + +f.close() + +# vim:sw=4:expandtab |