OpoTests/Python/Modules/Format/SerieFormat.py

66 lines
1.8 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from typing import Self, Any, Optional
from Interfaces.FormatModuleInterface import FormatModuleInterface
from Utils.Patterns import RE
from Utils.Check import Check
from Utils.Utils import Utils
class SerieFormat:
def __init__(self:Self,
format:FormatModuleInterface,
options:Optional[dict[str, Any|None]] = None
) -> None:
self.format:FormatModuleInterface = format
def get(self:Self,
i:int,
inputs:str|list[Any|None],
shared:dict[str, Any|None] = {},
fragments:list[str] = []
) -> str:
inputs = (
[
int(value) for value in str(Utils.get_random(inputs.split("|"))).split("-")
] if Check.is_string(inputs) else
inputs if Check.is_array(inputs) else
[])
serie:int|None = shared.get("serie")
range:int|list[int]|list[int, int]
if serie is not None:
inputs = [range for range in inputs if (
serie < range if not Check.is_array(range) else
serie < range[0] if len(range) == 1 else
serie < range[1])]
range = Utils.get_random(*inputs)
if not Check.is_array(range):
shared["serie"] = range
return str(range)
if len(range) == 1:
shared["serie"] = range[0]
return str(range[0])
value:int
while True:
value = Utils.get_random(*range)
if value > serie:
break
serie = value
return str(value)
def check(self:Self,
i:int,
string:str,
inputs:str|list[Any|None],
shared:dict[str, Any|None] = {},
fragments:list[str] = []
) -> int:
return self.format.check_range(string, inputs)