import random from dataclasses import dataclass from Generator.Enums.RandomType import RandomType from Generator.Models.Literal import Literal from Generator.Models.RenderResult import RenderResult from Generator.UniversalRandomizer import UniversalRandomizer @dataclass class VariableLiteral(Literal): name: str type: RandomType prefix: str = "" postfix: str = "" last_value: str | None = None def render(self, chanse: float = 1) -> RenderResult: if self.last_value is None or random.random() <= chanse: # Генерируем значение val = str(UniversalRandomizer().get_random(self.type)) self.last_value = val else: val = self.last_value # Формируем строку: префикс + значение + постфикс full_text = f"{self.prefix}{val}{self.postfix}" # Вычисляем координаты ЧИСТОГО значения (без префикса) start = len(self.prefix) end = start + len(val) return RenderResult(full_text, [(start, end, self.type.name)]) def structure(self) -> RenderResult: val = f"<{self.type.name}>" # Формируем строку: префикс + значение + постфикс full_text = f"{self.prefix}{val}{self.postfix}" # Вычисляем координаты ЧИСТОГО значения (без префикса) start = len(self.prefix) end = start + len(val) return RenderResult(full_text, [(start, end, self.type.name)])