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

View file

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

View file

@ -9,7 +9,7 @@ var:
{% for n in trange(0, 10) %}
{{ n }}
{% endfor %}
return_type: number
return_type: integer
description: choices is 0 to 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) %}
{{ item }}
{%- endfor %}
return_type: number
return_type: integer
description: choice for 0 to 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:
description: A limited number
params:
min_number: 0
max_number: 100
min_integer: 0
max_integer: 100
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
int:
description: A number
type: number
description: An integer
type: integer
validators:
- jinja: |-
{% if _.int > 100 %}

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -15,7 +15,7 @@ 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):