feat: add integer type which will replace number type

This commit is contained in:
egarette@silique.fr 2025-09-23 21:37:23 +02:00
parent 319f9eab1f
commit 3c33c1927a
16 changed files with 78 additions and 24 deletions

View file

@ -51,7 +51,7 @@ from rougail.convert.object_model import (
NamespaceParam, NamespaceParam,
Param, Param,
) )
from rougail.tiramisu import normalize_family from rougail.tiramisu import normalize_family, RENAME_TYPE
from rougail.utils import undefined from rougail.utils import undefined
from .upgrade import RougailUpgrade from .upgrade import RougailUpgrade
@ -91,7 +91,7 @@ class RougailOutputFormatter:
) -> None: ) -> None:
self.basic_types = { self.basic_types = {
str: "string", str: "string",
int: "number", int: "integer",
bool: "boolean", bool: "boolean",
float: "float", float: "float",
} }
@ -281,13 +281,18 @@ class RougailOutputFormatter:
force_keys = list(yaml_data) force_keys = list(yaml_data)
multi = obj.multi or isinstance(obj.default, list) multi = obj.multi or isinstance(obj.default, list)
type_ = obj.type type_ = obj.type
if type_ in RENAME_TYPE:
type_ = RENAME_TYPE[type_]
for attr, default_value in self.get_attributes( for attr, default_value in self.get_attributes(
self.rougail.variable, ["name", "path", "namespace", "version", "xmlfiles"] self.rougail.variable, ["name", "path", "namespace", "version", "xmlfiles"]
).items(): ).items():
try: if attr == "type":
value = getattr(obj, attr) value = type_
except AttributeError: else:
continue try:
value = getattr(obj, attr)
except AttributeError:
continue
if attr not in force_keys and value == default_value: if attr not in force_keys and value == default_value:
continue continue
value = self.object_to_yaml(attr, type_, value, multi, path) value = self.object_to_yaml(attr, type_, value, multi, path)
@ -300,7 +305,7 @@ class RougailOutputFormatter:
if "type" in variable and variable["type"] in [ if "type" in variable and variable["type"] in [
"string", "string",
"boolean", "boolean",
"number", "integer",
"float", "float",
]: ]:
if variable["default"] and isinstance(variable["default"], list): if variable["default"] and isinstance(variable["default"], list):
@ -405,6 +410,10 @@ class RougailOutputFormatter:
for v in value: for v in value:
new_value = self.object_to_yaml(key, type_, v, multi, object_path) new_value = self.object_to_yaml(key, type_, v, multi, object_path)
if key == "params": if key == "params":
if "min_number" in new_value:
new_value["min_integer"] = new_value.pop("min_number")
if "max_number" in new_value:
new_value["max_integer"] = new_value.pop("max_number")
new_values.update(new_value) new_values.update(new_value)
else: else:
new_values.append(new_value) new_values.append(new_value)
@ -428,7 +437,10 @@ class RougailOutputFormatter:
else: else:
jinja["jinja"] = LiteralScalarString(jinja_values) jinja["jinja"] = LiteralScalarString(jinja_values)
if value.return_type: if value.return_type:
jinja["return_type"] = value.return_type return_type = value.return_type
if return_type in RENAME_TYPE:
return_type = RENAME_TYPE[return_type]
jinja["return_type"] = return_type
if value.description: if value.description:
if "\n" in value.description: if "\n" in value.description:
jinja["description"] = LiteralScalarString(value.description.strip()) jinja["description"] = LiteralScalarString(value.description.strip())

View file

@ -105,7 +105,7 @@ class RougailUpgrade:
new_root[key] = value new_root[key] = value
for typ, obj in { for typ, obj in {
"boolean": bool, "boolean": bool,
"number": int, "integer": int,
"string": str, "string": str,
"float": float, "float": float,
}.items(): }.items():

View file

@ -9,7 +9,7 @@ var:
{% for n in trange(0, 10) %} {% for n in trange(0, 10) %}
{{ n }} {{ n }}
{% endfor %} {% endfor %}
return_type: number return_type: integer
description: choices is 0 to 9 description: choices is 0 to 9
default: 9 default: 9
... ...

View file

@ -0,0 +1,16 @@
%YAML 1.2
---
version: 1.1
var1: 0 # the first variable
var2: 0 # the second variable
var3: 0 # the third variable
var4: 10 # this forth variable
var5: 10 # the fifth variable
var6: 10 # the sixth variable
...

View file

@ -9,7 +9,7 @@ var:
{% for item in trange(0, 10) %} {% for item in trange(0, 10) %}
{{ item }} {{ item }}
{%- endfor %} {%- endfor %}
return_type: number return_type: integer
description: choice for 0 to 9 description: choice for 0 to 9
default: 9 default: 9
... ...

View file

@ -0,0 +1,15 @@
%YAML 1.2
---
version: 1.1
var:
description: a variable
choices:
jinja: |-
{% for item in trange(0, 10) %}
{{ item }}
{%- endfor %}
return_type: integer
description: choice for 0 to 9
default: 9
...

View file

@ -5,7 +5,7 @@ version: 1.1
int: int:
description: A limited number description: A limited number
params: params:
min_number: 0 min_integer: 0
max_number: 100 max_integer: 100
default: 10 default: 10
... ...

View file

@ -0,0 +1,11 @@
%YAML 1.2
---
version: 1.1
int:
description: A limited integer
params:
min_integer: 0
max_integer: 100
default: 10
...

View file

@ -3,8 +3,8 @@
version: 1.1 version: 1.1
int: int:
description: A number description: An integer
type: number type: integer
validators: validators:
- jinja: |- - jinja: |-
{% if _.int > 100 %} {% if _.int > 100 %}

View file

@ -5,10 +5,10 @@ version: 1.1
general: # a family general: # a family
int: int:
description: a first number description: a first integer
test: test:
- 5 - 5
type: number type: integer
validators: validators:
- jinja: |- - jinja: |-
{% if _.int == int2 %} {% if _.int == int2 %}
@ -29,5 +29,5 @@ general: # a family
variable: _.int3 variable: _.int3
optional: true optional: true
int2: 1 # a second number int2: 1 # a second integer
... ...

View file

@ -13,7 +13,7 @@ leader:
follower1: follower1:
description: a follower description: a follower
type: number type: integer
default: default:
type: index type: index
... ...

View file

@ -13,7 +13,7 @@ leader:
follower1: follower1:
description: a follower description: a follower
type: number type: integer
default: default:
jinja: >- jinja: >-
{{ index }} {{ index }}

View file

@ -6,7 +6,7 @@ bool: false # a boolean variable
int1: int1:
description: first integer variable description: first integer variable
type: number type: integer
default: default:
jinja: >- jinja: >-
{% if rougail.bool %} {% if rougail.bool %}
@ -18,7 +18,7 @@ int1:
int2: int2:
description: second integer variable description: second integer variable
type: number type: integer
default: default:
jinja: >- jinja: >-
{% if not rougail.bool %} {% if not rougail.bool %}

View file

@ -7,7 +7,7 @@ var:
test: test:
- 1 - 1
- 2 - 2
type: number type: integer
multi: true multi: true
mandatory: false mandatory: false

View file

@ -15,7 +15,7 @@ excludes = [
] ]
test_ok = get_structures_list(excludes) test_ok = get_structures_list(excludes)
# test_ok = [Path('../rougail-tests/structures/60_6family_dynamic_sub_dynamic_1_0_2')] # test_ok = [Path('../rougail-tests/structures/04_0type_param')]
def idfn(fixture_value): def idfn(fixture_value):