82 lines
2.2 KiB
Python
82 lines
2.2 KiB
Python
|
#!/usr/bin/env python
|
||
|
import os
|
||
|
import sys
|
||
|
import hashlib
|
||
|
import argparse
|
||
|
from collections import OrderedDict
|
||
|
|
||
|
EQ = '='
|
||
|
BLK_START = '{'
|
||
|
BLK_END = '}'
|
||
|
|
||
|
#name: {key: value, key: value}
|
||
|
def parse(filename):
|
||
|
blocks = OrderedDict()
|
||
|
blk = None
|
||
|
key = None
|
||
|
value = None
|
||
|
|
||
|
with open(filename) as f:
|
||
|
# read all lines
|
||
|
for line in f:
|
||
|
# if line has '=' sign treat it
|
||
|
# as split symbol
|
||
|
if EQ in line:
|
||
|
key, value = line.split(EQ, 1)
|
||
|
key = key.strip()
|
||
|
value = value.strip()
|
||
|
|
||
|
if value == BLK_START:
|
||
|
# value on the right of '=' is '{'
|
||
|
# so this opens new block
|
||
|
blk = key
|
||
|
blocks[key] = OrderedDict()
|
||
|
|
||
|
elif value == BLK_END:
|
||
|
# value on the right of '=' is '}'
|
||
|
# this terminates block
|
||
|
blk = None
|
||
|
|
||
|
else:
|
||
|
# key = value inside block
|
||
|
blocks[blk][key] = value
|
||
|
|
||
|
# return parsed structure as dictionary
|
||
|
return blocks
|
||
|
|
||
|
# write back internal representation into file
|
||
|
def dump(tree, filename=None):
|
||
|
with open(filename, 'w') as f:
|
||
|
for blk in tree.keys():
|
||
|
f.write('\n%s={\n' % blk)
|
||
|
for key,value in tree[blk].items():
|
||
|
f.write('\t%s=%s\n' % (key,value))
|
||
|
f.write('}\n')
|
||
|
|
||
|
if __name__=='__main__':
|
||
|
description = 'Update information in update.txt control file.'
|
||
|
usage = 'update_update.py filepath'
|
||
|
|
||
|
argp = argparse.ArgumentParser(usage=usage, description=description)
|
||
|
argp.add_argument('filepath', help='update.txt filepath to update contents of.')
|
||
|
|
||
|
if len(sys.argv) == 1:
|
||
|
argp.print_help()
|
||
|
sys.exit(1)
|
||
|
|
||
|
args = argp.parse_args()
|
||
|
|
||
|
# build config file representation
|
||
|
tree = parse(args.filepath)
|
||
|
|
||
|
dir = os.path.dirname(args.filepath)
|
||
|
|
||
|
# update all md5 sums
|
||
|
for blk in tree.keys():
|
||
|
filename = os.path.join(dir, os.path.basename(tree[blk]['file_path']))
|
||
|
with open(filename) as f:
|
||
|
tree[blk]['md5'] = hashlib.md5(f.read()).hexdigest()
|
||
|
|
||
|
# write back result
|
||
|
dump(tree, args.filepath)
|