blob: e96a03eb4e58bfb246f472471f9483467f48e1ba [file] [log] [blame]
koder aka kdanilov22d134e2016-11-08 11:33:19 +02001from typing import Any, Dict
koder aka kdanilov3d2bc4f2016-11-12 18:31:18 +02002from .storage import IStorable
koder aka kdanilovcff7b2e2015-04-18 20:48:15 +03003
koder aka kdanilov3d2bc4f2016-11-12 18:31:18 +02004ConfigBlock = Dict[str, 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 # make mypy happy
koder aka kdanilov22d134e2016-11-08 11:33:19 +02009 run_uuid = None # type: str
10 storage_url = None # type: str
11 comment = None # type: str
12 keep_vm = None # type: bool
koder aka kdanilov22d134e2016-11-08 11:33:19 +020013 dont_discover_nodes = None # type: bool
14 build_id = None # type: str
15 build_description = None # type: str
16 build_type = None # type: str
koder aka kdanilov3d2bc4f2016-11-12 18:31:18 +020017 default_test_local_folder = None # type: str
18 settings_dir = None # type: str
koder aka kdanilov39e449e2016-12-17 15:15:26 +020019 connect_timeout = 30 # type: int
20 no_tests = False # type: bool
koder aka kdanilov0fdaaee2015-06-30 11:10:48 +030021
koder aka kdanilov3d2bc4f2016-11-12 18:31:18 +020022 def __init__(self, dct: ConfigBlock) -> None:
koder aka kdanilov22d134e2016-11-08 11:33:19 +020023 self.__dict__['_dct'] = dct
koder aka kdanilovfd2cfa52015-05-20 03:17:42 +030024
koder aka kdanilov3d2bc4f2016-11-12 18:31:18 +020025 def get(self, path: str, default: Any = None) -> Any:
koder aka kdanilov22d134e2016-11-08 11:33:19 +020026 curr = self
koder aka kdanilovfd2cfa52015-05-20 03:17:42 +030027
koder aka kdanilov22d134e2016-11-08 11:33:19 +020028 while path:
29 if '/' in path:
30 name, path = path.split('/', 1)
31 else:
32 name = path
33 path = ""
34
35 try:
36 curr = getattr(curr, name)
37 except AttributeError:
38 return default
39
40 return curr
41
42 def __getattr__(self, name: str) -> Any:
43 try:
44 val = self.__dct[name]
45 except KeyError:
46 raise AttributeError(name)
47
48 if isinstance(val, dict):
49 val = self.__class__(val)
50
51 return val
52
53 def __setattr__(self, name: str, val: Any):
54 self.__dct[name] = val
koder aka kdanilovcff7b2e2015-04-18 20:48:15 +030055
koder aka kdanilov3d2bc4f2016-11-12 18:31:18 +020056 def __contains__(self, name: str) -> bool:
57 return self.get(name) is not None