diff --git a/calculate/variables/datavars.py b/calculate/variables/datavars.py index 2d5be9e..e75991f 100644 --- a/calculate/variables/datavars.py +++ b/calculate/variables/datavars.py @@ -347,6 +347,7 @@ class Table: if index < len(self._rows): return self._rows[index] else: + return {key: None for key in self.columns} raise VariableError("'{index}' index value is out of range" .format(index=index)) else: @@ -818,7 +819,7 @@ class NamespaceNode: elif name in self._variables: variable = self._variables[name] if variable.variable_type is TableType: - return variable.get_value().get_table() + return variable.get_value() return variable.get_value() else: if self.get_package_name() == "custom": diff --git a/calculate/vars/main/os/__init__.py b/calculate/vars/main/os/__init__.py index d14f814..2c11101 100644 --- a/calculate/vars/main/os/__init__.py +++ b/calculate/vars/main/os/__init__.py @@ -30,9 +30,11 @@ dictNameSystem = {'CDS': 'server', 'CMC': 'desktop', 'CSS': 'server'} + def dict_value(d, keyname, fallback_value): return d.value.get(keyname.value, fallback_value.value) + def detect_other_shortname(systemroot): """Detect other system. Now only Gentoo.""" gentoo_file = os.path.join(systemroot.value, "etc/gentoo-release") @@ -40,6 +42,7 @@ def detect_other_shortname(systemroot): return "Gentoo" return "Linux" + def get_version_from_gentoo_files(systemroot, profilefile): """Get version from gentoo files""" systemroot = systemroot.value @@ -53,15 +56,18 @@ def get_version_from_gentoo_files(systemroot, profilefile): if vers: return vers[-1] + def get_version_from_uname(): """Get version from uname""" re_ver = re.search("^(\d+\.)*\d", platform.release(), re.S) if re_ver: return re_ver.group() + def get_linux_version(systemroot, make_profile): return "21" + def import_variables(): with Namespace("arch"): Variable("machine", type=StringType, diff --git a/tests/parameters/test_parameters.py b/tests/parameters/test_parameters.py index 8a9cfc7..beeb6a6 100644 --- a/tests/parameters/test_parameters.py +++ b/tests/parameters/test_parameters.py @@ -1008,12 +1008,14 @@ class TestParameters: {'dev': '/dev/sdb3', 'mount': '/tmp'}] PARAMS['test'].set(['/dev/sdb2', '/var']) - assert datavars.os.dev_table == [{'dev': '/dev/sdb1', 'mount': '/'}, + assert datavars.os.dev_table.get_table() == [ + {'dev': '/dev/sdb1', 'mount': '/'}, {'dev': '/dev/sdb2', 'mount': '/var'}, {'dev': '/dev/sdb3', 'mount': '/tmp'}] PARAMS['test'].set(['/dev/sdb4', '/home']) - assert datavars.os.dev_table == [{'dev': '/dev/sdb1', 'mount': '/'}, + assert datavars.os.dev_table.get_table() == [ + {'dev': '/dev/sdb1', 'mount': '/'}, {'dev': '/dev/sdb2', 'mount': '/var'}, {'dev': '/dev/sdb3', 'mount': '/tmp'}, {'dev': '/dev/sdb4', 'mount': '/home'} diff --git a/tests/variables/test_datavars.py b/tests/variables/test_datavars.py index 65fe35a..fff9fe7 100644 --- a/tests/variables/test_datavars.py +++ b/tests/variables/test_datavars.py @@ -701,6 +701,8 @@ class TestDatavars: source=Dependence('namespace_1.var_1', depend=depend_function)) + datavars.namespace_1.var_1[0] + print(datavars.namespace_1.var_1[0]) assert datavars.namespace_1.var_2 == 'value_2' def test_if_variable_of_TableType_is_created_using_dependence_that_creates_table__the_created_variable_has_generated_table_as_its_value(self): @@ -731,7 +733,7 @@ class TestDatavars: Variable('repositories', type=TableType, source=Dependence('.config', depend=config_source)) - assert datavars.os.repositories == value + assert datavars.os.repositories.get_table() == value except ImportError: # Если тестируем на другой системе модуль portage будет не найден. assert True @@ -1039,7 +1041,7 @@ name = name_2 value = value_2 """ namespace_filler.fill(datavars, first_ini_text) - assert datavars.custom.test ==\ + assert datavars.custom.test.get_table() ==\ [{'name': 'name_0', 'value': 'value_0'}, {'name': 'name_1', 'value': 'value_1'}, {'name': 'name_2', 'value': 'value_2'}] @@ -1112,9 +1114,9 @@ value = weird_value namespace_filler.fill(datavars, first_ini_text) - assert datavars.custom.test ==\ + assert datavars.custom.test.get_table() ==\ [{'name': 'name_0', 'value': 'value_0'}] - assert datavars.os.test ==\ + assert datavars.os.test.get_table() ==\ [{'name': 'strange_name', 'value': 'weird_value'}] def test_if_calculate_ini_file_is_used_for_modifying_of_the_table_from_calculate_ini_file__the_NamespaceIniFiller_object_modifies_the_table(self): @@ -1134,7 +1136,7 @@ value = value_1 """ namespace_filler.fill(datavars, first_ini_text) - assert datavars.custom.test ==\ + assert datavars.custom.test.get_table() ==\ [{'name': 'name_0', 'value': 'value_0'}, {'name': 'name_1', 'value': 'value_1'}] @@ -1145,7 +1147,7 @@ value = another_value """ namespace_filler.fill(datavars, second_ini_text) - assert datavars.custom.test ==\ + assert datavars.custom.test.get_table() ==\ [{'name': 'name_0', 'value': 'value_0'}, {'name': 'other_name', 'value': 'another_value'}] @@ -1173,7 +1175,7 @@ value = another_value """ namespace_filler.fill(datavars, first_ini_text) - assert datavars.namespace_1.test ==\ + assert datavars.namespace_1.test.get_table() ==\ [{'name': 'new_name', 'value': 'other_value'}, {'name': 'common_name', 'value': 'another_value'}, {'name': 'name_3', 'value': 'value_3'}] @@ -1211,12 +1213,13 @@ value = another_value assert datavars.level.use_local_simple == "Using simple value" assert datavars.level.use_full_simple == "Using simple value" assert datavars.level.device_child == "hdd" - assert datavars.level.device == [{"dev": "/dev/sda", - "type": "hdd", - "name": "Samsung SSD"}, - {"dev": "/dev/sdb", - "type": "flash", - "name": "Transcend 64GB"}] + assert datavars.level.device.get_table() == [ + {"dev": "/dev/sda", + "type": "hdd", + "name": "Samsung SSD"}, + {"dev": "/dev/sdb", + "type": "flash", + "name": "Transcend 64GB"}] def test_if_a_Datavars_object_is_created_with_path_to_the_variables_with_Dependencies_and_then_the_variables_are_changed_using_calculate_ini_files_and_the_datavars_object_used_to_get_access_to_the_some_variables_from__the_datavars_object_dynamically_loads_variables_and_retruns_necessary_variables(self): datavars = Datavars( @@ -1270,7 +1273,7 @@ value = another_value assert datavars.os.hashvar.value1 == 'new1' assert datavars.os.hashvar.value2 == 'new2' - assert datavars.os.tablevar == [ + assert datavars.os.tablevar.get_table() == [ {'dev': '/dev/sda1', 'mount': 'swap'}, {'dev': '/dev/sda2', 'mount': '/'}, {'dev': '/dev/sda5', 'mount': '/var/calculate'}] @@ -1288,7 +1291,7 @@ value = another_value assert datavars.os.hashvar.value1 == 'new1' assert datavars.os.hashvar.value2 == 'new2' - assert datavars.os.tablevar == [ + assert datavars.os.tablevar.get_table() == [ {'dev': '/dev/sda1', 'mount': 'swap'}, {'dev': '/dev/sda2', 'mount': '/'}, {'dev': '/dev/sda5', 'mount': '/var/calculate'}] @@ -1635,3 +1638,17 @@ os.linux.test_3 = {{ os.linux.test_3 }} shutil.rmtree(os.path.join(TESTFILES_PATH, 'ini_vars')) assert not os.path.exists(os.path.join(TESTFILES_PATH, 'ini_vars')) + + def test_getting_value_of_the_unexisting_row(self): + Namespace.reset() + datavars = Namespace.datavars + + with Namespace('namespace_1'): + Variable('var_1', type=TableType, source=[{'name': 'name_1', + 'value': 'value_1'}, + {'name': 'name_2', + 'value': 'value_2'}, + {'name': 'name_3', + 'value': 'value_3'}]) + + assert datavars.namespace_1.var_1[3]['value'] is None