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 @@
+
+
+
+
+
+
+
+
+ non
+
+
+ non
+
+
+
+
+
+
+
+
+
+
+
+
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])