manage informations

This commit is contained in:
2021-01-23 11:57:46 +01:00
parent c05c0b9716
commit 02771b6d73
13 changed files with 75 additions and 55 deletions

View File

@ -39,6 +39,7 @@ class FamilyAnnotator:
self.change_variable_mode()
self.change_family_mode()
self.dynamic_families()
self.convert_help()
def remove_empty_families(self):
"""Remove all families without any variable
@ -175,3 +176,14 @@ class FamilyAnnotator:
msg = _(f'dynamic family "{family.name}" must be linked '
f'to multi variable in {xmlfiles}')
raise DictConsistencyError(msg, 16)
def convert_help(self):
"""Convert variable help
"""
for families in self.objectspace.space.variables.values():
for family in families.family.values():
if hasattr(family, 'help'):
if not hasattr(family, 'information'):
family.information = self.objectspace.information(family.xmlfiles)
family.information.help = family.help
del family.help

View File

@ -11,7 +11,7 @@ from ..error import DictConsistencyError
ERASED_ATTRIBUTES = ('redefine', 'exists', 'fallback', 'optional', 'remove_check', 'namespace',
'remove_condition', 'path', 'instance_mode', 'index', 'is_in_leadership',
'level', 'remove_fill', 'xmlfiles', 'type', 'reflector_name',
'reflector_object',)
'reflector_object', 'manage')
KEY_TYPE = {'variable': 'symlink',
@ -50,14 +50,12 @@ class ServiceAnnotator:
self.objectspace.space.services.name = 'services'
self.objectspace.space.services.doc = 'services'
self.objectspace.space.services.path = 'services'
families = {}
for service_name in self.objectspace.space.services.service.keys():
service = self.objectspace.space.services.service[service_name]
new_service = self.objectspace.service(service.xmlfiles)
new_service.path = f'services.{service_name}'
for elttype, values in vars(service).items():
for service_name, service in self.objectspace.space.services.service.items():
service.information = self.objectspace.information(service.xmlfiles)
service.information.manage = service.manage
service.manage = None
for elttype, values in dict(vars(service)).items():
if not isinstance(values, (dict, list)) or elttype in ERASED_ATTRIBUTES:
setattr(new_service, elttype, values)
continue
eltname = elttype + 's'
path = '.'.join(['services', normalize_family(service_name), eltname])
@ -72,10 +70,8 @@ class ServiceAnnotator:
values,
path,
)
setattr(new_service, elttype, family)
new_service.doc = new_service.name
families[service_name] = new_service
self.objectspace.space.services.service = families
setattr(service, elttype, family)
service.doc = service.name
def make_group_from_elts(self,
service_name,

View File

@ -54,6 +54,7 @@ class VariableAnnotator: # pylint: disable=R0903
self.objectspace = objectspace
self.convert_variable()
self.convert_test()
self.convert_help()
def convert_variable(self):
"""convert variable
@ -162,16 +163,38 @@ class VariableAnnotator: # pylint: disable=R0903
def _convert_test(self,
variable,
) -> None:
if not hasattr(variable, 'information'):
variable.information = self.objectspace.information(variable.xmlfiles)
if hasattr(variable, 'test'):
if not variable.test:
del variable.test
return
values = variable.test.split('|')
new_values = []
for value in values:
if value == '':
value = None
else:
value = CONVERT_OPTION.get(variable.type, {}).get('func', str)(value)
new_values.append(value)
variable.test = tuple(new_values)
if variable.test:
values = variable.test.split('|')
new_values = []
for value in values:
if value == '':
value = None
else:
value = CONVERT_OPTION.get(variable.type, {}).get('func', str)(value)
new_values.append(value)
variable.information.test = tuple(new_values)
del variable.test
def convert_help(self):
"""Convert variable help
"""
for families in self.objectspace.space.variables.values():
for family in families.family.values():
if not hasattr(family, 'variable'):
continue
for variable in family.variable.values():
if isinstance(variable, self.objectspace.leadership):
for follower in variable.variable:
self._convert_help(follower)
else:
self._convert_help(variable)
def _convert_help(self,
variable,
) -> None:
if hasattr(variable, 'help'):
variable.information.help = variable.help
del variable.help

View File

@ -17,7 +17,7 @@ FORCE_UNREDEFINABLES = ('value',)
# RougailObjSpace's elements that shall not be modify
UNREDEFINABLE = ('multi', 'type')
# RougailObjSpace's elements that did not created automaticly
FORCE_ELEMENTS = ('choice', 'property_', 'leadership')
FORCE_ELEMENTS = ('choice', 'property_', 'leadership', 'information')
# XML text are convert has name
FORCED_TEXT_ELTS_AS_NAME = ('choice', 'property', 'value', 'target')

View File

@ -3,12 +3,10 @@ flattened XML specific
"""
from .config import Config
from .annotator import ERASED_ATTRIBUTES, CONVERT_OPTION
#from .objspace import UnRedefinable, Redefinable, Atom
FUNC_TO_DICT = []
FORCE_INFORMATIONS = ['help', 'test', 'manage']
ATTRIBUTES_ORDER = ('name', 'doc', 'default', 'multi')
ATTRIBUTES_ORDER = ('name', 'doc', 'default', 'multi', 'properties', 'max_number', 'min_number', 'dynamic', 'opt')
class Root(): # pylint: disable=R0903
@ -180,7 +178,6 @@ class Common:
self.elt = elt
self.option_name = None
self.attrib = {}
self.informations = {}
self.text = text
self.elt.reflector_object = self
@ -228,7 +225,11 @@ class Common:
def populate_informations(self):
"""Populate Tiramisu's informations
"""
for key, value in self.informations.items():
if not hasattr(self.elt, 'information'):
return
for key, value in vars(self.elt.information).items():
if key == 'xmlfiles':
continue
if isinstance(value, str):
value = '"' + value.replace('"', '\"') + '"'
self.text.append(f'{self.option_name}.impl_set_information("{key}", {value})')
@ -236,17 +237,9 @@ class Common:
def get_attributes(self, space): # pylint: disable=R0201
"""Get attributes
"""
attributes = dir(space)
for attr in ATTRIBUTES_ORDER:
if attr in attributes:
if hasattr(space, attr):
yield attr
for attr in dir(space):
if attr not in ATTRIBUTES_ORDER:
if not attr.startswith('_') and attr not in ERASED_ATTRIBUTES:
value = getattr(space, attr)
if not isinstance(value, (list, dict)) and \
not value.__class__.__name__ == 'Family':
yield attr
@staticmethod
def get_children(space):
@ -296,11 +289,7 @@ class Variable(Common):
"""Populate attributes
"""
for key in self.get_attributes(self.elt):
value = getattr(self.elt, key)
if key in FORCE_INFORMATIONS:
self.informations[key] = value
else:
self.attrib[key] = value
self.attrib[key] = getattr(self.elt, key)
def parse_children(self):
"""Parse children
@ -346,6 +335,8 @@ class Variable(Common):
self.calculate_choice(child,
choices,
)
else: # pragma: no cover
raise Exception(f'unknown tag {tag}')
def calculate_choice(self,
child,
@ -475,9 +466,7 @@ class Family(Common):
"""
for key in self.get_attributes(self.elt):
value = getattr(self.elt, key)
if key in FORCE_INFORMATIONS:
self.informations[key] = value
elif key == 'dynamic':
if key == 'dynamic':
dynamic = value.reflector_object.get()
self.attrib['suffixes'] = \
f"Calculation(func.calc_value, Params((ParamOption({dynamic}))))"