Mercurial > hg > config
comparison python/simpleini.py @ 115:c499f5a598cf
make variable interpolation sorta work; the nonce thing probably isnt the best idea
| author | Jeff Hammel <jhammel@mozilla.com> |
|---|---|
| date | Thu, 02 Dec 2010 17:16:53 -0800 |
| parents | 9b193312ceba |
| children |
comparison
equal
deleted
inserted
replaced
| 114:9b193312ceba | 115:c499f5a598cf |
|---|---|
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 | 2 |
| 3 import os | 3 import os |
| 4 | 4 |
| 5 def read(fp, variables=None, default='DEFAULT', | 5 def read(fp, variables=None, default='DEFAULT', |
| 6 comments=';#', separators=('=', ':'), strict=True): | 6 comments=';#', separators=('=', ':'), |
| 7 interpolate=True, strict=True): | |
| 7 """ | 8 """ |
| 8 read an .ini file and return a list of [(section, values)] | 9 read an .ini file and return a list of [(section, values)] |
| 9 - fp : file pointer or name to read | 10 - fp : file pointer or name to read |
| 10 - variables : default set of variables | 11 - variables : default set of variables |
| 11 - default : name of the section for the default section | 12 - default : name of the section for the default section |
| 92 | 93 |
| 93 # interpret the variables | 94 # interpret the variables |
| 94 def interpret_variables(global_dict, local_dict): | 95 def interpret_variables(global_dict, local_dict): |
| 95 variables = global_dict.copy() | 96 variables = global_dict.copy() |
| 96 variables.update(local_dict) | 97 variables.update(local_dict) |
| 97 # TODO: string intepolation | 98 |
| 99 # string intepolation | |
| 100 if interpolate: | |
| 101 nonce = '__s__' | |
| 102 assert nonce not in global_dict | |
| 103 global_dict[nonce] = '%s' | |
| 104 for key, value in variables.items(): | |
| 105 try: | |
| 106 value = value.replace('%s', '%(__s__)s') % global_dict | |
| 107 variables[key] = value | |
| 108 except: | |
| 109 if strict: | |
| 110 del global_dict[nonce] | |
| 111 raise Exception("could not intepolate variable %s: %s" % (key, value)) | |
| 112 pass | |
| 113 | |
| 114 del global_dict[nonce] | |
| 98 return variables | 115 return variables |
| 99 | 116 |
| 100 sections = [(i, interpret_variables(variables, j)) for i, j in sections] | 117 sections = [(i, interpret_variables(variables, j)) for i, j in sections] |
| 101 return sections | 118 return sections |
| 102 | 119 |
| 103 if __name__ == '__main__': | 120 if __name__ == '__main__': |
| 104 import sys | 121 import sys |
| 105 for i in sys.argv[1:]: | 122 for i in sys.argv[1:]: |
| 106 print read(i) | 123 path = os.path.abspath(i) |
| 124 print read(i, strict=False, variables=dict(here=os.path.dirname(path))) |
