Package gmisclib :: Module gpk_hdr
[frames] | no frames]

Source Code for Module gmisclib.gpk_hdr

  1  import os 
  2  import re 
  3  import die 
  4   
  5   
6 -def uq(s, qc):
7 if qc and len(s)>=2 and s[0]==qc and s[-1]==qc: 8 return s[1:-1] 9 return s
10 11
12 -class hdr:
13 _bad = re.compile('[^a-zA-Z_0-9.-]') 14
15 - def __init__(self, fn):
16 self.fn = fn 17 self.data = None 18 self.modified = 0
19 20
21 - def has_key(self, key):
22 if self.data is None: 23 self.read() 24 return self.data.has_key(key)
25 26
27 - def items(self):
28 if self.data is None: 29 self.read() 30 return self.data.items()
31 32
33 - def get(self, key, default = None, qc=None):
34 if self.data is None: 35 self.read() 36 o = self.data.get(key, default) 37 if qc: 38 return uq(o, qc) 39 return o
40 41
42 - def set(self, key, value, qc=None):
43 if self.data is None: 44 self.read() 45 if self.has_key(key): 46 self.data['#%s' % key] = self.data[key] 47 if qc: 48 self.data[key] = '%s%s%s' % (qc, value, qc) 49 else: 50 self.data[key] = value 51 self.modified += 1
52 53
54 - def __del__(self):
55 self.close()
56 57
58 - def close(self):
59 if not self.modified: 60 return 61 if self.data is None: 62 return 63 self.write()
64 65 66 67
68 - def write(self):
69 fd = open('%s.tmp' % self.fn, "w") 70 tmp = self.data.items() 71 tmp.sort() 72 for (k, v) in tmp: 73 if self._bad.search(k) and not k.startswith('#'): 74 die.warn("Bad key will be ignored: %s" % k) 75 else: 76 fd.writelines("%s=%s\n" % (k, v)) 77 fd.flush() 78 os.fsync(fd.fileno()) 79 fd.close() 80 if os.access(self.fn, os.R_OK): 81 os.rename(self.fn, '%s.bak' % self.fn) 82 os.rename('%s.tmp' % self.fn, self.fn) 83 self.modified = 0
84 85
86 - def read(self):
87 self.data = { 'FILENAME': self.fn} 88 die.note("file", self.fn) 89 n = 1 90 for x in open(self.fn, "r"): 91 die.note("line", n) 92 x = x.strip() 93 if x == '': 94 n += 1 95 continue 96 try: 97 k, v = x.split('=', 1) 98 self.data[k] = v 99 except: 100 if not x.startswith('#'): 101 raise 102 n += 1
103 104 105 106 if __name__ == '__main__': 107 import sys 108 x = hdr(sys.argv[1]) 109 x.set("TEST", 1, qc=1) 110 x.write() 111