refactor
This commit is contained in:
parent
eb6b22e5b1
commit
ef948fa109
|
@ -101,44 +101,41 @@ class ServiceAnnotator:
|
||||||
self.grouplist_conditions = {}
|
self.grouplist_conditions = {}
|
||||||
self.convert_services()
|
self.convert_services()
|
||||||
|
|
||||||
|
def gen_family(self,
|
||||||
|
name,
|
||||||
|
):
|
||||||
|
family = self.objectspace.family()
|
||||||
|
family.name = name
|
||||||
|
family.doc = name
|
||||||
|
family.mode = None
|
||||||
|
return family
|
||||||
|
|
||||||
def convert_services(self):
|
def convert_services(self):
|
||||||
if not hasattr(self.space, 'services'):
|
if not hasattr(self.space, 'services'):
|
||||||
return
|
return
|
||||||
if not hasattr(self.space.services, 'service'):
|
if not hasattr(self.space.services, 'service'):
|
||||||
del self.space.services
|
del self.space.services
|
||||||
return
|
return
|
||||||
for idx, service in enumerate(self.space.services.service.values()):
|
self.space.services.hidden = True
|
||||||
service_name = f'service{idx}'
|
families = {}
|
||||||
family = self.objectspace.family()
|
for idx, service_name in enumerate(self.space.services.service.keys()):
|
||||||
family.name = service_name
|
service = self.space.services.service[service_name]
|
||||||
family.doc = service.name
|
new_service = self.objectspace.service()
|
||||||
family.mode = None
|
for elttype, values in vars(service).items():
|
||||||
family.family = self.convert_service_to_family(f'services.{service_name}',
|
if elttype == 'name' or elttype in ERASED_ATTRIBUTES:
|
||||||
service,
|
setattr(new_service, elttype, values)
|
||||||
)
|
continue
|
||||||
setattr(self.space.services, family.name, family)
|
eltname = elttype + 's'
|
||||||
del self.space.services.service
|
family = self.gen_family(eltname)
|
||||||
|
if isinstance(values, dict):
|
||||||
def convert_service_to_family(self,
|
values = list(values.values())
|
||||||
subpath,
|
family.family = self.make_group_from_elts(elttype,
|
||||||
service,
|
values,
|
||||||
):
|
f'services.{service_name}.{eltname}',
|
||||||
services = {}
|
)
|
||||||
for elttype, values in vars(service).items():
|
setattr(new_service, elttype, family)
|
||||||
if elttype == 'name' or elttype in ERASED_ATTRIBUTES:
|
families[service_name] = new_service
|
||||||
continue
|
self.space.services.service = families
|
||||||
eltname = elttype + 's'
|
|
||||||
family = self.objectspace.family()
|
|
||||||
family.name = eltname
|
|
||||||
family.mode = None
|
|
||||||
if isinstance(values, dict):
|
|
||||||
values = list(values.values())
|
|
||||||
family.family = self.make_group_from_elts(elttype,
|
|
||||||
values,
|
|
||||||
f'{subpath}.{eltname}',
|
|
||||||
)
|
|
||||||
services[family.name] = family
|
|
||||||
return services
|
|
||||||
|
|
||||||
def make_group_from_elts(self,
|
def make_group_from_elts(self,
|
||||||
name,
|
name,
|
||||||
|
@ -160,8 +157,14 @@ class ServiceAnnotator:
|
||||||
update_elt = '_update_' + elt_name
|
update_elt = '_update_' + elt_name
|
||||||
if hasattr(self, update_elt):
|
if hasattr(self, update_elt):
|
||||||
getattr(self, update_elt)(elt, index, path)
|
getattr(self, update_elt)(elt, index, path)
|
||||||
variables = []
|
|
||||||
subpath = '{}.{}{}'.format(path, name, index)
|
if hasattr(elt, 'source'):
|
||||||
|
c_name = elt.source
|
||||||
|
else:
|
||||||
|
c_name = elt.name
|
||||||
|
family = self.gen_family(c_name)
|
||||||
|
family.variable = []
|
||||||
|
subpath = '{}.{}'.format(path, c_name)
|
||||||
listname = '{}list'.format(name)
|
listname = '{}list'.format(name)
|
||||||
activate_path = '.'.join([subpath, 'activate'])
|
activate_path = '.'.join([subpath, 'activate'])
|
||||||
if elt in self.grouplist_conditions:
|
if elt in self.grouplist_conditions:
|
||||||
|
@ -179,75 +182,54 @@ class ServiceAnnotator:
|
||||||
value,
|
value,
|
||||||
[]).append(activate_path)
|
[]).append(activate_path)
|
||||||
continue
|
continue
|
||||||
if key == 'name':
|
family.variable.append(self._generate_element(elt_name,
|
||||||
true_key = elt_name
|
key,
|
||||||
else:
|
value,
|
||||||
true_key = key
|
elt,
|
||||||
if key in self.objectspace.booleans_attributs:
|
f'{subpath}.{key}'
|
||||||
type_ = 'boolean'
|
))
|
||||||
else:
|
|
||||||
type_ = 'string'
|
|
||||||
dtd_key_type = true_key + '_type'
|
|
||||||
if hasattr(elt, dtd_key_type):
|
|
||||||
type_ = KEY_TYPE[getattr(elt, dtd_key_type)]
|
|
||||||
multi = isinstance(value, list)
|
|
||||||
variables.append(self._generate_element(key,
|
|
||||||
value,
|
|
||||||
type_,
|
|
||||||
subpath,
|
|
||||||
multi,
|
|
||||||
))
|
|
||||||
# FIXME ne devrait pas etre True par défaut
|
# FIXME ne devrait pas etre True par défaut
|
||||||
# devrait etre un calcule
|
# devrait etre un calcule
|
||||||
variables.append(self._generate_element('activate',
|
family.variable.append(self._generate_element(elt_name,
|
||||||
True,
|
'activate',
|
||||||
'boolean',
|
True,
|
||||||
subpath,
|
elt,
|
||||||
))
|
activate_path,
|
||||||
family = self.objectspace.family()
|
))
|
||||||
family.name = '{}{}'.format(name, index)
|
|
||||||
family.variable = variables
|
|
||||||
family.mode = None
|
|
||||||
self.paths.add_family('services',
|
|
||||||
subpath,
|
|
||||||
family,
|
|
||||||
)
|
|
||||||
families.append(family)
|
families.append(family)
|
||||||
return families
|
return families
|
||||||
|
|
||||||
def _generate_element(self,
|
def _generate_element(self,
|
||||||
|
elt_name,
|
||||||
key,
|
key,
|
||||||
value,
|
value,
|
||||||
type_,
|
elt,
|
||||||
subpath,
|
path,
|
||||||
multi=False,
|
|
||||||
):
|
):
|
||||||
variable = self.objectspace.variable()
|
variable = self.objectspace.variable()
|
||||||
variable.name = key
|
variable.name = key
|
||||||
if type_ != 'symlink':
|
|
||||||
variable.doc = key
|
|
||||||
variable.multi = multi
|
|
||||||
variable.mode = None
|
variable.mode = None
|
||||||
variable.hidden = True
|
if key == 'name':
|
||||||
|
true_key = elt_name
|
||||||
|
else:
|
||||||
|
true_key = key
|
||||||
|
dtd_key_type = true_key + '_type'
|
||||||
|
if key == 'activate':
|
||||||
|
type_ = 'boolean'
|
||||||
|
elif hasattr(elt, dtd_key_type):
|
||||||
|
type_ = KEY_TYPE[getattr(elt, dtd_key_type)]
|
||||||
|
elif key in self.objectspace.booleans_attributs:
|
||||||
|
type_ = 'boolean'
|
||||||
|
else:
|
||||||
|
type_ = 'string'
|
||||||
variable.type = type_
|
variable.type = type_
|
||||||
if value is not None:
|
if type_ == 'symlink':
|
||||||
if type_ == 'symlink':
|
variable.opt = value
|
||||||
variable.opt = value
|
else:
|
||||||
else:
|
variable.doc = key
|
||||||
if not multi:
|
val = self.objectspace.value()
|
||||||
val = self.objectspace.value()
|
val.name = value
|
||||||
val.name = value
|
variable.value = [val]
|
||||||
value = [val]
|
|
||||||
else:
|
|
||||||
# value is a list of objects
|
|
||||||
value_list = []
|
|
||||||
for val_iter in value:
|
|
||||||
val = self.objectspace.value()
|
|
||||||
val.name = val_iter.name
|
|
||||||
value_list.append(val)
|
|
||||||
value = value_list
|
|
||||||
variable.value = value
|
|
||||||
path = f'{subpath}.{key}'
|
|
||||||
self.paths.add_variable('services',
|
self.paths.add_variable('services',
|
||||||
path,
|
path,
|
||||||
'service',
|
'service',
|
||||||
|
@ -264,8 +246,8 @@ class ServiceAnnotator:
|
||||||
"""
|
"""
|
||||||
new_elts = {}
|
new_elts = {}
|
||||||
# reorder elts by index
|
# reorder elts by index
|
||||||
for elt in elts:
|
for idx, elt in enumerate(elts):
|
||||||
new_elts.setdefault(elt.index, []).append(elt)
|
new_elts.setdefault(idx, []).append(elt)
|
||||||
idxes = list(new_elts.keys())
|
idxes = list(new_elts.keys())
|
||||||
idxes.sort()
|
idxes.sort()
|
||||||
result_elts = []
|
result_elts = []
|
||||||
|
@ -330,12 +312,15 @@ class SpaceAnnotator(object):
|
||||||
def absolute_path_for_symlink_in_services(self):
|
def absolute_path_for_symlink_in_services(self):
|
||||||
if not hasattr(self.space, 'services'):
|
if not hasattr(self.space, 'services'):
|
||||||
return
|
return
|
||||||
families = vars(self.space.services).values()
|
for family_name, family in vars(self.space.services).items():
|
||||||
for family in families:
|
if not isinstance(family, dict):
|
||||||
if hasattr(family, 'family'):
|
continue
|
||||||
for fam in family.family.values():
|
for fam in family.values():
|
||||||
for fam1 in fam.family:
|
for fam1_name, fam1 in vars(fam).items():
|
||||||
for variable in fam1.variable:
|
if fam1_name == 'name' or fam1_name in ERASED_ATTRIBUTES:
|
||||||
|
continue
|
||||||
|
for fam2 in fam1.family:
|
||||||
|
for variable in fam2.variable:
|
||||||
if variable.type == 'symlink' and '.' not in variable.name:
|
if variable.type == 'symlink' and '.' not in variable.name:
|
||||||
variable.opt = self.paths.get_variable_path(variable.opt,
|
variable.opt = self.paths.get_variable_path(variable.opt,
|
||||||
VARIABLE_NAMESPACE,
|
VARIABLE_NAMESPACE,
|
||||||
|
@ -767,8 +752,8 @@ class SpaceAnnotator(object):
|
||||||
raise CreoleDictConsistencyError(_('Cannot load {}').format(param.text))
|
raise CreoleDictConsistencyError(_('Cannot load {}').format(param.text))
|
||||||
elif param.type == 'python':
|
elif param.type == 'python':
|
||||||
try:
|
try:
|
||||||
|
#values = eval(param.text, {'eosfunc': self.eosfunc, '__builtins__': {'range': range, 'str': str}})
|
||||||
values = eval(param.text, {'eosfunc': self.eosfunc, '__builtins__': {'range': range, 'str': str}})
|
values = eval(param.text, {'eosfunc': self.eosfunc, '__builtins__': {'range': range, 'str': str}})
|
||||||
#FIXME : eval('[str(i) for i in range(3, 13)]', {'eosfunc': eosfunc, '__builtins__': {'range': range, 'str': str}})
|
|
||||||
except NameError:
|
except NameError:
|
||||||
raise CreoleDictConsistencyError(_('The function {} is unknown').format(param.text))
|
raise CreoleDictConsistencyError(_('The function {} is unknown').format(param.text))
|
||||||
if not isinstance(values, list):
|
if not isinstance(values, list):
|
||||||
|
@ -794,12 +779,7 @@ class SpaceAnnotator(object):
|
||||||
for idx, param in enumerate(check.param):
|
for idx, param in enumerate(check.param):
|
||||||
if param.type not in TYPE_PARAM_CHECK:
|
if param.type not in TYPE_PARAM_CHECK:
|
||||||
raise CreoleDictConsistencyError(_('cannot use {} type as a param in check for {}').format(param.type, check.target))
|
raise CreoleDictConsistencyError(_('cannot use {} type as a param in check for {}').format(param.type, check.target))
|
||||||
if param.type == 'eole':
|
|
||||||
param.type = 'variable'
|
|
||||||
if param.type == 'variable':
|
if param.type == 'variable':
|
||||||
# if HIGH_COMPATIBILITY and param.text.startswith('container_ip'):
|
|
||||||
# if param.optional is True:
|
|
||||||
# param_option_indexes.append(idx)
|
|
||||||
try:
|
try:
|
||||||
param.text = self.paths.get_variable_path(param.text, namespace)
|
param.text = self.paths.get_variable_path(param.text, namespace)
|
||||||
except CreoleDictConsistencyError as err:
|
except CreoleDictConsistencyError as err:
|
||||||
|
@ -1093,8 +1073,6 @@ class SpaceAnnotator(object):
|
||||||
if param.type not in TYPE_PARAM_CONDITION:
|
if param.type not in TYPE_PARAM_CONDITION:
|
||||||
raise CreoleDictConsistencyError(_('cannot use {} type as a param '
|
raise CreoleDictConsistencyError(_('cannot use {} type as a param '
|
||||||
'in a condition').format(param.type))
|
'in a condition').format(param.type))
|
||||||
if param.type == 'eole':
|
|
||||||
param.type = 'variable'
|
|
||||||
|
|
||||||
def check_choice_option_condition(self, force_remove_targets):
|
def check_choice_option_condition(self, force_remove_targets):
|
||||||
# remove condition for ChoiceOption that don't have param
|
# remove condition for ChoiceOption that don't have param
|
||||||
|
|
|
@ -43,33 +43,10 @@
|
||||||
<!-- files element -->
|
<!-- files element -->
|
||||||
<!-- ============== -->
|
<!-- ============== -->
|
||||||
|
|
||||||
<!ELEMENT action ((input* | profile* | ewtapp* | tag* | saltaction*)*)>
|
|
||||||
<!ATTLIST action type (form|custom|external|reader|apache) "custom">
|
|
||||||
<!ATTLIST action title CDATA #REQUIRED>
|
|
||||||
<!ATTLIST action description CDATA #REQUIRED>
|
|
||||||
<!ATTLIST action rewrite CDATA #IMPLIED>
|
|
||||||
<!ATTLIST action image CDATA #IMPLIED>
|
|
||||||
<!ATTLIST action actionlist CDATA #IMPLIED>
|
|
||||||
<!-- for apache action -->
|
|
||||||
<!ATTLIST action apache_path CDATA #IMPLIED>
|
|
||||||
<!ATTLIST action apache_path_type (FilenameOption|SymLinkOption|variable) "FilenameOption">
|
|
||||||
<!-- for external action -->
|
|
||||||
<!ATTLIST action url CDATA #IMPLIED>
|
|
||||||
<!ATTLIST action url_type (URLOption|SymLinkOption|variable) "URLOption">
|
|
||||||
<!-- for form action -->
|
|
||||||
<!ATTLIST action save (True|False) "False">
|
|
||||||
|
|
||||||
<!ELEMENT services (service*)>
|
<!ELEMENT services (service*)>
|
||||||
|
|
||||||
<!ELEMENT service ((port* | tcpwrapper* | ip* | interface* | package* | file* | digitalcertificate* | override*)*) >
|
<!ELEMENT service ((port* | tcpwrapper* | ip* | interface* | package* | file* | digitalcertificate* | override*)*) >
|
||||||
<!ATTLIST service name CDATA #REQUIRED>
|
<!ATTLIST service name CDATA #REQUIRED>
|
||||||
<!ATTLIST service method (systemd|none) "systemd">
|
|
||||||
|
|
||||||
<!ELEMENT input (#PCDATA)>
|
|
||||||
<!ELEMENT profile (#PCDATA)>
|
|
||||||
<!ELEMENT ewtapp (#PCDATA)>
|
|
||||||
<!ELEMENT tag (#PCDATA)>
|
|
||||||
<!ELEMENT saltaction (#PCDATA)>
|
|
||||||
|
|
||||||
<!ELEMENT port (#PCDATA)>
|
<!ELEMENT port (#PCDATA)>
|
||||||
<!ATTLIST port port_type (PortOption|SymLinkOption|variable) "PortOption">
|
<!ATTLIST port port_type (PortOption|SymLinkOption|variable) "PortOption">
|
||||||
|
@ -114,7 +91,6 @@
|
||||||
<!ATTLIST family name CDATA #REQUIRED>
|
<!ATTLIST family name CDATA #REQUIRED>
|
||||||
<!ATTLIST family description CDATA #IMPLIED>
|
<!ATTLIST family description CDATA #IMPLIED>
|
||||||
<!ATTLIST family mode (basic|normal|expert) "basic">
|
<!ATTLIST family mode (basic|normal|expert) "basic">
|
||||||
<!ATTLIST family icon CDATA #IMPLIED>
|
|
||||||
<!ATTLIST family hidden (True|False) "False">
|
<!ATTLIST family hidden (True|False) "False">
|
||||||
<!ATTLIST family dynamic CDATA #IMPLIED>
|
<!ATTLIST family dynamic CDATA #IMPLIED>
|
||||||
|
|
||||||
|
@ -140,7 +116,6 @@
|
||||||
|
|
||||||
<!ELEMENT separator (#PCDATA)>
|
<!ELEMENT separator (#PCDATA)>
|
||||||
<!ATTLIST separator name CDATA #REQUIRED>
|
<!ATTLIST separator name CDATA #REQUIRED>
|
||||||
<!ATTLIST separator never_hidden CDATA #IMPLIED>
|
|
||||||
|
|
||||||
<!ELEMENT value (#PCDATA)>
|
<!ELEMENT value (#PCDATA)>
|
||||||
|
|
||||||
|
|
|
@ -34,3 +34,7 @@ class CreoleDictConsistencyError(Exception):
|
||||||
"""It's not only that the Creole XML is valid against the Creole DTD
|
"""It's not only that the Creole XML is valid against the Creole DTD
|
||||||
it's that it is not consistent.
|
it's that it is not consistent.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
class CreoleLoaderError(Exception):
|
||||||
|
pass
|
||||||
|
|
|
@ -1,32 +1,26 @@
|
||||||
"""loader
|
"""loader
|
||||||
flattened XML specific
|
flattened XML specific
|
||||||
"""
|
"""
|
||||||
from os.path import join, isfile, isdir
|
from os.path import join, isfile
|
||||||
from os import listdir
|
from lxml.etree import DTD
|
||||||
#from ast import literal_eval
|
import imp
|
||||||
from lxml.etree import parse, DTD
|
|
||||||
|
|
||||||
from tiramisu import (StrOption, OptionDescription, DynOptionDescription, PortOption,
|
from tiramisu import (StrOption, OptionDescription, DynOptionDescription, PortOption,
|
||||||
IntOption, ChoiceOption, BoolOption, SymLinkOption, IPOption,
|
IntOption, ChoiceOption, BoolOption, SymLinkOption, IPOption,
|
||||||
NetworkOption, NetmaskOption, DomainnameOption, BroadcastOption,
|
NetworkOption, NetmaskOption, DomainnameOption, BroadcastOption,
|
||||||
URLOption, EmailOption, FilenameOption, UsernameOption, DateOption,
|
URLOption, EmailOption, FilenameOption, UsernameOption, DateOption,
|
||||||
PasswordOption, BoolOption, MACOption, Leadership, submulti,
|
PasswordOption, BoolOption, MACOption, Leadership, submulti,
|
||||||
Params, ParamSelfOption, ParamOption, ParamDynOption, ParamValue, Calculation, calc_value,
|
Params, ParamSelfOption, ParamOption, ParamDynOption, ParamValue, Calculation, calc_value)
|
||||||
groups, owners)
|
|
||||||
from tiramisu.error import ConfigError
|
|
||||||
|
|
||||||
from .config import dtdfilename
|
from .config import dtdfilename
|
||||||
from .i18n import _
|
from .i18n import _
|
||||||
#For compatibility
|
|
||||||
from .xmlreflector import HIGH_COMPATIBILITY
|
|
||||||
#from . import eosfunc
|
|
||||||
from .objspace import CreoleObjSpace
|
|
||||||
from .utils import normalize_family
|
from .utils import normalize_family
|
||||||
from .annotator import VARIABLE_NAMESPACE
|
from .annotator import VARIABLE_NAMESPACE
|
||||||
import imp
|
from .error import CreoleLoaderError
|
||||||
|
|
||||||
|
|
||||||
FUNC_TO_DICT = ['valid_not_equal']
|
FUNC_TO_DICT = ['valid_not_equal']
|
||||||
|
KNOWN_TAGS = ['family', 'variable', 'separators', 'leader', 'property']
|
||||||
|
|
||||||
|
|
||||||
class ConvertDynOptionDescription(DynOptionDescription):
|
class ConvertDynOptionDescription(DynOptionDescription):
|
||||||
|
@ -37,19 +31,11 @@ class ConvertDynOptionDescription(DynOptionDescription):
|
||||||
check_name=False)
|
check_name=False)
|
||||||
|
|
||||||
|
|
||||||
class CreoleLoaderError(Exception):
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
def convert_tiramisu_value(value, obj):
|
def convert_tiramisu_value(value, obj):
|
||||||
"""
|
"""
|
||||||
convertit les variables dans le bon type si nécessaire
|
convertit les variables dans le bon type si nécessaire
|
||||||
"""
|
"""
|
||||||
if value is None:
|
|
||||||
return value
|
|
||||||
def _convert_boolean(value):
|
def _convert_boolean(value):
|
||||||
if isinstance(value, bool):
|
|
||||||
return value
|
|
||||||
prop = {'True': True,
|
prop = {'True': True,
|
||||||
'False': False,
|
'False': False,
|
||||||
'None': None}
|
'None': None}
|
||||||
|
@ -57,10 +43,9 @@ def convert_tiramisu_value(value, obj):
|
||||||
raise Exception('unknown value {} while trying to cast {} to boolean'.format(value, obj))
|
raise Exception('unknown value {} while trying to cast {} to boolean'.format(value, obj))
|
||||||
return prop[value]
|
return prop[value]
|
||||||
|
|
||||||
func = {IntOption: int, StrOption: str, PortOption: str,
|
if value is None:
|
||||||
DomainnameOption: str, EmailOption: str, URLOption: str,
|
return value
|
||||||
IPOption: str, NetmaskOption: str, NetworkOption: str,
|
func = {IntOption: int,
|
||||||
BroadcastOption: str, FilenameOption: str,
|
|
||||||
BoolOption: _convert_boolean}.get(obj, None)
|
BoolOption: _convert_boolean}.get(obj, None)
|
||||||
if func is None:
|
if func is None:
|
||||||
return value
|
return value
|
||||||
|
@ -98,18 +83,15 @@ CONVERT_OPTION = {'number': dict(opttype=IntOption),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
class Elt(object):
|
class Elt:
|
||||||
def __init__(self, attrib):
|
def __init__(self, attrib):
|
||||||
self.attrib = attrib
|
self.attrib = attrib
|
||||||
|
|
||||||
|
|
||||||
class PopulateTiramisuObjects(object):
|
class PopulateTiramisuObjects:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.storage = ElementStorage()
|
self.storage = ElementStorage()
|
||||||
self.booleans = []
|
self.booleans = []
|
||||||
self.force_store_values = set()
|
|
||||||
self.separators = {}
|
|
||||||
self.groups = {}
|
|
||||||
|
|
||||||
def parse_dtd(self, dtdfilename):
|
def parse_dtd(self, dtdfilename):
|
||||||
"""Loads the Creole DTD
|
"""Loads the Creole DTD
|
||||||
|
@ -128,129 +110,111 @@ class PopulateTiramisuObjects(object):
|
||||||
if set(attr.itervalues()) == set(['True', 'False']):
|
if set(attr.itervalues()) == set(['True', 'False']):
|
||||||
self.booleans.append(attr.name)
|
self.booleans.append(attr.name)
|
||||||
|
|
||||||
def make_tiramisu_objects(self, xmlroot, eosfunc):
|
def get_root_family(self):
|
||||||
elt = Elt({'name': 'baseoption'})
|
family = Family(Elt({'name': 'baseoption',
|
||||||
if eosfunc is None:
|
'doc': 'baseoption'}),
|
||||||
self.eosfunc = None
|
self.booleans,
|
||||||
else:
|
self.storage,
|
||||||
self.eosfunc = imp.load_source('eosfunc', eosfunc)
|
self.eosfunc,
|
||||||
family = Family(elt, self.booleans, self.storage, self.eosfunc)
|
)
|
||||||
self.storage.add('.', family)
|
self.storage.add('.', family)
|
||||||
|
|
||||||
elts = {}
|
|
||||||
for elt in xmlroot:
|
|
||||||
elts.setdefault(elt.tag, []).append(elt)
|
|
||||||
list_elts = list(elts.keys())
|
|
||||||
if 'family' in list_elts:
|
|
||||||
list_elts.remove('family')
|
|
||||||
list_elts.insert(0, 'family')
|
|
||||||
for elt in list_elts:
|
|
||||||
xmlelts_ = elts[elt]
|
|
||||||
if elt == 'family':
|
|
||||||
xmlelts = []
|
|
||||||
actions = None
|
|
||||||
# VARIABLE_NAMESPACE family has to be loaded before any other family
|
|
||||||
# because `extra` family could use `VARIABLE_NAMESPACE` variables.
|
|
||||||
# `actions` family has to be loaded at the very end
|
|
||||||
# because it may use `VARIABLE_NAMESPACE` or `extra` variables
|
|
||||||
for xml in xmlelts_:
|
|
||||||
if xml.attrib['name'] == VARIABLE_NAMESPACE:
|
|
||||||
xmlelts.insert(0, xml)
|
|
||||||
elif xml.attrib['name'] == 'actions':
|
|
||||||
actions = xml
|
|
||||||
else:
|
|
||||||
xmlelts.append(xml)
|
|
||||||
if actions is not None:
|
|
||||||
xmlelts.append(actions)
|
|
||||||
else:
|
|
||||||
xmlelts = xmlelts_
|
|
||||||
for xmlelt in xmlelts:
|
|
||||||
if xmlelt.tag != 'family':
|
|
||||||
raise CreoleLoaderError(_('unknown tag {}').format(xmlelt.tag))
|
|
||||||
self._iter_family(xmlelt, family)
|
|
||||||
|
|
||||||
def _populate_variable(self, elt, subpath, is_follower, is_leader):
|
|
||||||
variable = Variable(elt, self.booleans, self.storage, is_follower, is_leader, self.eosfunc)
|
|
||||||
path = self._build_path(subpath, elt)
|
|
||||||
properties = variable.attrib.get('properties', [])
|
|
||||||
if 'force_store_value' in properties or "auto_freeze" in properties:
|
|
||||||
self.force_store_values.add(path)
|
|
||||||
self.storage.add(path, variable)
|
|
||||||
return variable
|
|
||||||
|
|
||||||
def _populate_family(self, elt, subpath):
|
|
||||||
if subpath is None:
|
|
||||||
force_icon = False
|
|
||||||
else:
|
|
||||||
force_icon = not subpath.startswith('containers') and not subpath.startswith('actions')
|
|
||||||
family = Family(elt, self.booleans, self.storage, self.eosfunc, force_icon)
|
|
||||||
path = self._build_path(subpath, elt)
|
|
||||||
self.storage.add(path, family)
|
|
||||||
return family
|
return family
|
||||||
|
|
||||||
def _build_path(self, subpath, elt):
|
def reorder_family(self, xmlroot):
|
||||||
if subpath is None:
|
xmlelts = []
|
||||||
subpath = elt.attrib['name']
|
for xmlelt in xmlroot:
|
||||||
else:
|
# VARIABLE_NAMESPACE family has to be loaded before any other family
|
||||||
subpath += '.' + elt.attrib['name']
|
# because `extra` family could use `VARIABLE_NAMESPACE` variables.
|
||||||
return subpath
|
if xmlelt.attrib['name'] == VARIABLE_NAMESPACE:
|
||||||
|
xmlelts.insert(0, xmlelt)
|
||||||
def _iter_leader(self, leader, subpath):
|
|
||||||
subpath = self._build_path(subpath, leader)
|
|
||||||
family = Family(leader, self.booleans, self.storage, self.eosfunc)
|
|
||||||
family.set_leader()
|
|
||||||
self.storage.add(subpath, family)
|
|
||||||
leader_name = None
|
|
||||||
for var in leader:
|
|
||||||
if var.tag == 'property':
|
|
||||||
self._parse_properties(family, var)
|
|
||||||
elif var.tag == 'variable':
|
|
||||||
if leader_name is None:
|
|
||||||
leader_name = var.attrib['name']
|
|
||||||
self.groups[leader_name] = []
|
|
||||||
else:
|
|
||||||
self.groups[leader_name].append(var.attrib['name'])
|
|
||||||
self._iter_family(var, family, subpath=subpath)
|
|
||||||
else:
|
else:
|
||||||
raise CreoleLoaderError(_('unknown tag {}').format(var.tag))
|
xmlelts.append(xmlelt)
|
||||||
return family
|
return xmlelts
|
||||||
|
|
||||||
def _iter_family(self, child, family, subpath=None):
|
def make_tiramisu_objects(self, xmlroot, eosfunc):
|
||||||
if child.tag not in ['family', 'variable', 'separators', 'leader', 'property']:
|
self.eosfunc = imp.load_source('eosfunc', eosfunc)
|
||||||
|
|
||||||
|
family = self.get_root_family()
|
||||||
|
for xmlelt in self.reorder_family(xmlroot):
|
||||||
|
self.iter_family(xmlelt,
|
||||||
|
family,
|
||||||
|
None,
|
||||||
|
)
|
||||||
|
|
||||||
|
def iter_family(self,
|
||||||
|
child,
|
||||||
|
family,
|
||||||
|
subpath,
|
||||||
|
):
|
||||||
|
if child.tag not in KNOWN_TAGS:
|
||||||
raise CreoleLoaderError(_('unknown tag {}').format(child.tag))
|
raise CreoleLoaderError(_('unknown tag {}').format(child.tag))
|
||||||
if child.tag == 'family':
|
if child.tag in ['family', 'leader']:
|
||||||
old_family = family
|
self.populate_family(family,
|
||||||
family = self._populate_family(child, subpath)
|
child,
|
||||||
if old_family is not None:
|
subpath,
|
||||||
old_family.add(family)
|
)
|
||||||
if len(child) != 0:
|
|
||||||
subpath = self._build_path(subpath, child)
|
|
||||||
for c in child:
|
|
||||||
self._iter_family(c, family, subpath=subpath)
|
|
||||||
elif child.tag == 'leader':
|
|
||||||
leader = self._iter_leader(child, subpath)
|
|
||||||
family.add(leader)
|
|
||||||
elif child.tag == 'separators':
|
elif child.tag == 'separators':
|
||||||
self._parse_separators(child)
|
self.parse_separators(child)
|
||||||
elif child.tag == 'variable':
|
elif child.tag == 'variable':
|
||||||
if family is None:
|
self.populate_variable(child, subpath, family)
|
||||||
raise CreoleLoaderError(_('variable without family'))
|
|
||||||
|
|
||||||
is_follower = False
|
|
||||||
is_leader = False
|
|
||||||
if family.is_leader:
|
|
||||||
if child.attrib['name'] != family.attrib['name']:
|
|
||||||
is_follower = True
|
|
||||||
else:
|
|
||||||
is_leader = True
|
|
||||||
variable = self._populate_variable(child, subpath, is_follower, is_leader)
|
|
||||||
family.add(variable)
|
|
||||||
elif child.tag == 'property':
|
elif child.tag == 'property':
|
||||||
self._parse_properties(family, child)
|
self.parse_properties(family, child)
|
||||||
else:
|
else:
|
||||||
raise Exception('unknown tag {}'.format(child.tag))
|
raise Exception('unknown tag {}'.format(child.tag))
|
||||||
|
|
||||||
def _parse_properties(self, family, child):
|
def populate_family(self,
|
||||||
|
parent_family,
|
||||||
|
elt,
|
||||||
|
subpath,
|
||||||
|
):
|
||||||
|
path = self.build_path(subpath,
|
||||||
|
elt,
|
||||||
|
)
|
||||||
|
family = Family(elt,
|
||||||
|
self.booleans,
|
||||||
|
self.storage,
|
||||||
|
self.eosfunc,
|
||||||
|
)
|
||||||
|
self.storage.add(path, family)
|
||||||
|
if elt.tag == 'leader':
|
||||||
|
family.set_leader()
|
||||||
|
parent_family.add(family)
|
||||||
|
if len(elt) != 0:
|
||||||
|
for child in elt:
|
||||||
|
self.iter_family(child,
|
||||||
|
family,
|
||||||
|
path,
|
||||||
|
)
|
||||||
|
|
||||||
|
def parse_separators(self,
|
||||||
|
separators,
|
||||||
|
):
|
||||||
|
for separator in separators:
|
||||||
|
elt = self.storage.get(separator.attrib['name'])
|
||||||
|
elt.add_information('separator', separator.text)
|
||||||
|
|
||||||
|
def populate_variable(self, elt, subpath, family):
|
||||||
|
is_follower = False
|
||||||
|
is_leader = False
|
||||||
|
if family.is_leader:
|
||||||
|
if elt.attrib['name'] != family.attrib['name']:
|
||||||
|
is_follower = True
|
||||||
|
else:
|
||||||
|
is_leader = True
|
||||||
|
path = self.build_path(subpath,
|
||||||
|
elt,
|
||||||
|
)
|
||||||
|
variable = Variable(elt,
|
||||||
|
self.booleans,
|
||||||
|
self.storage,
|
||||||
|
is_follower,
|
||||||
|
is_leader,
|
||||||
|
self.eosfunc,
|
||||||
|
)
|
||||||
|
self.storage.add(path, variable)
|
||||||
|
family.add(variable)
|
||||||
|
|
||||||
|
def parse_properties(self, family, child):
|
||||||
if child.get('type') == 'calculation':
|
if child.get('type') == 'calculation':
|
||||||
kwargs = {'condition': child.attrib['source'],
|
kwargs = {'condition': child.attrib['source'],
|
||||||
'expected': ParamValue(child.attrib.get('expected'))}
|
'expected': ParamValue(child.attrib.get('expected'))}
|
||||||
|
@ -260,17 +224,13 @@ class PopulateTiramisuObjects(object):
|
||||||
else:
|
else:
|
||||||
family.attrib['properties'].append(child.text)
|
family.attrib['properties'].append(child.text)
|
||||||
|
|
||||||
def _parse_separators(self, separators):
|
def build_path(self,
|
||||||
for separator in separators:
|
subpath,
|
||||||
elt = self.storage.get(separator.attrib['name'])
|
elt,
|
||||||
never_hidden = separator.attrib.get('never_hidden')
|
):
|
||||||
if never_hidden == 'True':
|
if subpath is None:
|
||||||
never_hidden = True
|
return elt.attrib['name']
|
||||||
else:
|
return subpath + '.' + elt.attrib['name']
|
||||||
never_hidden = None
|
|
||||||
info = (separator.text, never_hidden)
|
|
||||||
self.separators[separator.attrib['name']] = info
|
|
||||||
elt.add_information('separator', info)
|
|
||||||
|
|
||||||
|
|
||||||
class ElementStorage:
|
class ElementStorage:
|
||||||
|
@ -282,10 +242,6 @@ class ElementStorage:
|
||||||
raise CreoleLoaderError(_('path already loaded {}').format(path))
|
raise CreoleLoaderError(_('path already loaded {}').format(path))
|
||||||
self.paths[path] = elt
|
self.paths[path] = elt
|
||||||
|
|
||||||
def add_information(self, path, name, information):
|
|
||||||
elt = self.get(path)
|
|
||||||
elt.add_information(name, information)
|
|
||||||
|
|
||||||
def get(self, path):
|
def get(self, path):
|
||||||
if path not in self.paths:
|
if path not in self.paths:
|
||||||
raise CreoleLoaderError(_('there is no element for path {}').format(path))
|
raise CreoleLoaderError(_('there is no element for path {}').format(path))
|
||||||
|
@ -313,115 +269,124 @@ class Variable(Common):
|
||||||
self.option = None
|
self.option = None
|
||||||
self.informations = {}
|
self.informations = {}
|
||||||
self.attrib = {}
|
self.attrib = {}
|
||||||
self.attrib['properties'] = []
|
if elt.attrib['type'] != 'symlink':
|
||||||
|
self.attrib['properties'] = []
|
||||||
self.attrib['validators'] = []
|
self.attrib['validators'] = []
|
||||||
self.eosfunc = eosfunc
|
self.eosfunc = eosfunc
|
||||||
self.storage = storage
|
self.storage = storage
|
||||||
is_submulti = False
|
self.booleans = booleans
|
||||||
|
self.populate_attrib(elt)
|
||||||
|
self.is_follower = is_follower
|
||||||
|
self.is_leader = is_leader
|
||||||
|
convert_option = CONVERT_OPTION[elt.attrib['type']]
|
||||||
|
self.object_type = convert_option['opttype']
|
||||||
|
self.populate_choice(elt)
|
||||||
|
for child in elt:
|
||||||
|
self.populate_property(child)
|
||||||
|
self.populate_value(child)
|
||||||
|
self.populate_check(child)
|
||||||
|
if 'initkwargs' in convert_option:
|
||||||
|
self.attrib.update(convert_option['initkwargs'])
|
||||||
|
if elt.attrib['type'] == 'symlink':
|
||||||
|
self.attrib['opt'] = storage.get(self.attrib['opt'])
|
||||||
|
|
||||||
|
def populate_attrib(self,
|
||||||
|
elt,
|
||||||
|
):
|
||||||
for key, value in elt.attrib.items():
|
for key, value in elt.attrib.items():
|
||||||
if key in booleans:
|
if key == 'multi' and elt.attrib['type'] == 'symlink':
|
||||||
|
continue
|
||||||
|
if key == 'multi' and value == 'submulti':
|
||||||
|
value = submulti
|
||||||
|
elif key in self.booleans:
|
||||||
if value == 'True':
|
if value == 'True':
|
||||||
value = True
|
value = True
|
||||||
elif value == 'False':
|
elif value == 'False':
|
||||||
value = False
|
value = False
|
||||||
elif key == 'multi' and value == 'submulti':
|
|
||||||
is_submulti = True
|
|
||||||
value = submulti
|
|
||||||
else:
|
else:
|
||||||
raise CreoleLoaderError(_('unknown value {} for {}').format(value, key))
|
raise CreoleLoaderError(_('unknown value {} for {}').format(value, key))
|
||||||
if key in ['help', 'test']:
|
if key in ['help', 'test']:
|
||||||
self.add_information(key, value)
|
self.add_information(key, value)
|
||||||
elif key == 'type':
|
elif key != 'type':
|
||||||
pass
|
|
||||||
else:
|
|
||||||
self.attrib[key] = value
|
self.attrib[key] = value
|
||||||
convert_option = CONVERT_OPTION[elt.attrib['type']]
|
|
||||||
self.object_type = convert_option['opttype']
|
def populate_choice(self,
|
||||||
|
elt,
|
||||||
|
):
|
||||||
if elt.attrib['type'] == 'choice':
|
if elt.attrib['type'] == 'choice':
|
||||||
if self.attrib.get('choice'):
|
values = []
|
||||||
self.attrib['values'] = getattr(self.eosfunc, self.attrib.get('choice'))
|
for child in elt:
|
||||||
|
if child.tag == 'choice':
|
||||||
|
value = child.text
|
||||||
|
if child.attrib['type'] == 'number':
|
||||||
|
value = int(value)
|
||||||
|
values.append(value)
|
||||||
|
self.attrib['values'] = tuple(values)
|
||||||
|
|
||||||
|
def populate_property(self, child):
|
||||||
|
if child.tag == 'property':
|
||||||
|
if child.get('type') == 'calculation':
|
||||||
|
kwargs = {'condition': child.attrib['source'],
|
||||||
|
'expected': ParamValue(child.attrib.get('expected'))}
|
||||||
|
if child.attrib['inverse'] == 'True':
|
||||||
|
kwargs['reverse_condition'] = ParamValue(True)
|
||||||
|
self.attrib['properties'].append((ParamValue(child.text), kwargs))
|
||||||
else:
|
else:
|
||||||
self.attrib['values'] = []
|
self.attrib['properties'].append(child.text)
|
||||||
for child in elt:
|
|
||||||
if child.tag == 'choice':
|
def populate_value(self, child):
|
||||||
value = child.text
|
if child.tag == 'value':
|
||||||
if 'type' in child.attrib and child.attrib['type'] == 'number':
|
if child.attrib.get('type') == 'calculation':
|
||||||
value = int(value)
|
if child.text is not None and child.text.strip():
|
||||||
if value is None:
|
self.attrib['default'] = (child.text.strip(),)
|
||||||
value = u''
|
|
||||||
self.attrib['values'].append(value)
|
|
||||||
self.attrib['values'] = tuple(self.attrib['values'])
|
|
||||||
for child in elt:
|
|
||||||
if child.tag == 'property':
|
|
||||||
if child.get('type') == 'calculation':
|
|
||||||
kwargs = {'condition': child.attrib['source'],
|
|
||||||
'expected': ParamValue(child.attrib.get('expected'))}
|
|
||||||
if child.attrib['inverse'] == 'True':
|
|
||||||
kwargs['reverse_condition'] = ParamValue(True)
|
|
||||||
self.attrib['properties'].append((ParamValue(child.text), kwargs))
|
|
||||||
else:
|
else:
|
||||||
self.attrib['properties'].append(child.text)
|
params = []
|
||||||
elif child.tag == 'value':
|
for param in child:
|
||||||
if child.attrib.get('type') == 'calculation':
|
params.append(self.parse_param(param))
|
||||||
if child.text is not None and child.text.strip():
|
self.attrib['default'] = (child.attrib['name'], params, False)
|
||||||
self.attrib['default'] = (child.text.strip(),)
|
else:
|
||||||
else:
|
if "type" in child.attrib:
|
||||||
params = []
|
type_ = CONVERT_OPTION[child.attrib['type']]['opttype']
|
||||||
for param in child:
|
|
||||||
params.append(self.parse_param(param))
|
|
||||||
self.attrib['default'] = (child.attrib['name'], params, False)
|
|
||||||
else:
|
else:
|
||||||
if "type" in child.attrib:
|
type_ = self.object_type
|
||||||
type_ = CONVERT_OPTION[child.attrib['type']]['opttype']
|
if self.attrib['multi'] is True and not self.is_follower:
|
||||||
else:
|
if 'default' not in self.attrib:
|
||||||
type_ = self.object_type
|
self.attrib['default'] = []
|
||||||
if self.attrib['multi'] is True and not is_follower:
|
value = convert_tiramisu_value(child.text, type_)
|
||||||
if 'default' not in self.attrib:
|
self.attrib['default'].append(value)
|
||||||
self.attrib['default'] = []
|
if 'default_multi' not in self.attrib and not self.is_leader:
|
||||||
value = convert_tiramisu_value(child.text, type_)
|
self.attrib['default_multi'] = value
|
||||||
self.attrib['default'].append(value)
|
elif self.attrib['multi'] == submulti:
|
||||||
if 'default_multi' not in self.attrib and not is_leader:
|
if 'default' not in self.attrib:
|
||||||
self.attrib['default_multi'] = value
|
self.attrib['default'] = []
|
||||||
elif self.attrib['multi'] == submulti:
|
value = convert_tiramisu_value(child.text, type_)
|
||||||
if 'default' not in self.attrib:
|
if not self.is_follower:
|
||||||
self.attrib['default'] = []
|
if not isinstance(value, list):
|
||||||
value = convert_tiramisu_value(child.text, type_)
|
dvalue = [value]
|
||||||
if not is_follower:
|
|
||||||
if not isinstance(value, list):
|
|
||||||
dvalue = [value]
|
|
||||||
else:
|
|
||||||
dvalue = value
|
|
||||||
self.attrib['default'].append(dvalue)
|
|
||||||
if value and 'default_multi' not in self.attrib and not is_leader:
|
|
||||||
self.attrib['default_multi'] = []
|
|
||||||
if not is_leader:
|
|
||||||
self.attrib['default_multi'].append(value)
|
|
||||||
else:
|
|
||||||
if 'default' in self.attrib:
|
|
||||||
raise CreoleLoaderError(_('default value already set for {}'
|
|
||||||
'').format(self.attrib['path']))
|
|
||||||
value = convert_tiramisu_value(child.text, type_)
|
|
||||||
if is_follower:
|
|
||||||
self.attrib['default_multi'] = value
|
|
||||||
else:
|
else:
|
||||||
self.attrib['default'] = value
|
dvalue = value
|
||||||
elif child.tag == 'choice':
|
self.attrib['default'].append(dvalue)
|
||||||
# already load
|
if value and 'default_multi' not in self.attrib and not self.is_leader:
|
||||||
pass
|
self.attrib['default_multi'] = []
|
||||||
elif child.tag == 'check':
|
if not self.is_leader:
|
||||||
params = []
|
self.attrib['default_multi'].append(value)
|
||||||
for param in child:
|
else:
|
||||||
params.append(self.parse_param(param))
|
if 'default' in self.attrib:
|
||||||
#check.params = params
|
raise CreoleLoaderError(_('default value already set for {}'
|
||||||
self.attrib['validators'].append((child.attrib['name'], params, child.attrib['warnings_only']))
|
'').format(self.attrib['path']))
|
||||||
else:
|
value = convert_tiramisu_value(child.text, type_)
|
||||||
raise Exception('unknown tag {}'.format(child.tag))
|
if self.is_follower:
|
||||||
if 'initkwargs' in convert_option:
|
self.attrib['default_multi'] = value
|
||||||
self.attrib.update(convert_option['initkwargs'])
|
else:
|
||||||
if elt.attrib['type'] == 'symlink':
|
self.attrib['default'] = value
|
||||||
del self.attrib['properties']
|
|
||||||
del self.attrib['multi']
|
def populate_check(self, child):
|
||||||
self.attrib['opt'] = storage.get(self.attrib['opt'])
|
if child.tag == 'check':
|
||||||
|
params = []
|
||||||
|
for param in child:
|
||||||
|
params.append(self.parse_param(param))
|
||||||
|
#check.params = params
|
||||||
|
self.attrib['validators'].append((child.attrib['name'], params, child.attrib['warnings_only']))
|
||||||
|
|
||||||
def parse_param(self, param):
|
def parse_param(self, param):
|
||||||
name = param.attrib.get('name', '')
|
name = param.attrib.get('name', '')
|
||||||
|
@ -515,7 +480,7 @@ class Variable(Common):
|
||||||
import traceback
|
import traceback
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
name = self.attrib['name']
|
name = self.attrib['name']
|
||||||
raise CreoleLoaderError(_('cannot create option {}: {}').format(name, err))
|
raise CreoleLoaderError(_('cannot create option "{}": {}').format(name, err))
|
||||||
for key, value in self.informations.items():
|
for key, value in self.informations.items():
|
||||||
option.impl_set_information(key, value)
|
option.impl_set_information(key, value)
|
||||||
self.option = option
|
self.option = option
|
||||||
|
@ -523,42 +488,25 @@ class Variable(Common):
|
||||||
|
|
||||||
|
|
||||||
class Family(Common):
|
class Family(Common):
|
||||||
def __init__(self, elt, booleans, storage, eosfunc, force_icon=False):
|
def __init__(self,
|
||||||
|
elt,
|
||||||
|
booleans,
|
||||||
|
storage,
|
||||||
|
eosfunc,
|
||||||
|
):
|
||||||
self.option = None
|
self.option = None
|
||||||
self.attrib = {}
|
self.attrib = {}
|
||||||
self.is_leader = False
|
self.is_leader = False
|
||||||
if force_icon:
|
self.informations = {}
|
||||||
self.informations = {'icon': None}
|
|
||||||
else:
|
|
||||||
self.informations = {}
|
|
||||||
self.children = []
|
self.children = []
|
||||||
self.storage = storage
|
self.storage = storage
|
||||||
self.eosfunc = eosfunc
|
self.eosfunc = eosfunc
|
||||||
self.attrib['properties'] = []
|
self.attrib['properties'] = []
|
||||||
for key, value in elt.attrib.items():
|
for key, value in elt.attrib.items():
|
||||||
if key in booleans:
|
if key == 'help':
|
||||||
if value == 'True':
|
|
||||||
value = True
|
|
||||||
elif value == 'False':
|
|
||||||
value = False
|
|
||||||
else:
|
|
||||||
raise CreoleLoaderError(_('unknown value {} for {}').format(value, key))
|
|
||||||
if key == 'icon':
|
|
||||||
self.add_information('icon', value)
|
|
||||||
continue
|
|
||||||
elif key == 'hidden':
|
|
||||||
if value:
|
|
||||||
self.attrib['properties'].append(key)
|
|
||||||
elif key == 'mode':
|
|
||||||
self.attrib['properties'].append(value)
|
|
||||||
elif key == 'help':
|
|
||||||
self.add_information(key, value)
|
self.add_information(key, value)
|
||||||
elif key == 'type':
|
|
||||||
pass
|
|
||||||
else:
|
else:
|
||||||
self.attrib[key] = value
|
self.attrib[key] = value
|
||||||
if 'doc' not in self.attrib:
|
|
||||||
self.attrib['doc'] = u''
|
|
||||||
|
|
||||||
def add(self, child):
|
def add(self, child):
|
||||||
self.children.append(child)
|
self.children.append(child)
|
||||||
|
@ -589,13 +537,11 @@ class Family(Common):
|
||||||
else:
|
else:
|
||||||
option = Leadership(**self.attrib)
|
option = Leadership(**self.attrib)
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
raise CreoleLoaderError(_('cannot create optiondescription {}: {}').format(self.attrib['name'], err))
|
print(self.attrib)
|
||||||
|
raise CreoleLoaderError(_('cannot create optiondescription "{}": {}').format(self.attrib['name'], err))
|
||||||
for key, value in self.informations.items():
|
for key, value in self.informations.items():
|
||||||
option.impl_set_information(key, value)
|
option.impl_set_information(key, value)
|
||||||
self.option = option
|
self.option = option
|
||||||
#if self.is_leader:
|
|
||||||
# self.option.impl_set_group_type(groups.leader)
|
|
||||||
|
|
||||||
return self.option
|
return self.option
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -36,7 +36,7 @@ from .path import Path
|
||||||
# CreoleObjSpace's elements like 'family' or 'follower', that shall be forced to the Redefinable type
|
# CreoleObjSpace's elements like 'family' or 'follower', that shall be forced to the Redefinable type
|
||||||
FORCE_REDEFINABLES = ('family', 'follower', 'service', 'disknod', 'variables')
|
FORCE_REDEFINABLES = ('family', 'follower', 'service', 'disknod', 'variables')
|
||||||
# CreoleObjSpace's elements that shall be forced to the UnRedefinable type
|
# CreoleObjSpace's elements that shall be forced to the UnRedefinable type
|
||||||
FORCE_UNREDEFINABLES = ('value', 'input', 'profile', 'ewtapp', 'tag', 'saltaction')
|
FORCE_UNREDEFINABLES = ('value',)
|
||||||
# CreoleObjSpace's elements that shall be set to the UnRedefinable type
|
# CreoleObjSpace's elements that shall be set to the UnRedefinable type
|
||||||
UNREDEFINABLE = ('submulti', 'multi', 'type')
|
UNREDEFINABLE = ('submulti', 'multi', 'type')
|
||||||
|
|
||||||
|
@ -47,9 +47,18 @@ CONVERT_PROPERTIES = {'auto_save': ['force_store_value'], 'auto_freeze': ['force
|
||||||
RENAME_ATTIBUTES = {'description': 'doc'}
|
RENAME_ATTIBUTES = {'description': 'doc'}
|
||||||
|
|
||||||
INCOMPATIBLE_ATTRIBUTES = [['multi', 'submulti']]
|
INCOMPATIBLE_ATTRIBUTES = [['multi', 'submulti']]
|
||||||
FORCED_TEXT_ELTS_AS_NAME = ('choice', 'property')
|
FORCED_TEXT_ELTS_AS_NAME = ('choice', 'property', 'value', 'target')
|
||||||
|
|
||||||
#TYPE_TARGET_CONDITION = ('variable', 'family')
|
CONVERT_EXPORT = {'Leadership': 'leader',
|
||||||
|
'Separators': 'separators',
|
||||||
|
'Variable': 'variable',
|
||||||
|
'Value': 'value',
|
||||||
|
'Property': 'property',
|
||||||
|
'Choice': 'choice',
|
||||||
|
'Param': 'param',
|
||||||
|
'Separator': 'separator',
|
||||||
|
'Check': 'check',
|
||||||
|
}
|
||||||
|
|
||||||
# _____________________________________________________________________________
|
# _____________________________________________________________________________
|
||||||
# special types definitions for the Object Space's internal representation
|
# special types definitions for the Object Space's internal representation
|
||||||
|
@ -474,7 +483,7 @@ class CreoleObjSpace:
|
||||||
variableobj.redefine = child.attrib['target'] in self.redefine_variables
|
variableobj.redefine = child.attrib['target'] in self.redefine_variables
|
||||||
if not hasattr(variableobj, 'index'):
|
if not hasattr(variableobj, 'index'):
|
||||||
variableobj.index = self.index
|
variableobj.index = self.index
|
||||||
if child.tag in ['fill', 'condition', 'check', 'action']:
|
if child.tag in ['fill', 'condition', 'check']:
|
||||||
variableobj.namespace = namespace
|
variableobj.namespace = namespace
|
||||||
|
|
||||||
def fill_variableobj_path_attribute(self,
|
def fill_variableobj_path_attribute(self,
|
||||||
|
@ -537,60 +546,47 @@ class CreoleObjSpace:
|
||||||
space = list(space.values())
|
space = list(space.values())
|
||||||
if isinstance(space, list):
|
if isinstance(space, list):
|
||||||
for subspace in space:
|
for subspace in space:
|
||||||
if isinstance(subspace, self.Leadership):
|
if name == 'value' and (not hasattr(subspace, 'name') or subspace.name is None):
|
||||||
_name = 'leader'
|
raise Exception('pfff')
|
||||||
else:
|
|
||||||
_name = name
|
|
||||||
if name in ['services', 'variables', 'actions']:
|
|
||||||
_name = 'family'
|
|
||||||
if HIGH_COMPATIBILITY and not hasattr(subspace, 'doc'):
|
|
||||||
subspace.doc = ''
|
|
||||||
if _name == 'value' and (not hasattr(subspace, 'name') or subspace.name is None):
|
|
||||||
continue
|
continue
|
||||||
|
_name = CONVERT_EXPORT.get(subspace.__class__.__name__, 'family')
|
||||||
child_node = SubElement(node, _name)
|
child_node = SubElement(node, _name)
|
||||||
self._xml_export(child_node, subspace, _name)
|
self._xml_export(child_node, subspace, _name)
|
||||||
elif isinstance(space, self.Atom):
|
elif isinstance(space, (self.Atom, (self.Redefinable, self.UnRedefinable))):
|
||||||
if name == 'services':
|
_name = CONVERT_EXPORT.get(space.__class__.__name__, 'family')
|
||||||
child_node = SubElement(node, 'family')
|
child_node = SubElement(node, _name)
|
||||||
|
if _name != name:
|
||||||
child_node.attrib['name'] = name
|
child_node.attrib['name'] = name
|
||||||
|
if 'doc' not in child_node.attrib.keys():
|
||||||
|
child_node.attrib['doc'] = name
|
||||||
|
for subname in self.get_attributes(space):
|
||||||
|
subspace = getattr(space, subname)
|
||||||
|
self._sub_xml_export(subname, child_node, name, subspace, space)
|
||||||
|
elif name not in ERASED_ATTRIBUTES:
|
||||||
|
# # FIXME plutot dans annotator ...
|
||||||
|
if node.tag in ['variable', 'family', 'leader']:
|
||||||
|
if name in PROPERTIES:
|
||||||
|
if space is True:
|
||||||
|
for prop in CONVERT_PROPERTIES.get(name, [name]):
|
||||||
|
SubElement(node, 'property').text = prop
|
||||||
|
return
|
||||||
|
if name == 'mode' and space:
|
||||||
|
SubElement(node, 'property').text = space
|
||||||
|
return
|
||||||
|
# Not param for calculation ...
|
||||||
|
if name == 'name' and node_name in FORCED_TEXT_ELTS_AS_NAME and not hasattr(current_space, 'param'):
|
||||||
|
node.text = str(space)
|
||||||
|
elif name == 'text' and node_name in self.forced_text_elts:
|
||||||
|
node.text = space
|
||||||
|
elif node.tag == 'family' and name == 'name':
|
||||||
|
if 'doc' not in node.attrib.keys():
|
||||||
|
node.attrib['doc'] = space
|
||||||
|
node.attrib['name'] = normalize_family(space, check_name=False)
|
||||||
else:
|
else:
|
||||||
child_node = SubElement(node, name)
|
if name in RENAME_ATTIBUTES:
|
||||||
for subname in self.get_attributes(space):
|
name = RENAME_ATTIBUTES[name]
|
||||||
subspace = getattr(space, subname)
|
if space is not None:
|
||||||
self._sub_xml_export(subname, child_node, name, subspace, space)
|
node.attrib[name] = str(space)
|
||||||
elif isinstance(space, self.Redefinable):
|
|
||||||
child_node = SubElement(node, 'family')
|
|
||||||
child_node.attrib['name'] = name
|
|
||||||
for subname in self.get_attributes(space):
|
|
||||||
subspace = getattr(space, subname)
|
|
||||||
self._sub_xml_export(subname, child_node, name, subspace, space)
|
|
||||||
else:
|
|
||||||
# FIXME plutot dans annotator ...
|
|
||||||
if name in PROPERTIES and node.tag in ['variable', 'family', 'leader']:
|
|
||||||
if space is True:
|
|
||||||
for prop in CONVERT_PROPERTIES.get(name, [name]):
|
|
||||||
SubElement(node, 'property').text = prop
|
|
||||||
|
|
||||||
elif name not in ERASED_ATTRIBUTES:
|
|
||||||
if name == 'name' and node_name in self.forced_text_elts_as_name and not hasattr(current_space, 'param'):
|
|
||||||
if isinstance(space, str):
|
|
||||||
node.text = space
|
|
||||||
else:
|
|
||||||
node.text = str(space)
|
|
||||||
elif name == 'text' and node_name in self.forced_text_elts:
|
|
||||||
node.text = space
|
|
||||||
elif node.tag == 'family' and name == 'name':
|
|
||||||
if 'doc' not in node.attrib.keys():
|
|
||||||
node.attrib['doc'] = space
|
|
||||||
node.attrib['name'] = normalize_family(space, check_name=False)
|
|
||||||
elif node.tag in ['variable', 'family', 'leader'] and name == 'mode':
|
|
||||||
if space is not None:
|
|
||||||
SubElement(node, 'property').text = space
|
|
||||||
else:
|
|
||||||
if name in RENAME_ATTIBUTES:
|
|
||||||
name = RENAME_ATTIBUTES[name]
|
|
||||||
if space is not None:
|
|
||||||
node.attrib[name] = str(space)
|
|
||||||
|
|
||||||
def _xml_export(self,
|
def _xml_export(self,
|
||||||
node,
|
node,
|
||||||
|
@ -599,4 +595,9 @@ class CreoleObjSpace:
|
||||||
):
|
):
|
||||||
for name in self.get_attributes(space):
|
for name in self.get_attributes(space):
|
||||||
subspace = getattr(space, name)
|
subspace = getattr(space, name)
|
||||||
self._sub_xml_export(name, node, node_name, subspace, space)
|
self._sub_xml_export(name,
|
||||||
|
node,
|
||||||
|
node_name,
|
||||||
|
subspace,
|
||||||
|
space,
|
||||||
|
)
|
||||||
|
|
|
@ -115,15 +115,6 @@ class Path:
|
||||||
) -> str: # pylint: disable=C0111
|
) -> str: # pylint: disable=C0111
|
||||||
return self._get_variable(name)['family']
|
return self._get_variable(name)['family']
|
||||||
|
|
||||||
def get_variable_family_path(self,
|
|
||||||
name: str,
|
|
||||||
) -> str: # pylint: disable=C0111
|
|
||||||
dico = self._get_variable(name)
|
|
||||||
list_path = [dico['namespace'], dico['family']]
|
|
||||||
if dico['leader'] is not None:
|
|
||||||
list_path.append(dico['leader'])
|
|
||||||
return '.'.join(list_path)
|
|
||||||
|
|
||||||
def get_variable_namespace(self,
|
def get_variable_namespace(self,
|
||||||
name: str,
|
name: str,
|
||||||
) -> str: # pylint: disable=C0111
|
) -> str: # pylint: disable=C0111
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family name="services">
|
<family name="services" doc="services">
|
||||||
<family name="service0" doc="tata"/>
|
<property>hidden</property>
|
||||||
|
<family doc="tata" name="tata"/>
|
||||||
</family>
|
</family>
|
||||||
</rougail>
|
</rougail>
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
|
|
||||||
<services/>
|
|
||||||
|
|
||||||
<variables>
|
<variables>
|
||||||
<family name="général">
|
<family name="général">
|
||||||
<variable name="mode_conteneur_actif" type="oui/non" description="No change" auto_freeze="True">
|
<variable name="mode_conteneur_actif" type="oui/non" description="No change" auto_freeze="True">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="général" name="general">
|
<family doc="général" name="general">
|
||||||
<property>basic</property>
|
<property>basic</property>
|
||||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="général" name="general">
|
<family doc="général" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="général" name="general">
|
<family doc="général" name="general">
|
||||||
<property>basic</property>
|
<property>basic</property>
|
||||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="général" name="general">
|
<family doc="général" name="general">
|
||||||
<property>expert</property>
|
<property>expert</property>
|
||||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="général" name="general">
|
<family doc="général" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="général" name="general">
|
<family doc="général" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="général" name="general">
|
<family doc="général" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="général" name="general">
|
<family doc="général" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="Redefine description" multi="True" name="mode_conteneur_actif" type="choice">
|
<variable doc="Redefine description" multi="True" name="mode_conteneur_actif" type="choice">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="Redefine description" multi="submulti" name="mode_conteneur_actif" type="choice">
|
<variable doc="Redefine description" multi="submulti" name="mode_conteneur_actif" type="choice">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>basic</property>
|
<property>basic</property>
|
||||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>basic</property>
|
<property>basic</property>
|
||||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="Général" name="general">
|
<family doc="Général" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="domain">
|
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="domain">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="number">
|
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="number">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
</variable>
|
</variable>
|
||||||
</family>
|
</family>
|
||||||
<separators>
|
<separators>
|
||||||
<separator name="mode_conteneur_actif" never_hidden="True">Établissement</separator>
|
<separator name="mode_conteneur_actif">Établissement</separator>
|
||||||
</separators>
|
</separators>
|
||||||
</variables>
|
</variables>
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||||
|
@ -15,7 +15,7 @@
|
||||||
</variable>
|
</variable>
|
||||||
</family>
|
</family>
|
||||||
<separators>
|
<separators>
|
||||||
<separator name="rougail.general.mode_conteneur_actif" never_hidden="True">Établissement</separator>
|
<separator name="rougail.general.mode_conteneur_actif">Établissement</separator>
|
||||||
</separators>
|
</separators>
|
||||||
</family>
|
</family>
|
||||||
</rougail>
|
</rougail>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="général" name="general">
|
<family doc="général" name="general">
|
||||||
<property>basic</property>
|
<property>basic</property>
|
||||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="général" name="general">
|
<family doc="général" name="general">
|
||||||
<property>basic</property>
|
<property>basic</property>
|
||||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="string">
|
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="string">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="string">
|
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="string">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="string">
|
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="string">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>basic</property>
|
<property>basic</property>
|
||||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>expert</property>
|
<property>expert</property>
|
||||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="Général" name="general">
|
<family doc="Général" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>basic</property>
|
<property>basic</property>
|
||||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="général" name="general">
|
<family doc="général" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="No change" multi="False" name="condition" type="choice">
|
<variable doc="No change" multi="False" name="condition" type="choice">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="No change" multi="False" name="condition" type="string">
|
<variable doc="No change" multi="False" name="condition" type="string">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="Général" name="general">
|
<family doc="Général" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="No change" multi="False" name="condition" type="choice">
|
<variable doc="No change" multi="False" name="condition" type="choice">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="No change" multi="False" name="condition" type="choice">
|
<variable doc="No change" multi="False" name="condition" type="choice">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="No change" multi="False" name="condition" type="choice">
|
<variable doc="No change" multi="False" name="condition" type="choice">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="string">
|
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="string">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="No change" multi="False" name="condition" type="choice">
|
<variable doc="No change" multi="False" name="condition" type="choice">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="No change" multi="False" name="condition" type="choice">
|
<variable doc="No change" multi="False" name="condition" type="choice">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="No change" multi="False" name="condition" type="choice">
|
<variable doc="No change" multi="False" name="condition" type="choice">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="No change" multi="False" name="condition" type="choice">
|
<variable doc="No change" multi="False" name="condition" type="choice">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="leader" multi="True" name="mode_conteneur_actif" type="choice">
|
<variable doc="leader" multi="True" name="mode_conteneur_actif" type="choice">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="leader" multi="True" name="mode_conteneur_actif" type="choice">
|
<variable doc="leader" multi="True" name="mode_conteneur_actif" type="choice">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="leader" multi="True" name="mode_conteneur_actif" type="choice">
|
<variable doc="leader" multi="True" name="mode_conteneur_actif" type="choice">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="No change" multi="False" name="condition" type="choice">
|
<variable doc="No change" multi="False" name="condition" type="choice">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="No change" multi="True" name="mode_conteneur_actif" type="choice">
|
<variable doc="No change" multi="True" name="mode_conteneur_actif" type="choice">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="Description" multi="submulti" name="mode_conteneur_actif" type="choice">
|
<variable doc="Description" multi="submulti" name="mode_conteneur_actif" type="choice">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>expert</property>
|
<property>expert</property>
|
||||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>expert</property>
|
<property>expert</property>
|
||||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>expert</property>
|
<property>expert</property>
|
||||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>expert</property>
|
<property>expert</property>
|
||||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
|
<rougail>
|
||||||
|
|
||||||
|
<services/>
|
||||||
|
|
||||||
|
<variables>
|
||||||
|
<family name="general" mode="expert">
|
||||||
|
<variable name="mode_conteneur_actif" type="oui/non" description="No change">
|
||||||
|
<value>non</value>
|
||||||
|
</variable>
|
||||||
|
</family>
|
||||||
|
<family name="enumfam" mode="expert">
|
||||||
|
<variable name="enumvar" type="string" description="multi">
|
||||||
|
<value>b</value>
|
||||||
|
</variable>
|
||||||
|
</family>
|
||||||
|
<separators/>
|
||||||
|
</variables>
|
||||||
|
|
||||||
|
<constraints>
|
||||||
|
<check name="valid_enum" target="enumvar">
|
||||||
|
<param>['a','b','']</param>
|
||||||
|
</check>
|
||||||
|
</constraints>
|
||||||
|
|
||||||
|
<help>
|
||||||
|
<variable name="enumvar">bla bla bla</variable>
|
||||||
|
</help>
|
||||||
|
|
||||||
|
</rougail>
|
||||||
|
<!-- vim: ts=4 sw=4 expandtab
|
||||||
|
-->
|
|
@ -0,0 +1 @@
|
||||||
|
{"rougail.general.mode_conteneur_actif": "non", "rougail.enumfam.enumvar": "b"}
|
|
@ -0,0 +1,27 @@
|
||||||
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
|
<rougail>
|
||||||
|
<family doc="rougail" name="rougail">
|
||||||
|
<family doc="general" name="general">
|
||||||
|
<property>expert</property>
|
||||||
|
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||||
|
<choice type="string">oui</choice>
|
||||||
|
<choice type="string">non</choice>
|
||||||
|
<property>mandatory</property>
|
||||||
|
<property>expert</property>
|
||||||
|
<value type="string">non</value>
|
||||||
|
</variable>
|
||||||
|
</family>
|
||||||
|
<family doc="enumfam" name="enumfam">
|
||||||
|
<property>expert</property>
|
||||||
|
<variable doc="multi" help="bla bla bla" multi="False" name="enumvar" type="choice">
|
||||||
|
<choice type="string">a</choice>
|
||||||
|
<choice type="string">b</choice>
|
||||||
|
<choice type="string"></choice>
|
||||||
|
<property>mandatory</property>
|
||||||
|
<property>expert</property>
|
||||||
|
<value type="string">b</value>
|
||||||
|
</variable>
|
||||||
|
</family>
|
||||||
|
<separators/>
|
||||||
|
</family>
|
||||||
|
</rougail>
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>expert</property>
|
<property>expert</property>
|
||||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>expert</property>
|
<property>expert</property>
|
||||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>expert</property>
|
<property>expert</property>
|
||||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
{"rougail.general.condition": "non", "rougail.general.mode_conteneur_actif": "non", "rougail.general.mode_conteneur_actif2": "non", "services.service0.files.file0.group": "root", "services.service0.files.file0.mode": "0644", "services.service0.files.file0.name": "/etc/file", "services.service0.files.file0.owner": "root", "services.service0.files.file0.source": "file", "services.service0.files.file0.templating": true, "services.service0.files.file0.activate": true}
|
{"rougail.general.condition": "non", "rougail.general.mode_conteneur_actif": "non", "rougail.general.mode_conteneur_actif2": "non", "services.test.files.file.group": "root", "services.test.files.file.mode": "0644", "services.test.files.file.name": "/etc/file", "services.test.files.file.owner": "root", "services.test.files.file.source": "file", "services.test.files.file.templating": true, "services.test.files.file.activate": true}
|
||||||
|
|
|
@ -1,35 +1,29 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family name="services">
|
<family name="services" doc="services">
|
||||||
<family name="service0" doc="test">
|
<property>hidden</property>
|
||||||
<family doc="files" name="files">
|
<family doc="test" name="test">
|
||||||
<family doc="file0" name="file0">
|
<family name="files" doc="files">
|
||||||
|
<family doc="file" name="file">
|
||||||
<variable doc="group" multi="False" name="group" type="string">
|
<variable doc="group" multi="False" name="group" type="string">
|
||||||
<property>hidden</property>
|
|
||||||
<value>root</value>
|
<value>root</value>
|
||||||
</variable>
|
</variable>
|
||||||
<variable doc="mode" multi="False" name="mode" type="string">
|
<variable doc="mode" multi="False" name="mode" type="string">
|
||||||
<property>hidden</property>
|
|
||||||
<value>0644</value>
|
<value>0644</value>
|
||||||
</variable>
|
</variable>
|
||||||
<variable doc="name" multi="False" name="name" type="string">
|
<variable doc="name" multi="False" name="name" type="string">
|
||||||
<property>hidden</property>
|
|
||||||
<value>/etc/file</value>
|
<value>/etc/file</value>
|
||||||
</variable>
|
</variable>
|
||||||
<variable doc="owner" multi="False" name="owner" type="string">
|
<variable doc="owner" multi="False" name="owner" type="string">
|
||||||
<property>hidden</property>
|
|
||||||
<value>root</value>
|
<value>root</value>
|
||||||
</variable>
|
</variable>
|
||||||
<variable doc="source" multi="False" name="source" type="string">
|
<variable doc="source" multi="False" name="source" type="string">
|
||||||
<property>hidden</property>
|
|
||||||
<value>file</value>
|
<value>file</value>
|
||||||
</variable>
|
</variable>
|
||||||
<variable doc="templating" multi="False" name="templating" type="boolean">
|
<variable doc="templating" multi="False" name="templating" type="boolean">
|
||||||
<property>hidden</property>
|
|
||||||
<value>True</value>
|
<value>True</value>
|
||||||
</variable>
|
</variable>
|
||||||
<variable doc="activate" multi="False" name="activate" type="boolean">
|
<variable doc="activate" multi="False" name="activate" type="boolean">
|
||||||
<property>hidden</property>
|
|
||||||
<property expected="oui" inverse="False" source="rougail.general.condition" type="calculation">disabled</property>
|
<property expected="oui" inverse="False" source="rougail.general.condition" type="calculation">disabled</property>
|
||||||
<value>True</value>
|
<value>True</value>
|
||||||
</variable>
|
</variable>
|
||||||
|
@ -37,7 +31,7 @@
|
||||||
</family>
|
</family>
|
||||||
</family>
|
</family>
|
||||||
</family>
|
</family>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="No change" multi="False" name="condition" type="choice">
|
<variable doc="No change" multi="False" name="condition" type="choice">
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
{"rougail.general.condition": "oui", "services.service0.files.file0.group": "root", "services.service0.files.file0.mode": "0644", "services.service0.files.file0.name": "/etc/file", "services.service0.files.file0.owner": "root", "services.service0.files.file0.source": "file", "services.service0.files.file0.templating": true}
|
{"rougail.general.condition": "oui", "services.test.files.file.group": "root", "services.test.files.file.mode": "0644", "services.test.files.file.name": "/etc/file", "services.test.files.file.owner": "root", "services.test.files.file.source": "file", "services.test.files.file.templating": true}
|
||||||
|
|
|
@ -1,35 +1,29 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family name="services">
|
<family name="services" doc="services">
|
||||||
<family name="service0" doc="test">
|
<property>hidden</property>
|
||||||
<family doc="files" name="files">
|
<family doc="test" name="test">
|
||||||
<family doc="file0" name="file0">
|
<family name="files" doc="files">
|
||||||
|
<family doc="file" name="file">
|
||||||
<variable doc="group" multi="False" name="group" type="string">
|
<variable doc="group" multi="False" name="group" type="string">
|
||||||
<property>hidden</property>
|
|
||||||
<value>root</value>
|
<value>root</value>
|
||||||
</variable>
|
</variable>
|
||||||
<variable doc="mode" multi="False" name="mode" type="string">
|
<variable doc="mode" multi="False" name="mode" type="string">
|
||||||
<property>hidden</property>
|
|
||||||
<value>0644</value>
|
<value>0644</value>
|
||||||
</variable>
|
</variable>
|
||||||
<variable doc="name" multi="False" name="name" type="string">
|
<variable doc="name" multi="False" name="name" type="string">
|
||||||
<property>hidden</property>
|
|
||||||
<value>/etc/file</value>
|
<value>/etc/file</value>
|
||||||
</variable>
|
</variable>
|
||||||
<variable doc="owner" multi="False" name="owner" type="string">
|
<variable doc="owner" multi="False" name="owner" type="string">
|
||||||
<property>hidden</property>
|
|
||||||
<value>root</value>
|
<value>root</value>
|
||||||
</variable>
|
</variable>
|
||||||
<variable doc="source" multi="False" name="source" type="string">
|
<variable doc="source" multi="False" name="source" type="string">
|
||||||
<property>hidden</property>
|
|
||||||
<value>file</value>
|
<value>file</value>
|
||||||
</variable>
|
</variable>
|
||||||
<variable doc="templating" multi="False" name="templating" type="boolean">
|
<variable doc="templating" multi="False" name="templating" type="boolean">
|
||||||
<property>hidden</property>
|
|
||||||
<value>True</value>
|
<value>True</value>
|
||||||
</variable>
|
</variable>
|
||||||
<variable doc="activate" multi="False" name="activate" type="boolean">
|
<variable doc="activate" multi="False" name="activate" type="boolean">
|
||||||
<property>hidden</property>
|
|
||||||
<property expected="oui" inverse="False" source="rougail.general.condition" type="calculation">disabled</property>
|
<property expected="oui" inverse="False" source="rougail.general.condition" type="calculation">disabled</property>
|
||||||
<value>True</value>
|
<value>True</value>
|
||||||
</variable>
|
</variable>
|
||||||
|
@ -37,7 +31,7 @@
|
||||||
</family>
|
</family>
|
||||||
</family>
|
</family>
|
||||||
</family>
|
</family>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="No change" multi="False" name="condition" type="choice">
|
<variable doc="No change" multi="False" name="condition" type="choice">
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
{"rougail.general.condition": "non", "rougail.general.mode_conteneur_actif": "non", "rougail.general.mode_conteneur_actif2": "non", "services.service0.files.file0.group": "root", "services.service0.files.file0.mode": "0644", "services.service0.files.file0.name": "/tmp/file1", "services.service0.files.file0.owner": "root", "services.service0.files.file0.source": "file1", "services.service0.files.file0.templating": true, "services.service0.files.file0.activate": true, "services.service0.files.file1.group": "root", "services.service0.files.file1.mode": "0644", "services.service0.files.file1.name": "/tmp/file2", "services.service0.files.file1.owner": "root", "services.service0.files.file1.source": "file2", "services.service0.files.file1.templating": true, "services.service0.files.file1.activate": true}
|
{"rougail.general.condition": "non", "rougail.general.mode_conteneur_actif": "non", "rougail.general.mode_conteneur_actif2": "non", "services.test.files.file1.group": "root", "services.test.files.file1.mode": "0644", "services.test.files.file1.name": "/tmp/file1", "services.test.files.file1.owner": "root", "services.test.files.file1.source": "file1", "services.test.files.file1.templating": true, "services.test.files.file1.activate": true, "services.test.files.file2.group": "root", "services.test.files.file2.mode": "0644", "services.test.files.file2.name": "/tmp/file2", "services.test.files.file2.owner": "root", "services.test.files.file2.source": "file2", "services.test.files.file2.templating": true, "services.test.files.file2.activate": true}
|
||||||
|
|
|
@ -1,66 +1,53 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family name="services">
|
<family name="services" doc="services">
|
||||||
<family name="service0" doc="test">
|
<property>hidden</property>
|
||||||
<family doc="files" name="files">
|
<family doc="test" name="test">
|
||||||
<family doc="file0" name="file0">
|
<family name="files" doc="files">
|
||||||
|
<family doc="file1" name="file1">
|
||||||
<variable doc="group" multi="False" name="group" type="string">
|
<variable doc="group" multi="False" name="group" type="string">
|
||||||
<property>hidden</property>
|
|
||||||
<value>root</value>
|
<value>root</value>
|
||||||
</variable>
|
</variable>
|
||||||
<variable doc="mode" multi="False" name="mode" type="string">
|
<variable doc="mode" multi="False" name="mode" type="string">
|
||||||
<property>hidden</property>
|
|
||||||
<value>0644</value>
|
<value>0644</value>
|
||||||
</variable>
|
</variable>
|
||||||
<variable doc="name" multi="False" name="name" type="string">
|
<variable doc="name" multi="False" name="name" type="string">
|
||||||
<property>hidden</property>
|
|
||||||
<value>/tmp/file1</value>
|
<value>/tmp/file1</value>
|
||||||
</variable>
|
</variable>
|
||||||
<variable doc="owner" multi="False" name="owner" type="string">
|
<variable doc="owner" multi="False" name="owner" type="string">
|
||||||
<property>hidden</property>
|
|
||||||
<value>root</value>
|
<value>root</value>
|
||||||
</variable>
|
</variable>
|
||||||
<variable doc="source" multi="False" name="source" type="string">
|
<variable doc="source" multi="False" name="source" type="string">
|
||||||
<property>hidden</property>
|
|
||||||
<value>file1</value>
|
<value>file1</value>
|
||||||
</variable>
|
</variable>
|
||||||
<variable doc="templating" multi="False" name="templating" type="boolean">
|
<variable doc="templating" multi="False" name="templating" type="boolean">
|
||||||
<property>hidden</property>
|
|
||||||
<value>True</value>
|
<value>True</value>
|
||||||
</variable>
|
</variable>
|
||||||
<variable doc="activate" multi="False" name="activate" type="boolean">
|
<variable doc="activate" multi="False" name="activate" type="boolean">
|
||||||
<property>hidden</property>
|
|
||||||
<property expected="oui" inverse="False" source="rougail.general.condition" type="calculation">disabled</property>
|
<property expected="oui" inverse="False" source="rougail.general.condition" type="calculation">disabled</property>
|
||||||
<value>True</value>
|
<value>True</value>
|
||||||
</variable>
|
</variable>
|
||||||
</family>
|
</family>
|
||||||
<family doc="file1" name="file1">
|
<family doc="file2" name="file2">
|
||||||
<variable doc="group" multi="False" name="group" type="string">
|
<variable doc="group" multi="False" name="group" type="string">
|
||||||
<property>hidden</property>
|
|
||||||
<value>root</value>
|
<value>root</value>
|
||||||
</variable>
|
</variable>
|
||||||
<variable doc="mode" multi="False" name="mode" type="string">
|
<variable doc="mode" multi="False" name="mode" type="string">
|
||||||
<property>hidden</property>
|
|
||||||
<value>0644</value>
|
<value>0644</value>
|
||||||
</variable>
|
</variable>
|
||||||
<variable doc="name" multi="False" name="name" type="string">
|
<variable doc="name" multi="False" name="name" type="string">
|
||||||
<property>hidden</property>
|
|
||||||
<value>/tmp/file2</value>
|
<value>/tmp/file2</value>
|
||||||
</variable>
|
</variable>
|
||||||
<variable doc="owner" multi="False" name="owner" type="string">
|
<variable doc="owner" multi="False" name="owner" type="string">
|
||||||
<property>hidden</property>
|
|
||||||
<value>root</value>
|
<value>root</value>
|
||||||
</variable>
|
</variable>
|
||||||
<variable doc="source" multi="False" name="source" type="string">
|
<variable doc="source" multi="False" name="source" type="string">
|
||||||
<property>hidden</property>
|
|
||||||
<value>file2</value>
|
<value>file2</value>
|
||||||
</variable>
|
</variable>
|
||||||
<variable doc="templating" multi="False" name="templating" type="boolean">
|
<variable doc="templating" multi="False" name="templating" type="boolean">
|
||||||
<property>hidden</property>
|
|
||||||
<value>True</value>
|
<value>True</value>
|
||||||
</variable>
|
</variable>
|
||||||
<variable doc="activate" multi="False" name="activate" type="boolean">
|
<variable doc="activate" multi="False" name="activate" type="boolean">
|
||||||
<property>hidden</property>
|
|
||||||
<property expected="oui" inverse="False" source="rougail.general.condition" type="calculation">disabled</property>
|
<property expected="oui" inverse="False" source="rougail.general.condition" type="calculation">disabled</property>
|
||||||
<value>True</value>
|
<value>True</value>
|
||||||
</variable>
|
</variable>
|
||||||
|
@ -68,7 +55,7 @@
|
||||||
</family>
|
</family>
|
||||||
</family>
|
</family>
|
||||||
</family>
|
</family>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="No change" multi="False" name="condition" type="choice">
|
<variable doc="No change" multi="False" name="condition" type="choice">
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
{"rougail.general.condition": "non", "rougail.general.mode_conteneur_actif": "non", "rougail.general.mode_conteneur_actif2": "non", "services.service0.files.file0.group": "root", "services.service0.files.file0.mode": "0644", "services.service0.files.file0.name": "/tmp/file", "services.service0.files.file0.owner": "root", "services.service0.files.file0.source": "file", "services.service0.files.file0.templating": true}
|
{"rougail.general.condition": "non", "rougail.general.mode_conteneur_actif": "non", "rougail.general.mode_conteneur_actif2": "non", "services.test.files.file.group": "root", "services.test.files.file.mode": "0644", "services.test.files.file.name": "/tmp/file", "services.test.files.file.owner": "root", "services.test.files.file.source": "file", "services.test.files.file.templating": true}
|
||||||
|
|
|
@ -1,43 +1,37 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family name="services">
|
<family name="services" doc="services">
|
||||||
<family name="service0" doc="test">
|
<property>hidden</property>
|
||||||
<family doc="files" name="files">
|
<family doc="test" name="test">
|
||||||
<family doc="file0" name="file0">
|
<family name="files" doc="files">
|
||||||
|
<family doc="file" name="file">
|
||||||
<variable doc="group" multi="False" name="group" type="string">
|
<variable doc="group" multi="False" name="group" type="string">
|
||||||
<property>hidden</property>
|
|
||||||
<value>root</value>
|
<value>root</value>
|
||||||
</variable>
|
</variable>
|
||||||
<variable doc="mode" multi="False" name="mode" type="string">
|
<variable doc="mode" multi="False" name="mode" type="string">
|
||||||
<property>hidden</property>
|
|
||||||
<value>0644</value>
|
<value>0644</value>
|
||||||
</variable>
|
</variable>
|
||||||
<variable doc="name" multi="False" name="name" type="string">
|
<variable doc="name" multi="False" name="name" type="string">
|
||||||
<property>hidden</property>
|
|
||||||
<value>/tmp/file</value>
|
<value>/tmp/file</value>
|
||||||
</variable>
|
</variable>
|
||||||
<variable doc="owner" multi="False" name="owner" type="string">
|
<variable doc="owner" multi="False" name="owner" type="string">
|
||||||
<property>hidden</property>
|
|
||||||
<value>root</value>
|
<value>root</value>
|
||||||
</variable>
|
</variable>
|
||||||
<variable doc="source" multi="False" name="source" type="string">
|
<variable doc="source" multi="False" name="source" type="string">
|
||||||
<property>hidden</property>
|
|
||||||
<value>file</value>
|
<value>file</value>
|
||||||
</variable>
|
</variable>
|
||||||
<variable doc="templating" multi="False" name="templating" type="boolean">
|
<variable doc="templating" multi="False" name="templating" type="boolean">
|
||||||
<property>hidden</property>
|
|
||||||
<value>True</value>
|
<value>True</value>
|
||||||
</variable>
|
</variable>
|
||||||
<variable doc="activate" multi="False" name="activate" type="boolean">
|
<variable doc="activate" multi="False" name="activate" type="boolean">
|
||||||
<property>disabled</property>
|
<property>disabled</property>
|
||||||
<property>hidden</property>
|
|
||||||
<value>True</value>
|
<value>True</value>
|
||||||
</variable>
|
</variable>
|
||||||
</family>
|
</family>
|
||||||
</family>
|
</family>
|
||||||
</family>
|
</family>
|
||||||
</family>
|
</family>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="No change" multi="False" name="condition" type="choice">
|
<variable doc="No change" multi="False" name="condition" type="choice">
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
{"rougail.general.condition": "non", "rougail.general.mode_conteneur_actif": "non", "rougail.general.mode_conteneur_actif2": "non", "services.service0.files.file0.group": "root", "services.service0.files.file0.mode": "0644", "services.service0.files.file0.name": "/tmp/file", "services.service0.files.file0.owner": "root", "services.service0.files.file0.source": "file", "services.service0.files.file0.templating": true}
|
{"rougail.general.condition": "non", "rougail.general.mode_conteneur_actif": "non", "rougail.general.mode_conteneur_actif2": "non", "services.test.files.file.group": "root", "services.test.files.file.mode": "0644", "services.test.files.file.name": "/tmp/file", "services.test.files.file.owner": "root", "services.test.files.file.source": "file", "services.test.files.file.templating": true}
|
||||||
|
|
|
@ -1,43 +1,37 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family name="services">
|
<family name="services" doc="services">
|
||||||
<family name="service0" doc="test">
|
<property>hidden</property>
|
||||||
<family doc="files" name="files">
|
<family doc="test" name="test">
|
||||||
<family doc="file0" name="file0">
|
<family name="files" doc="files">
|
||||||
|
<family doc="file" name="file">
|
||||||
<variable doc="group" multi="False" name="group" type="string">
|
<variable doc="group" multi="False" name="group" type="string">
|
||||||
<property>hidden</property>
|
|
||||||
<value>root</value>
|
<value>root</value>
|
||||||
</variable>
|
</variable>
|
||||||
<variable doc="mode" multi="False" name="mode" type="string">
|
<variable doc="mode" multi="False" name="mode" type="string">
|
||||||
<property>hidden</property>
|
|
||||||
<value>0644</value>
|
<value>0644</value>
|
||||||
</variable>
|
</variable>
|
||||||
<variable doc="name" multi="False" name="name" type="string">
|
<variable doc="name" multi="False" name="name" type="string">
|
||||||
<property>hidden</property>
|
|
||||||
<value>/tmp/file</value>
|
<value>/tmp/file</value>
|
||||||
</variable>
|
</variable>
|
||||||
<variable doc="owner" multi="False" name="owner" type="string">
|
<variable doc="owner" multi="False" name="owner" type="string">
|
||||||
<property>hidden</property>
|
|
||||||
<value>root</value>
|
<value>root</value>
|
||||||
</variable>
|
</variable>
|
||||||
<variable doc="source" multi="False" name="source" type="string">
|
<variable doc="source" multi="False" name="source" type="string">
|
||||||
<property>hidden</property>
|
|
||||||
<value>file</value>
|
<value>file</value>
|
||||||
</variable>
|
</variable>
|
||||||
<variable doc="templating" multi="False" name="templating" type="boolean">
|
<variable doc="templating" multi="False" name="templating" type="boolean">
|
||||||
<property>hidden</property>
|
|
||||||
<value>True</value>
|
<value>True</value>
|
||||||
</variable>
|
</variable>
|
||||||
<variable doc="activate" multi="False" name="activate" type="boolean">
|
<variable doc="activate" multi="False" name="activate" type="boolean">
|
||||||
<property>disabled</property>
|
<property>disabled</property>
|
||||||
<property>hidden</property>
|
|
||||||
<value>True</value>
|
<value>True</value>
|
||||||
</variable>
|
</variable>
|
||||||
</family>
|
</family>
|
||||||
</family>
|
</family>
|
||||||
</family>
|
</family>
|
||||||
</family>
|
</family>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="No change" multi="False" name="condition" type="choice">
|
<variable doc="No change" multi="False" name="condition" type="choice">
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
{"rougail.general.condition": "non", "rougail.general.mode_conteneur_actif": "non", "rougail.general.mode_conteneur_actif2": "non", "services.service0.files.file0.group": "root", "services.service0.files.file0.mode": "0644", "services.service0.files.file0.name": "/tmp/file", "services.service0.files.file0.owner": "root", "services.service0.files.file0.source": "file", "services.service0.files.file0.templating": true}
|
{"rougail.general.condition": "non", "rougail.general.mode_conteneur_actif": "non", "rougail.general.mode_conteneur_actif2": "non", "services.test.files.file.group": "root", "services.test.files.file.mode": "0644", "services.test.files.file.name": "/tmp/file", "services.test.files.file.owner": "root", "services.test.files.file.source": "file", "services.test.files.file.templating": true}
|
||||||
|
|
|
@ -1,43 +1,37 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family name="services">
|
<family name="services" doc="services">
|
||||||
<family name="service0" doc="test">
|
<property>hidden</property>
|
||||||
<family doc="files" name="files">
|
<family doc="test" name="test">
|
||||||
<family doc="file0" name="file0">
|
<family name="files" doc="files">
|
||||||
|
<family doc="file" name="file">
|
||||||
<variable doc="group" multi="False" name="group" type="string">
|
<variable doc="group" multi="False" name="group" type="string">
|
||||||
<property>hidden</property>
|
|
||||||
<value>root</value>
|
<value>root</value>
|
||||||
</variable>
|
</variable>
|
||||||
<variable doc="mode" multi="False" name="mode" type="string">
|
<variable doc="mode" multi="False" name="mode" type="string">
|
||||||
<property>hidden</property>
|
|
||||||
<value>0644</value>
|
<value>0644</value>
|
||||||
</variable>
|
</variable>
|
||||||
<variable doc="name" multi="False" name="name" type="string">
|
<variable doc="name" multi="False" name="name" type="string">
|
||||||
<property>hidden</property>
|
|
||||||
<value>/tmp/file</value>
|
<value>/tmp/file</value>
|
||||||
</variable>
|
</variable>
|
||||||
<variable doc="owner" multi="False" name="owner" type="string">
|
<variable doc="owner" multi="False" name="owner" type="string">
|
||||||
<property>hidden</property>
|
|
||||||
<value>root</value>
|
<value>root</value>
|
||||||
</variable>
|
</variable>
|
||||||
<variable doc="source" multi="False" name="source" type="string">
|
<variable doc="source" multi="False" name="source" type="string">
|
||||||
<property>hidden</property>
|
|
||||||
<value>file</value>
|
<value>file</value>
|
||||||
</variable>
|
</variable>
|
||||||
<variable doc="templating" multi="False" name="templating" type="boolean">
|
<variable doc="templating" multi="False" name="templating" type="boolean">
|
||||||
<property>hidden</property>
|
|
||||||
<value>True</value>
|
<value>True</value>
|
||||||
</variable>
|
</variable>
|
||||||
<variable doc="activate" multi="False" name="activate" type="boolean">
|
<variable doc="activate" multi="False" name="activate" type="boolean">
|
||||||
<property>disabled</property>
|
<property>disabled</property>
|
||||||
<property>hidden</property>
|
|
||||||
<value>True</value>
|
<value>True</value>
|
||||||
</variable>
|
</variable>
|
||||||
</family>
|
</family>
|
||||||
</family>
|
</family>
|
||||||
</family>
|
</family>
|
||||||
</family>
|
</family>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="No change" multi="False" name="condition" type="choice">
|
<variable doc="No change" multi="False" name="condition" type="choice">
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
{"rougail.general.condition": "non", "rougail.general.mode_conteneur_actif": "non", "rougail.general.mode_conteneur_actif2": "non", "services.service0.files.file0.group": "root", "services.service0.files.file0.mode": "0644", "services.service0.files.file0.name": "/tmp/file", "services.service0.files.file0.owner": "root", "services.service0.files.file0.source": "file", "services.service0.files.file0.templating": true}
|
{"rougail.general.condition": "non", "rougail.general.mode_conteneur_actif": "non", "rougail.general.mode_conteneur_actif2": "non", "services.test.files.file.group": "root", "services.test.files.file.mode": "0644", "services.test.files.file.name": "/tmp/file", "services.test.files.file.owner": "root", "services.test.files.file.source": "file", "services.test.files.file.templating": true}
|
||||||
|
|
|
@ -1,35 +1,29 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family name="services">
|
<family name="services" doc="services">
|
||||||
<family name="service0" doc="test">
|
<property>hidden</property>
|
||||||
<family doc="files" name="files">
|
<family doc="test" name="test">
|
||||||
<family doc="file0" name="file0">
|
<family name="files" doc="files">
|
||||||
|
<family doc="file" name="file">
|
||||||
<variable doc="group" multi="False" name="group" type="string">
|
<variable doc="group" multi="False" name="group" type="string">
|
||||||
<property>hidden</property>
|
|
||||||
<value>root</value>
|
<value>root</value>
|
||||||
</variable>
|
</variable>
|
||||||
<variable doc="mode" multi="False" name="mode" type="string">
|
<variable doc="mode" multi="False" name="mode" type="string">
|
||||||
<property>hidden</property>
|
|
||||||
<value>0644</value>
|
<value>0644</value>
|
||||||
</variable>
|
</variable>
|
||||||
<variable doc="name" multi="False" name="name" type="string">
|
<variable doc="name" multi="False" name="name" type="string">
|
||||||
<property>hidden</property>
|
|
||||||
<value>/tmp/file</value>
|
<value>/tmp/file</value>
|
||||||
</variable>
|
</variable>
|
||||||
<variable doc="owner" multi="False" name="owner" type="string">
|
<variable doc="owner" multi="False" name="owner" type="string">
|
||||||
<property>hidden</property>
|
|
||||||
<value>root</value>
|
<value>root</value>
|
||||||
</variable>
|
</variable>
|
||||||
<variable doc="source" multi="False" name="source" type="string">
|
<variable doc="source" multi="False" name="source" type="string">
|
||||||
<property>hidden</property>
|
|
||||||
<value>file</value>
|
<value>file</value>
|
||||||
</variable>
|
</variable>
|
||||||
<variable doc="templating" multi="False" name="templating" type="boolean">
|
<variable doc="templating" multi="False" name="templating" type="boolean">
|
||||||
<property>hidden</property>
|
|
||||||
<value>True</value>
|
<value>True</value>
|
||||||
</variable>
|
</variable>
|
||||||
<variable doc="activate" multi="False" name="activate" type="boolean">
|
<variable doc="activate" multi="False" name="activate" type="boolean">
|
||||||
<property>hidden</property>
|
|
||||||
<property expected="statique" inverse="True" source="rougail.general.condition" type="calculation">disabled</property>
|
<property expected="statique" inverse="True" source="rougail.general.condition" type="calculation">disabled</property>
|
||||||
<value>True</value>
|
<value>True</value>
|
||||||
</variable>
|
</variable>
|
||||||
|
@ -37,7 +31,7 @@
|
||||||
</family>
|
</family>
|
||||||
</family>
|
</family>
|
||||||
</family>
|
</family>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="No change" multi="False" name="condition" type="choice">
|
<variable doc="No change" multi="False" name="condition" type="choice">
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
{"rougail.general.mode_conteneur_actif": "non", "rougail.general.condition": "non", "services.service0.files.file0.group": "root", "services.service0.files.file0.mode": "0644", "services.service0.files.file0.name": "/tmp/file1", "services.service0.files.file0.owner": "root", "services.service0.files.file0.source": "file1", "services.service0.files.file0.templating": true}
|
{"rougail.general.mode_conteneur_actif": "non", "rougail.general.condition": "non", "services.test.files.file1.group": "root", "services.test.files.file1.mode": "0644", "services.test.files.file1.name": "/tmp/file1", "services.test.files.file1.owner": "root", "services.test.files.file1.source": "file1", "services.test.files.file1.templating": true}
|
||||||
|
|
|
@ -1,43 +1,37 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<rougail>
|
<rougail>
|
||||||
<family name="services">
|
<family name="services" doc="services">
|
||||||
<family name="service0" doc="test">
|
<property>hidden</property>
|
||||||
<family doc="files" name="files">
|
<family doc="test" name="test">
|
||||||
<family doc="file0" name="file0">
|
<family name="files" doc="files">
|
||||||
|
<family doc="file1" name="file1">
|
||||||
<variable doc="group" multi="False" name="group" type="string">
|
<variable doc="group" multi="False" name="group" type="string">
|
||||||
<property>hidden</property>
|
|
||||||
<value>root</value>
|
<value>root</value>
|
||||||
</variable>
|
</variable>
|
||||||
<variable doc="mode" multi="False" name="mode" type="string">
|
<variable doc="mode" multi="False" name="mode" type="string">
|
||||||
<property>hidden</property>
|
|
||||||
<value>0644</value>
|
<value>0644</value>
|
||||||
</variable>
|
</variable>
|
||||||
<variable doc="name" multi="False" name="name" type="string">
|
<variable doc="name" multi="False" name="name" type="string">
|
||||||
<property>hidden</property>
|
|
||||||
<value>/tmp/file1</value>
|
<value>/tmp/file1</value>
|
||||||
</variable>
|
</variable>
|
||||||
<variable doc="owner" multi="False" name="owner" type="string">
|
<variable doc="owner" multi="False" name="owner" type="string">
|
||||||
<property>hidden</property>
|
|
||||||
<value>root</value>
|
<value>root</value>
|
||||||
</variable>
|
</variable>
|
||||||
<variable doc="source" multi="False" name="source" type="string">
|
<variable doc="source" multi="False" name="source" type="string">
|
||||||
<property>hidden</property>
|
|
||||||
<value>file1</value>
|
<value>file1</value>
|
||||||
</variable>
|
</variable>
|
||||||
<variable doc="templating" multi="False" name="templating" type="boolean">
|
<variable doc="templating" multi="False" name="templating" type="boolean">
|
||||||
<property>hidden</property>
|
|
||||||
<value>True</value>
|
<value>True</value>
|
||||||
</variable>
|
</variable>
|
||||||
<variable doc="activate" multi="False" name="activate" type="boolean">
|
<variable doc="activate" multi="False" name="activate" type="boolean">
|
||||||
<property>disabled</property>
|
<property>disabled</property>
|
||||||
<property>hidden</property>
|
|
||||||
<value>True</value>
|
<value>True</value>
|
||||||
</variable>
|
</variable>
|
||||||
</family>
|
</family>
|
||||||
</family>
|
</family>
|
||||||
</family>
|
</family>
|
||||||
</family>
|
</family>
|
||||||
<family doc="" name="rougail">
|
<family doc="rougail" name="rougail">
|
||||||
<family doc="general" name="general">
|
<family doc="general" name="general">
|
||||||
<property>normal</property>
|
<property>normal</property>
|
||||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue