feat: add default inference behavior for basic types #13

Closed
gremond wants to merge 10 commits from basic_types_inference into develop
3 changed files with 16 additions and 11 deletions
Showing only changes of commit baa1968b26 - Show all commits

View file

@ -62,17 +62,20 @@ class Annotator(Walk): # pylint: disable=R0903
variable: dict, variable: dict,
) -> None: ) -> None:
multi = self.objectspace.multis.get(variable.path, False) multi = self.objectspace.multis.get(variable.path, False)
# variable's type inference from a default value with :term:`basic types`
types = {str: "string", int: "number", bool: "boolean", float: "float"} basic_types = {str: "string", int: "number", bool: "boolean", float: "float"}
if variable.version == "1.0":
# variable's type inference with a default value with a basic type # - version: 1.0, the default value is of type "string" by default
## XXX hack: convert None to string if variable.type is None:

This line is not correct to me.

Example:

my_var:
  type: string
  default: 3

is an invalid dictionary.

This line is not correct to me. Example: ``` my_var: type: string default: 3 ``` is an invalid dictionary.
variable.type = "string"
elif variable.version == "1.1":

Not only 1.1, should be "else:"

Not only 1.1, should be "else:"
# - version: 1.1, the default value has no type by default
if multi is False and variable.type is None:
if type(variable.default) in basic_types:
variable.type = basic_types[type(variable.default)]
else:
# XXX FIXME strange. weird. not good
variable.type = "string" variable.type = "string"

If variable.type is "number" it will override by "string".

Multi value should be supported too (raise if type are different in this case).

If variable.type is "number" it will override by "string". Multi value should be supported too (raise if type are different in this case).
## XXX gérer le comportement suivant les versions
if multi is False and variable.type == "string" and type(variable.default) != str:
if type(variable.default) in types:
variable.type = types[type(variable.default)]
# a boolean must have value, the default value is "True" # a boolean must have value, the default value is "True"
if variable.type == "boolean" and multi is False and variable.default is None: if variable.type == "boolean" and multi is False and variable.default is None:
variable.default = True variable.default = True

View file

@ -679,6 +679,7 @@ class ParserVariable:
if not isinstance(filename, list): if not isinstance(filename, list):
filename = [filename] filename = [filename]
variable["xmlfiles"] = filename variable["xmlfiles"] = filename
variable["version"] = version
variable_type = self.get_family_or_variable_type(variable) variable_type = self.get_family_or_variable_type(variable)
obj = { obj = {
"symlink": SymLink, "symlink": SymLink,

View file

@ -439,6 +439,7 @@ class Variable(BaseModel):
test: Optional[list] = None test: Optional[list] = None
xmlfiles: List[str] = [] xmlfiles: List[str] = []
path: str path: str
version: str
# type will be set dynamically in `annotator/value.py`, default is None # type will be set dynamically in `annotator/value.py`, default is None
type: str = None type: str = None