add space parameter

This commit is contained in:
Emmanuel Garette 2022-03-05 11:13:05 +01:00
parent d1d6a80fe7
commit 5c526cf2b4
13 changed files with 86 additions and 8 deletions

View File

@ -42,3 +42,11 @@ Le paramètre peut être une valeur null (None en python) :
``` ```
<param type="nil"/> <param type="nil"/>
``` ```
# Paramètre de type "space"
Les paramètres sont chargés en supprimer les espaces en début ou fin de chaîne. Ce qui rend impossible d'avoir un paramètre " ". Avec le type "space", le paramètre sera donc un simple espace :
```
<param type="space"/>
```

View File

@ -268,7 +268,7 @@ class Annotator(Walk):
for family in self.get_families(): for family in self.get_families():
if 'dynamic' not in vars(family): if 'dynamic' not in vars(family):
continue continue
family.suffixes = self.objectspace.paths.get_variable(family.dynamic) family.suffixes = self.objectspace.paths.get_variable(family.dynamic, family.xmlfiles)
del family.dynamic del family.dynamic
if not family.suffixes.multi: if not family.suffixes.multi:
msg = _(f'dynamic family "{family.name}" must be linked ' msg = _(f'dynamic family "{family.name}" must be linked '

View File

@ -59,7 +59,7 @@ class ParamAnnotator:
if param.type in ['suffix', 'index']: if param.type in ['suffix', 'index']:
msg = _(f'"{param.type}" parameter must not have a value') msg = _(f'"{param.type}" parameter must not have a value')
raise DictConsistencyError(msg, 28, obj.xmlfiles) raise DictConsistencyError(msg, 28, obj.xmlfiles)
if param.type == 'nil': if param.type in ['nil', 'space']:
if param.text is not None: if param.text is not None:
msg = _(f'"{param.type}" parameter must not have a value') msg = _(f'"{param.type}" parameter must not have a value')
raise DictConsistencyError(msg, 40, obj.xmlfiles) raise DictConsistencyError(msg, 40, obj.xmlfiles)
@ -116,6 +116,9 @@ class ParamAnnotator:
raise DictConsistencyError(msg, 60, obj.xmlfiles) raise DictConsistencyError(msg, 60, obj.xmlfiles)
elif param.type == 'nil': elif param.type == 'nil':
param.text = None param.text = None
elif param.type == 'space':
param.type = 'string'
param.text = ' '
elif param.type == 'string': elif param.type == 'string':
param.text = '' param.text = ''
if variable_type: if variable_type:

View File

@ -163,6 +163,8 @@ class Annotator(Walk): # pylint: disable=R0903
raise DictConsistencyError(msg, 5, choice.xmlfiles) raise DictConsistencyError(msg, 5, choice.xmlfiles)
if choice.type == 'nil': if choice.type == 'nil':
choice.name = None choice.name = None
elif choice.type == 'space':
choice.name = ' '
elif choice.type == 'variable': elif choice.type == 'variable':
choice.name = self.objectspace.paths.get_variable(choice.name) choice.name = self.objectspace.paths.get_variable(choice.name)
if not choice.name.multi: if not choice.name.multi:

View File

@ -115,10 +115,10 @@
<!ATTLIST variable test CDATA #IMPLIED> <!ATTLIST variable test CDATA #IMPLIED>
<!ELEMENT value (#PCDATA)> <!ELEMENT value (#PCDATA)>
<!ATTLIST value type (string|number|nil|boolean) #IMPLIED> <!ATTLIST value type (string|number|nil|space|boolean) #IMPLIED>
<!ELEMENT choice (#PCDATA | param)*> <!ELEMENT choice (#PCDATA | param)*>
<!ATTLIST choice type (string|number|nil|boolean|function|variable) "string"> <!ATTLIST choice type (string|number|nil|space|boolean|function|variable) "string">
<!ATTLIST choice name CDATA #IMPLIED> <!ATTLIST choice name CDATA #IMPLIED>
<!ELEMENT constraints ((fill*|check*|condition*)*)> <!ELEMENT constraints ((fill*|check*|condition*)*)>
@ -137,7 +137,7 @@
<!ATTLIST condition apply_on_fallback (True|False) #IMPLIED> <!ATTLIST condition apply_on_fallback (True|False) #IMPLIED>
<!ELEMENT param (#PCDATA)> <!ELEMENT param (#PCDATA)>
<!ATTLIST param type (string|number|nil|boolean|variable|function|information|target_information|suffix|index) "string"> <!ATTLIST param type (string|number|nil|space|boolean|variable|function|information|target_information|suffix|index) "string">
<!ATTLIST param name CDATA #IMPLIED> <!ATTLIST param name CDATA #IMPLIED>
<!ATTLIST param propertyerror (True|False) "True"> <!ATTLIST param propertyerror (True|False) "True">
<!ATTLIST param optional (True|False) "False"> <!ATTLIST param optional (True|False) "False">

View File

@ -296,7 +296,7 @@ class Common:
): ):
"""Populate variable parameters """Populate variable parameters
""" """
if param.type in ['number', 'boolean', 'nil', 'string', 'port', 'choice']: if param.type in ['number', 'boolean', 'nil', 'string', 'port', 'choice', 'space']:
value = param.text value = param.text
if param.type == 'string' and value is not None: if param.type == 'string' and value is not None:
value = self.convert_str(value) value = self.convert_str(value)

View File

@ -0,0 +1,19 @@
<?xml version='1.0' encoding='UTF-8'?>
<rougail version="0.10">
<services/>
<variables>
<family name="proxy_authentifie" description="proxy authentifié">
<variable name="toto1" type="port" description="Port d'écoute du proxy" mode="expert">
</variable>
<variable name="toto2" type="port" description="Port d'écoute du proxy NTLM" mode="expert">
<value>3127</value>
</variable>
</family>
</variables>
<constraints>
<fill name="calc_multi_condition">
<param type="space"/>
<target>toto1</target>
</fill>
</constraints>
</rougail>

View File

@ -0,0 +1,10 @@
{
"rougail.proxy_authentifie.toto1": {
"owner": "default",
"value": null
},
"rougail.proxy_authentifie.toto2": {
"owner": "default",
"value": "3127"
}
}

View File

@ -0,0 +1,4 @@
{
"rougail.proxy_authentifie.toto1": null,
"rougail.proxy_authentifie.toto2": "3127"
}

View File

@ -0,0 +1,10 @@
{
"rougail.proxy_authentifie.toto1": {
"owner": "default",
"value": null
},
"rougail.proxy_authentifie.toto2": {
"owner": "default",
"value": "3127"
}
}

View File

@ -0,0 +1,21 @@
from importlib.machinery import SourceFileLoader as _SourceFileLoader
from importlib.util import spec_from_loader as _spec_from_loader, module_from_spec as _module_from_spec
class func:
pass
_loader = _SourceFileLoader('func', 'tests/dictionaries/../eosfunc/test.py')
_spec = _spec_from_loader(_loader.name, _loader)
_func = _module_from_spec(_spec)
_loader.exec_module(_func)
for function in dir(_func):
if function.startswith('_'):
continue
setattr(func, function, getattr(_func, function))
try:
from tiramisu3 import *
except:
from tiramisu import *
option_3 = PortOption(name="toto1", doc="Port d'écoute du proxy", default=Calculation(func.calc_multi_condition, Params((ParamValue(" ")))), allow_private=True, properties=frozenset({"expert"}))
option_4 = PortOption(name="toto2", doc="Port d'écoute du proxy NTLM", default="3127", allow_private=True, properties=frozenset({"expert", "mandatory"}))
option_2 = OptionDescription(name="proxy_authentifie", doc="proxy authentifié", children=[option_3, option_4], properties=frozenset({"expert"}))
option_1 = OptionDescription(name="rougail", doc="rougail", children=[option_2])
option_0 = OptionDescription(name="baseoption", doc="baseoption", children=[option_1])

View File

@ -70,7 +70,7 @@ async def launch_flattener(test_dir):
if not isfile(makedict_file): if not isfile(makedict_file):
raise Exception('dict is not empty') raise Exception('dict is not empty')
with open(makedict_file, 'r') as fh: with open(makedict_file, 'r') as fh:
assert load(fh) == loads(dumps(config_dict)) assert load(fh) == loads(dumps(config_dict)), f"error in file {makedict_file}"
# #
await value_owner(makedict_before, config) await value_owner(makedict_before, config)
# deploy # deploy
@ -110,7 +110,8 @@ async def value_owner(makedict_value_owner, config):
dump(ret, fh, indent=4) dump(ret, fh, indent=4)
fh.write('\n') fh.write('\n')
with open(makedict_value_owner, 'r') as fh: with open(makedict_value_owner, 'r') as fh:
assert load(fh) == loads(dumps(ret)) assert load(fh) == loads(dumps(ret)), f"error in file {makedict_value_owner}"
@mark.asyncio @mark.asyncio