forked from qhool/pygrader
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathconfig.py
91 lines (81 loc) · 2.41 KB
/
config.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
import json
import re
import bunch
import pprint
import datetime
class DateError(Exception):
def __init__(self,date_str):
self.date_str = date_str
def __str__(self):
return "Could not parse date value: {0}".format( self.date_str )
date_formats = [
{ 'pattern': "(\d{4})/(\d{2})/(\d{2}) (\d{2}):(\d{2}):(\d{2})" }
]
#precompile patterns
for d in date_formats:
d['re'] = re.compile( d['pattern'] )
def parse_date( dt ):
for d in date_formats:
m = d['re'].match( dt )
if m != None:
return datetime.datetime( *map( int, m.groups()) )
raise DateError( dt )
def load_file( fname, key = None ):
try:
f = open( fname, 'r' )
except IOError:
return {}
try:
dat = json.load( f )
if key == None:
return dat
else:
return { key : dat }
except ValueError:
f.seek(0)
stuff = f.read()
if re.match( '\s*$', stuff ):
return {}
else:
raise
cfg = {}
cfg.update( load_file( 'main.cfg.base' ) )
cfg.update( load_file( 'main.cfg' ) )
cfg.update( load_file( 'assignments.cfg', 'assignments' ) )
def _bunchify( key, vals, tabs ):
if type(vals) == type(dict()):
if __name__ == '__main__':
print ""
b = bunch.Bunch( )
for k in vals.iterkeys():
if __name__ == '__main__':
print tabs + k + ": ",
b[k] = _bunchify( k, vals[k], tabs + " " )
return b
elif type(vals) == type(list()):
if __name__ == '__main__':
print ""
counter = { 'i': 0 }
def _subbunch( x ):
if __name__ == '__main__':
print tabs + "[{0:2}]: ".format( counter['i'] ),
counter['i'] = counter['i'] + 1
#for a list, just use the key from the level above
return _bunchify( key, x, tabs + " " )
return map( _subbunch, vals )
else:
if __name__ == '__main__':
print vals
if re.search( 'date', key ):
return parse_date( vals )
else:
return vals
for k in cfg.iterkeys():
if __name__ == '__main__':
print k + ": ",
globals()[k] = _bunchify(k,cfg[k], " " )
#if __name__ == '__main__':
# pp = pprint.PrettyPrinter(indent=4)
# pp.pprint( cfg['repository'] )
# pp.pprint( cfg['system'] )
# pp.pprint( cfg['assignments'] )