diff --git a/src/rougail/path.py b/src/rougail/path.py index 09f7ff48..16123fab 100644 --- a/src/rougail/path.py +++ b/src/rougail/path.py @@ -13,7 +13,8 @@ class Path: def __init__(self): self.variables = {} self.families = {} - self.full_paths = {} + self.full_paths_families = {} + self.full_paths_variables = {} # Family def add_family(self, @@ -23,7 +24,7 @@ class Path: ) -> str: # pylint: disable=C0111 if '.' not in name and namespace == Config['variable_namespace']: full_name = '.'.join([namespace, name]) - self.full_paths[name] = full_name + self.full_paths_families[name] = full_name else: full_name = name if full_name in self.families and self.families[full_name]['variableobj'] != variableobj: @@ -41,8 +42,8 @@ class Path: check_name=False, allow_dot=True, ) - if '.' not in name and current_namespace == Config['variable_namespace'] and name in self.full_paths: - name = self.full_paths[name] + if '.' not in name and current_namespace == Config['variable_namespace'] and name in self.full_paths_families: + name = self.full_paths_families[name] if current_namespace is None: # pragma: no cover raise OperationError('current_namespace must not be None') dico = self.families[name] @@ -55,8 +56,8 @@ class Path: def get_family_obj(self, name: str, ) -> 'Family': # pylint: disable=C0111 - if '.' not in name and name in self.full_paths: - name = self.full_paths[name] + if '.' not in name and name in self.full_paths_families: + name = self.full_paths_families[name] if name not in self.families: raise DictConsistencyError(_('unknown family {}').format(name)) dico = self.families[name] @@ -65,7 +66,7 @@ class Path: def family_is_defined(self, name: str, ) -> str: # pylint: disable=C0111 - if '.' not in name and name not in self.families and name in self.full_paths: + if '.' not in name and name not in self.families and name in self.full_paths_families: return True return name in self.families @@ -88,7 +89,7 @@ class Path: dico['variableobj'], ) if namespace == Config['variable_namespace']: - self.full_paths[name] = new_path + self.full_paths_variables[name] = new_path else: name = new_path dico = self._get_variable(name) @@ -110,7 +111,7 @@ class Path: ) -> str: # pylint: disable=C0111 if '.' not in name: full_name = '.'.join([namespace, family, name]) - self.full_paths[name] = full_name + self.full_paths_variables[name] = full_name else: full_name = name if namespace == Config['variable_namespace']: @@ -176,7 +177,7 @@ class Path: def path_is_defined(self, name: str, ) -> str: # pylint: disable=C0111 - if '.' not in name and name not in self.variables and name in self.full_paths: + if '.' not in name and name not in self.variables and name in self.full_paths_variables: return True return name in self.variables @@ -186,8 +187,8 @@ class Path: ) -> str: if name not in self.variables: if name not in self.variables: - if '.' not in name and name in self.full_paths: - name = self.full_paths[name] + if '.' not in name and name in self.full_paths_variables: + name = self.full_paths_variables[name] if name not in self.variables: for var_name, variable in self.variables.items(): if variable['is_dynamic'] and name.startswith(var_name): @@ -195,9 +196,9 @@ class Path: raise Exception('This option is dynamic, should use "with_suffix" attribute') return variable, name[len(var_name):] if '.' not in name: - for var_name, path in self.full_paths.items(): + for var_name, path in self.full_paths_variables.items(): if name.startswith(var_name): - variable = self.variables[self.full_paths[var_name]] + variable = self.variables[self.full_paths_variables[var_name]] if variable['is_dynamic']: if not with_suffix: raise Exception('This option is dynamic, should use "with_suffix" attribute') diff --git a/tests/dictionaries/01base_var_name_same_family/00-base.xml b/tests/dictionaries/01base_var_name_same_family/00-base.xml new file mode 100644 index 00000000..eb4bf06f --- /dev/null +++ b/tests/dictionaries/01base_var_name_same_family/00-base.xml @@ -0,0 +1,12 @@ + + + + + + non + + + + + diff --git a/tests/dictionaries/01base_var_name_same_family/__init__.py b/tests/dictionaries/01base_var_name_same_family/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/dictionaries/01base_var_name_same_family/makedict/base.json b/tests/dictionaries/01base_var_name_same_family/makedict/base.json new file mode 100644 index 00000000..949887bb --- /dev/null +++ b/tests/dictionaries/01base_var_name_same_family/makedict/base.json @@ -0,0 +1 @@ +{"rougail.general.general": "non"} diff --git a/tests/dictionaries/01base_var_name_same_family/tiramisu/__init__.py b/tests/dictionaries/01base_var_name_same_family/tiramisu/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/dictionaries/01base_var_name_same_family/tiramisu/base.py b/tests/dictionaries/01base_var_name_same_family/tiramisu/base.py new file mode 100644 index 00000000..e5a1d6e8 --- /dev/null +++ b/tests/dictionaries/01base_var_name_same_family/tiramisu/base.py @@ -0,0 +1,14 @@ +import imp +func = imp.load_source('func', 'tests/dictionaries/../eosfunc/test.py') +for key, value in dict(locals()).items(): + if key != ['imp', 'func']: + setattr(func, key, value) +try: + from tiramisu3 import * +except: + from tiramisu import * +from rougail.tiramisu import ConvertDynOptionDescription +option_3 = ChoiceOption(properties=frozenset({'mandatory', 'normal'}), name='general', doc='description', multi=False, default='non', values=('oui', 'non')) +option_2 = OptionDescription(name='general', doc='general', properties=frozenset({'normal'}), children=[option_3]) +option_1 = OptionDescription(name='rougail', doc='rougail', children=[option_2]) +option_0 = OptionDescription(name='baseoption', doc='baseoption', children=[option_1]) diff --git a/tests/dictionaries/60extra_name_family/00-base.xml b/tests/dictionaries/60extra_name_family/00-base.xml new file mode 100644 index 00000000..7304014f --- /dev/null +++ b/tests/dictionaries/60extra_name_family/00-base.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/tests/dictionaries/60extra_name_family/__init__.py b/tests/dictionaries/60extra_name_family/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/dictionaries/60extra_name_family/extra_dirs/extra/00-base.xml b/tests/dictionaries/60extra_name_family/extra_dirs/extra/00-base.xml new file mode 100644 index 00000000..651c2125 --- /dev/null +++ b/tests/dictionaries/60extra_name_family/extra_dirs/extra/00-base.xml @@ -0,0 +1,23 @@ + + + + + + + Exportation de la base de ejabberd + + + + pre + + + + + + non + activer_ejabberd + none + daily + + + diff --git a/tests/dictionaries/60extra_name_family/makedict/base.json b/tests/dictionaries/60extra_name_family/makedict/base.json new file mode 100644 index 00000000..eb7df63a --- /dev/null +++ b/tests/dictionaries/60extra_name_family/makedict/base.json @@ -0,0 +1 @@ +{"rougail.extra.mode_conteneur_actif": "non", "rougail.extra.activer_ejabberd": "non", "extra.ejabberd.description": "Exportation de la base de ejabberd", "extra.ejabberd.day": null, "extra.ejabberd.mode": "pre"} diff --git a/tests/dictionaries/60extra_name_family/tiramisu/__init__.py b/tests/dictionaries/60extra_name_family/tiramisu/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/dictionaries/60extra_name_family/tiramisu/base.py b/tests/dictionaries/60extra_name_family/tiramisu/base.py new file mode 100644 index 00000000..3ea4851e --- /dev/null +++ b/tests/dictionaries/60extra_name_family/tiramisu/base.py @@ -0,0 +1,20 @@ +import imp +func = imp.load_source('func', 'tests/dictionaries/../eosfunc/test.py') +for key, value in dict(locals()).items(): + if key != ['imp', 'func']: + setattr(func, key, value) +try: + from tiramisu3 import * +except: + from tiramisu import * +from rougail.tiramisu import ConvertDynOptionDescription +option_3 = ChoiceOption(properties=frozenset({'force_default_on_freeze', 'frozen', 'hidden', 'mandatory', 'normal'}), name='mode_conteneur_actif', doc='No change', multi=False, default='non', values=('oui', 'non')) +option_4 = ChoiceOption(properties=frozenset({'force_default_on_freeze', 'frozen', 'hidden', 'mandatory', 'normal'}), name='activer_ejabberd', doc='No change', multi=False, default='non', values=('oui', 'non')) +option_2 = OptionDescription(name='extra', doc='extra', properties=frozenset({'normal'}), children=[option_3, option_4]) +option_1 = OptionDescription(name='rougail', doc='rougail', children=[option_2]) +option_7 = StrOption(properties=frozenset({'mandatory', 'normal'}), name='description', doc='description', multi=False, default='Exportation de la base de ejabberd') +option_8 = ChoiceOption(properties=frozenset({'mandatory', 'normal'}), name='day', doc='day', multi=False, default=Calculation(func.calc_multi_condition, Params((ParamValue("non")), kwargs={'condition_1': ParamOption(option_4, notraisepropertyerror=True, todict=False), 'match': ParamValue("none"), 'mismatch': ParamValue("daily")})), values=('none', 'daily', 'weekly', 'monthly')) +option_9 = ChoiceOption(properties=frozenset({'mandatory', 'normal'}), name='mode', doc='mode', multi=False, default='pre', values=('pre', 'post')) +option_6 = OptionDescription(name='ejabberd', doc='ejabberd', properties=frozenset({'normal'}), children=[option_7, option_8, option_9]) +option_5 = OptionDescription(name='extra', doc='extra', children=[option_6]) +option_0 = OptionDescription(name='baseoption', doc='baseoption', children=[option_1, option_5])