Mercurial > hg > martINI
comparison martini/config.py @ 9:77c7556fa8e0
well, dammit
| author | Jeff Hammel <k0scist@gmail.com> |
|---|---|
| date | Tue, 23 Aug 2016 09:11:49 -0700 |
| parents | 81aed4352851 |
| children | 66d11212175d |
comparison
equal
deleted
inserted
replaced
| 8:81aed4352851 | 9:77c7556fa8e0 |
|---|---|
| 2 | 2 |
| 3 import os | 3 import os |
| 4 import sys | 4 import sys |
| 5 import urllib2 | 5 import urllib2 |
| 6 | 6 |
| 7 from odict import OrderedDict | |
| 8 from ConfigParser import ConfigParser | 7 from ConfigParser import ConfigParser |
| 9 from ConfigParser import InterpolationMissingOptionError | 8 from ConfigParser import InterpolationMissingOptionError |
| 10 from ConfigParser import MissingSectionHeaderError | 9 from ConfigParser import MissingSectionHeaderError |
| 11 from ConfigParser import NoOptionError | 10 from ConfigParser import NoOptionError |
| 12 from StringIO import StringIO | 11 from StringIO import StringIO |
| 13 | 12 |
| 13 try: | |
| 14 from collections import OrderedDict | |
| 15 except ImportError: | |
| 16 from odict import OrderedDict | |
| 17 | |
| 18 | |
| 14 def file_pointer(resource): | 19 def file_pointer(resource): |
| 15 """returns a file-like object given a string""" | 20 """returns a file-like object given a string""" |
| 16 # XXX could go in utils.py | 21 # XXX could go in utils.py |
| 17 | 22 |
| 18 if not isinstance(resource, basestring): | 23 if not isinstance(resource, basestring): |
| 19 # assume resource is already a file-like object | 24 # assume resource is already a file-like object |
| 20 return resource | 25 return resource |
| 21 | 26 |
| 59 _section = self[section] | 64 _section = self[section] |
| 60 self.remove_section(section) | 65 self.remove_section(section) |
| 61 else: | 66 else: |
| 62 _section = {} | 67 _section = {} |
| 63 self.read({newname: _section}) | 68 self.read({newname: _section}) |
| 64 | 69 |
| 65 def dict(self): | 70 def dict(self): |
| 66 """return a dictionary of dictionaries; | 71 """return a dictionary of dictionaries; |
| 67 the outer with keys of section names; | 72 the outer with keys of section names; |
| 68 the inner with keys, values of the section""" | 73 the inner with keys, values of the section""" |
| 69 return dict([(section, self[section]) | 74 return OrderedDict([(section, self[section]) |
| 70 for section in self.sections()]) | 75 for section in self.sections()]) |
| 71 | 76 |
| 72 def read(self, *ini): | 77 def read(self, *ini): |
| 73 for _ini in ini: | 78 for _ini in ini: |
| 74 if isinstance(_ini, dict): | 79 if isinstance(_ini, (dict, OrderedDict)): |
| 75 for section, contents in _ini.items(): | 80 for section, contents in _ini.items(): |
| 76 for option, value in contents.items(): | 81 for option, value in contents.items(): |
| 77 self.set(section, option, value) | 82 self.set(section, option, value) |
| 78 elif isinstance(_ini, list) or isinstance(_ini, tuple): | 83 elif isinstance(_ini, (list, tuple)): |
| 79 | 84 |
| 80 # ensure list or tuple of 3-tuples | 85 # ensure list or tuple of 3-tuples |
| 81 assert len([option for option in _ini | 86 assert len([option for option in _ini |
| 82 if isinstance(option, tuple) | 87 if isinstance(option, tuple) |
| 83 and len(option) == 3]) | 88 and len(option) == 3]) |
| 84 | 89 |
| 85 for section, option, value in _ini: | 90 for section, option, value in _ini: |
| 86 self.set(section, option, value) | 91 self.set(section, option, value) |
| 87 else: | 92 else: |
| 88 fp = file_pointer(_ini) | 93 fp = file_pointer(_ini) |
| 89 try: | 94 try: |
| 90 self.readfp(fp) | 95 self.readfp(fp) |
| 91 except MissingSectionHeaderError: | 96 except MissingSectionHeaderError: |
| 92 fp.seek(0) | 97 fp.seek(0) |
| 93 fp = StringIO("[DEFAULTS]\n" + fp.read()) | 98 fp = StringIO("[DEFAULTS]\n" + fp.read()) |
| 94 self.readfp(fp) | 99 self.readfp(fp) |
| 95 | 100 |
| 96 def missing(self): | 101 def missing(self): |
| 97 """returns missing variable names""" | 102 """returns missing variable names""" |
| 98 missing = set() | |
| 99 | 103 |
| 104 missing = set() | |
| 100 for section in self.sections(): | 105 for section in self.sections(): |
| 101 for key, val in self.items(section, raw=True): | 106 for key, val in self.items(section, raw=True): |
| 102 try: | 107 try: |
| 103 self.get(section, key) | 108 self.get(section, key) |
| 104 except InterpolationMissingOptionError, e: | 109 except InterpolationMissingOptionError, e: |
| 110 return options in format appropriate to trac: | 115 return options in format appropriate to trac: |
| 111 [ (section, option, value) ] | 116 [ (section, option, value) ] |
| 112 """ | 117 """ |
| 113 options = [] | 118 options = [] |
| 114 for section in self.sections(): | 119 for section in self.sections(): |
| 115 options.extend([(section,) + item | 120 options.extend([(section,) + item |
| 116 for item in self.items(section)]) | 121 for item in self.items(section)]) |
| 117 return options | 122 return options |
| 118 | 123 |
| 119 def write(self, fp=sys.stdout, raw=False, sorted=True, vars=None): | 124 def write(self, fp=sys.stdout, raw=False, sorted=True, vars=None): |
| 120 sections = self.sections() | 125 sections = self.sections() |
