1TRUE_VALS = set(['1', 't', 'true', 'on', 'yes', 'y']) 2__unittest = True 3 4 5class Config(object): 6 7 """Configuration for a plugin or other entities. 8 9 Encapsulates configuration for a single plugin or other element. 10 Corresponds to a :class:`ConfigParser.Section` but provides an 11 extended interface for extracting items as a certain type. 12 13 """ 14 15 def __init__(self, items): 16 self._items = items 17 self._mvd = {} 18 for k, v in items: 19 self._mvd.setdefault(k, []).append(v) 20 21 def __getitem__(self, key): 22 return self._mvd[key] 23 24 def as_bool(self, key, default=None): 25 """Get key value as boolean 26 27 1, t, true, on, yes and y (case insensitive) are accepted as ``True`` 28 values. All other values are ``False``. 29 30 """ 31 try: 32 val = self._mvd[key][0].strip() 33 except KeyError: 34 return default 35 except IndexError: 36 # setting = -> False 37 return False 38 return val.lower() in TRUE_VALS 39 40 def as_int(self, key, default=None): 41 """Get key value as integer""" 42 return self._cast(key, int, default) 43 44 def as_float(self, key, default=None): 45 """Get key value as float""" 46 return self._cast(key, float, default) 47 48 def as_str(self, key, default=None): 49 """Get key value as str""" 50 return self._cast(key, str, default) 51 52 def as_list(self, key, default=None): 53 """Get key value as list. 54 55 The value is split into lines and returned as a list. Lines 56 are stripped of whitespace, and lines beginning with # are 57 skipped. 58 59 """ 60 lines = [] 61 try: 62 vlist = self[key] 63 except KeyError: 64 return default 65 for val in vlist: 66 lines.extend( 67 line.strip() for line in val.splitlines() 68 if line.strip() and not line.strip().startswith('#')) 69 return lines 70 71 def get(self, key, default=None): 72 """Get key value""" 73 return self.as_str(key, default) 74 75 def _cast(self, key, type_, default): 76 try: 77 return type_(self._mvd[key][0].strip()) 78 except (KeyError, IndexError): 79 return default 80