blob: 46669f034780630a0a6f4918fea7475bc2b2de73 [file] [log] [blame]
koder aka kdanilov962ee5f2016-12-19 02:40:08 +02001from typing import Any, Dict, Optional
koder aka kdanilov3d2bc4f2016-11-12 18:31:18 +02002from .storage import IStorable
koder aka kdanilovcff7b2e2015-04-18 20:48:15 +03003
koder aka kdanilov962ee5f2016-12-19 02:40:08 +02004ConfigBlock = Any
koder aka kdanilovfd2cfa52015-05-20 03:17:42 +03005
6
koder aka kdanilov22d134e2016-11-08 11:33:19 +02007class Config(IStorable):
koder aka kdanilov3d2bc4f2016-11-12 18:31:18 +02008 def __init__(self, dct: ConfigBlock) -> None:
koder aka kdanilov962ee5f2016-12-19 02:40:08 +02009 # make mypy happy, set fake dict
10 self.__dict__['_dct'] = {}
11 self.run_uuid = None # type: str
12 self.storage_url = None # type: str
13 self.comment = None # type: str
14 self.keep_vm = None # type: bool
15 self.dont_discover_nodes = None # type: bool
16 self.build_id = None # type: str
17 self.build_description = None # type: str
18 self.build_type = None # type: str
19 self.default_test_local_folder = None # type: str
20 self.settings_dir = None # type: str
21 self.connect_timeout = None # type: int
22 self.no_tests = False # type: bool
23 self.debug_agents = False # type: bool
24
25 # None, disabled, enabled, metadata, ignore_errors
26 self.discovery = None # type: Optional[str]
27
28 self.logging = None # type: ConfigBlock
29 self.ceph = None # type: ConfigBlock
30 self.openstack = None # type: ConfigBlock
31 self.fuel = None # type: ConfigBlock
32 self.test = None # type: ConfigBlock
33 self.sensors = None # type: ConfigBlock
34
35 self._dct.clear()
36 self._dct.update(dct)
37
38 def raw(self) -> ConfigBlock:
39 return self._dct
koder aka kdanilovfd2cfa52015-05-20 03:17:42 +030040
koder aka kdanilov3d2bc4f2016-11-12 18:31:18 +020041 def get(self, path: str, default: Any = None) -> Any:
koder aka kdanilov22d134e2016-11-08 11:33:19 +020042 curr = self
koder aka kdanilov22d134e2016-11-08 11:33:19 +020043 while path:
44 if '/' in path:
45 name, path = path.split('/', 1)
46 else:
47 name = path
48 path = ""
49
50 try:
51 curr = getattr(curr, name)
52 except AttributeError:
53 return default
54
55 return curr
56
57 def __getattr__(self, name: str) -> Any:
58 try:
koder aka kdanilov962ee5f2016-12-19 02:40:08 +020059 val = self._dct[name]
koder aka kdanilov22d134e2016-11-08 11:33:19 +020060 except KeyError:
61 raise AttributeError(name)
62
63 if isinstance(val, dict):
64 val = self.__class__(val)
65
66 return val
67
68 def __setattr__(self, name: str, val: Any):
koder aka kdanilov962ee5f2016-12-19 02:40:08 +020069 self._dct[name] = val
koder aka kdanilovcff7b2e2015-04-18 20:48:15 +030070
koder aka kdanilov3d2bc4f2016-11-12 18:31:18 +020071 def __contains__(self, name: str) -> bool:
72 return self.get(name) is not None