pylint
This commit is contained in:
@ -268,13 +268,17 @@ class ConstrainteAnnotator:
|
||||
):
|
||||
if target.type == 'variable':
|
||||
variable = self.objectspace.paths.get_variable_obj(target.name)
|
||||
family = self.objectspace.paths.get_family_obj(target.name.rsplit('.', 1)[0])
|
||||
family = self.objectspace.paths.get_family(target.name.rsplit('.', 1)[0],
|
||||
variable.namespace,
|
||||
)
|
||||
# it's a leader, so apply property to leadership
|
||||
if isinstance(family, self.objectspace.leadership) and family.name == variable.name:
|
||||
if isinstance(family, self.objectspace.leadership) and family.variable[0].name == variable.name:
|
||||
return family, family.variable
|
||||
return variable, [variable]
|
||||
# it's a family
|
||||
variable = self.objectspace.paths.get_family_obj(target.name)
|
||||
variable = self.objectspace.paths.get_family(target.name,
|
||||
None,
|
||||
)
|
||||
return variable, list(variable.variable.values())
|
||||
|
||||
def convert_condition_target(self):
|
||||
@ -302,14 +306,13 @@ class ConstrainteAnnotator:
|
||||
if not target.optional or err.errno != 42:
|
||||
raise err
|
||||
elif target.type == 'family':
|
||||
target_names = '.'.join([normalize_family(name) \
|
||||
target_path = '.'.join([normalize_family(name) \
|
||||
for name in target.name.split('.')])
|
||||
try:
|
||||
target.name = self.objectspace.paths.get_family_path(target_names,
|
||||
condition.namespace,
|
||||
)
|
||||
except KeyError:
|
||||
if not self.objectspace.paths.family_is_defined(target_path,
|
||||
condition.namespace,
|
||||
):
|
||||
raise DictConsistencyError(_(f'cannot found family {target.name}'), 12)
|
||||
target.name = target_path
|
||||
elif target.type.endswith('list') and \
|
||||
condition.name not in ['disabled_if_in', 'disabled_if_not_in']:
|
||||
xmlfiles = self.objectspace.display_xmlfiles(target.xmlfiles)
|
||||
|
@ -169,14 +169,10 @@ class FamilyAnnotator:
|
||||
for family in families.family.values():
|
||||
if 'dynamic' not in vars(family):
|
||||
continue
|
||||
namespace = self.objectspace.paths.get_variable_namespace(family.dynamic)
|
||||
varpath = self.objectspace.paths.get_variable_path(family.dynamic,
|
||||
namespace,
|
||||
)
|
||||
obj = self.objectspace.paths.get_variable_obj(varpath)
|
||||
obj = self.objectspace.paths.get_variable_obj(family.dynamic)
|
||||
if not obj.multi:
|
||||
xmlfiles = self.objectspace.display_xmlfiles(family.xmlfiles)
|
||||
msg = _(f'dynamic family "{family.name}" must be linked '
|
||||
f'to multi variable in {xmlfiles}')
|
||||
raise DictConsistencyError(msg, 16)
|
||||
family.dynamic = varpath
|
||||
family.dynamic = obj.path
|
||||
|
@ -3,6 +3,7 @@
|
||||
from typing import List
|
||||
|
||||
from ..i18n import _
|
||||
from ..config import Config
|
||||
from ..error import DictConsistencyError
|
||||
|
||||
|
||||
@ -23,15 +24,16 @@ class GroupAnnotator:
|
||||
"""
|
||||
for group in self.objectspace.space.constraints.group:
|
||||
leader_fullname = group.leader
|
||||
leader = self.objectspace.paths.get_variable_obj(leader_fullname)
|
||||
leader_family_name = self.objectspace.paths.get_variable_family_name(leader_fullname)
|
||||
leader_name = self.objectspace.paths.get_variable_name(leader_fullname)
|
||||
namespace = self.objectspace.paths.get_variable_namespace(leader_fullname)
|
||||
if '.' not in leader_fullname:
|
||||
leader_fullname = '.'.join([namespace, leader_family_name, leader_fullname])
|
||||
leader_fullname = '.'.join([leader.namespace, leader_family_name, leader_fullname])
|
||||
follower_names = list(group.follower.keys())
|
||||
has_a_leader = False
|
||||
leader_family = leader_fullname.rsplit('.', 1)[0]
|
||||
ori_leader_family = self.objectspace.paths.get_family_obj(leader_family)
|
||||
ori_leader_family = self.objectspace.paths.get_family(leader_family,
|
||||
leader.namespace,
|
||||
)
|
||||
has_a_leader = False
|
||||
for variable in list(ori_leader_family.variable.values()):
|
||||
if has_a_leader:
|
||||
# it's a follower
|
||||
@ -48,7 +50,7 @@ class GroupAnnotator:
|
||||
if follower_names == []:
|
||||
# no more follower
|
||||
break
|
||||
elif variable.name == leader_name:
|
||||
elif variable.name == leader.name:
|
||||
# it's a leader
|
||||
if isinstance(variable, self.objectspace.leadership):
|
||||
# append follower to an existed leadership
|
||||
@ -60,11 +62,11 @@ class GroupAnnotator:
|
||||
if hasattr(group, 'name'):
|
||||
leadership_name = group.name
|
||||
else:
|
||||
leadership_name = leader_name
|
||||
leadership_name = leader.name
|
||||
leader_is_hidden = self.manage_leader(leader_space,
|
||||
leader_family_name,
|
||||
leadership_name,
|
||||
leader_name,
|
||||
leader.name,
|
||||
variable,
|
||||
group,
|
||||
)
|
||||
@ -104,16 +106,16 @@ class GroupAnnotator:
|
||||
variable.hidden = None
|
||||
if hasattr(group, 'description'):
|
||||
leader_space.doc = group.description
|
||||
elif hasattr(variable, 'description'):
|
||||
elif variable.name == leadership_name and hasattr(variable, 'description'):
|
||||
leader_space.doc = variable.description
|
||||
else:
|
||||
leader_space.doc = variable.name
|
||||
leader_space.doc = leadership_name
|
||||
namespace = variable.namespace
|
||||
leadership_path = namespace + '.' + leader_family_name + '.' + leadership_name
|
||||
self.objectspace.paths.add_family(namespace,
|
||||
leadership_path,
|
||||
leader_space,
|
||||
)
|
||||
self.objectspace.paths.add_leadership(namespace,
|
||||
leadership_path,
|
||||
leader_space,
|
||||
)
|
||||
leader_family = self.objectspace.space.variables[namespace].family[leader_family_name]
|
||||
leader_family.variable[leader_name] = leader_space
|
||||
leader_space.variable.append(variable)
|
||||
|
@ -146,7 +146,7 @@ class ServiceAnnotator:
|
||||
if idx:
|
||||
c_name += f'_{idx}'
|
||||
subpath = '{}.{}'.format(path, c_name)
|
||||
if not self.objectspace.paths.family_is_defined(subpath):
|
||||
if not self.objectspace.paths.family_is_defined(subpath, 'services'):
|
||||
return c_name, subpath
|
||||
idx += 1
|
||||
|
||||
@ -187,6 +187,7 @@ class ServiceAnnotator:
|
||||
val.type = type_
|
||||
val.name = value
|
||||
variable.value = [val]
|
||||
variable.namespace = 'services'
|
||||
self.objectspace.paths.add_variable('services',
|
||||
path,
|
||||
'service',
|
||||
|
@ -312,9 +312,7 @@ class RougailObjSpace:
|
||||
name = space.path + '.' + name
|
||||
if not self.paths.path_is_defined(name):
|
||||
return None
|
||||
old_family_name = self.paths.get_variable_family_name(name)
|
||||
if namespace != Config['variable_namespace']:
|
||||
old_family_name = namespace + '.' + old_family_name
|
||||
old_family_name = namespace + '.' + self.paths.get_variable_family_name(name)
|
||||
if space.path != old_family_name:
|
||||
xmlfiles = self.display_xmlfiles(space.xmlfiles)
|
||||
msg = _(f'Variable was previously create in family "{old_family_name}", '
|
||||
@ -451,7 +449,6 @@ class RougailObjSpace:
|
||||
family_name,
|
||||
variableobj,
|
||||
)
|
||||
variableobj.path = self.paths.get_family_path(family_name, namespace)
|
||||
|
||||
@staticmethod
|
||||
def add_to_tree_structure(variableobj,
|
||||
|
@ -21,17 +21,30 @@ class Path:
|
||||
name: str,
|
||||
variableobj: str,
|
||||
) -> str: # pylint: disable=C0111
|
||||
if '.' not in name and namespace == Config['variable_namespace']:
|
||||
if namespace == Config['variable_namespace']:
|
||||
full_name = '.'.join([namespace, 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: # pragma: no cover
|
||||
if full_name in self.families and \
|
||||
self.families[full_name]['variableobj'] != variableobj: # pragma: no cover
|
||||
raise DictConsistencyError(_(f'Duplicate family name "{name}"'), 37)
|
||||
self.families[full_name] = dict(name=name,
|
||||
namespace=namespace,
|
||||
variableobj=variableobj,
|
||||
)
|
||||
variableobj.path = full_name
|
||||
|
||||
def add_leadership(self,
|
||||
namespace: str,
|
||||
path: str,
|
||||
variableobj: str,
|
||||
) -> str: # pylint: disable=C0111
|
||||
self.families[path] = dict(name=path,
|
||||
namespace=namespace,
|
||||
variableobj=variableobj,
|
||||
)
|
||||
variableobj.path = path
|
||||
|
||||
def _get_family(self,
|
||||
name: str,
|
||||
@ -45,24 +58,18 @@ class Path:
|
||||
raise DictConsistencyError(_(f'A family located in the "{dico["namespace"]}" namespace shall not be used in the "{namespace}" namespace'), 38)
|
||||
return dico
|
||||
|
||||
def get_family_path(self,
|
||||
name: str,
|
||||
namespace: str,
|
||||
) -> str: # pylint: disable=C0111
|
||||
return self._get_family(name,
|
||||
namespace,
|
||||
)['name']
|
||||
|
||||
def get_family_obj(self,
|
||||
name: str,
|
||||
) -> 'Family': # pylint: disable=C0111
|
||||
return self._get_family(name)['variableobj']
|
||||
def get_family(self,
|
||||
name: str,
|
||||
namespace: str,
|
||||
) -> 'Family': # pylint: disable=C0111
|
||||
return self._get_family(name, namespace)['variableobj']
|
||||
|
||||
def family_is_defined(self,
|
||||
name: str,
|
||||
namespace: str,
|
||||
) -> str: # pylint: disable=C0111
|
||||
try:
|
||||
self._get_family(name)
|
||||
self._get_family(name, namespace)
|
||||
return True
|
||||
except KeyError:
|
||||
return False
|
||||
@ -109,11 +116,6 @@ class Path:
|
||||
variableobj=variableobj,
|
||||
)
|
||||
|
||||
def get_variable_name(self,
|
||||
name: str,
|
||||
): # pylint: disable=C0111
|
||||
return self._get_variable(name)['name']
|
||||
|
||||
def get_variable_obj(self,
|
||||
name: str,
|
||||
) -> 'Variable': # pylint: disable=C0111
|
||||
@ -124,11 +126,6 @@ class Path:
|
||||
) -> str: # pylint: disable=C0111
|
||||
return self._get_variable(name)['family']
|
||||
|
||||
def get_variable_namespace(self,
|
||||
name: str,
|
||||
) -> str: # pylint: disable=C0111
|
||||
return self._get_variable(name)['namespace']
|
||||
|
||||
def get_variable_path(self,
|
||||
name: str,
|
||||
current_namespace: str,
|
||||
|
@ -1,9 +1,10 @@
|
||||
# coding: utf-8
|
||||
"""load XML file from directory
|
||||
"""
|
||||
from typing import List
|
||||
from os.path import join, isfile
|
||||
from os import listdir
|
||||
|
||||
from lxml.etree import DTD, parse, XMLSyntaxError
|
||||
from lxml.etree import DTD, parse, XMLSyntaxError # pylint: disable=E0611
|
||||
|
||||
from .i18n import _
|
||||
from .error import DictConsistencyError
|
||||
@ -39,18 +40,20 @@ class XMLReflector:
|
||||
except XMLSyntaxError as err:
|
||||
raise DictConsistencyError(_(f'{xmlfile} is not an XML file: {err}'), 52)
|
||||
if not self.dtd.validate(document):
|
||||
raise DictConsistencyError(_(f'"{xmlfile}" not a valid XML file: {self.dtd.error_log.filter_from_errors()[0]}'), 43)
|
||||
dtd_error = self.dtd.error_log.filter_from_errors()[0]
|
||||
msg = _(f'"{xmlfile}" not a valid XML file: {dtd_error}')
|
||||
raise DictConsistencyError(msg, 43)
|
||||
return document.getroot()
|
||||
|
||||
def load_xml_from_folders(self,
|
||||
xmlfolders: List[str],
|
||||
):
|
||||
@staticmethod
|
||||
def load_xml_from_folders(xmlfolders: List[str]):
|
||||
"""Loads all the XML files located in the xmlfolders' list
|
||||
|
||||
:param xmlfolders: list of full folder's name
|
||||
"""
|
||||
for xmlfolder in xmlfolders:
|
||||
filenames = [join(xmlfolder, filename) for filename in listdir(xmlfolder) if filename.endswith('.xml')]
|
||||
filenames = [join(xmlfolder, filename) for filename in listdir(xmlfolder) if \
|
||||
filename.endswith('.xml')]
|
||||
filenames.sort()
|
||||
for xmlfile in filenames:
|
||||
yield xmlfile
|
||||
|
Reference in New Issue
Block a user