Перейти к содержанию

Основы генерации

В этом разделе рассматриваются основные принципы работы с библиотекой FUCKTAR.

Создание модели данных

Первым шагом в работе с FUCKTAR является создание модели данных с использованием dataclass:

from dataclasses import dataclass

@dataclass
class User:
    first_name: str
    last_name: str
    email: str
    age: int

Создание паттерна генерации

После создания модели необходимо определить паттерн генерации, который будет описывать, как генерировать данные для каждого поля:

from fucktar.generator import BasePattern
from fucktar.config import PatternConfig
from fucktar.default_patterns.users import UserRuPatterns

class UserPatterns(BasePattern[User]):
    first_name = UserRuPatterns.first_name
    last_name = UserRuPatterns.last_name
    email = UserRuPatterns.email
    age = r"^[1-9][0-9]$"  # Возраст от 10 до 99 лет

    pattern_config = PatternConfig(
        scope="users",
        unique_fields=["email"]
    )

Генерация данных

После определения паттерна можно начинать генерацию данных:

# Генерация одного объекта
user = UserPatterns().generate()

# Генерация нескольких объектов
users = UserPatterns().generate(count=10)

Типы полей

FUCKTAR поддерживает различные типы полей в моделях данных:

Строковые поля

Строковые поля генерируются на основе регулярных выражений:

class ProductPatterns(BasePattern[Product]):
    name = r"^[A-Z][a-z]{5,20} [A-Z][a-z]{3,15}$"
    description = r"^[A-Za-z0-9 .,!?]{10,200}$"

Числовые поля

Числовые поля могут быть представлены как строки в регулярных выражениях, а затем преобразованы к нужному типу:

class ProductPatterns(BasePattern[Product]):
    price = r"^\d{1,4}\.\d{2}$"  # Цена в формате 0.00 - 9999.99

Булевы поля

Булевы поля могут быть представлены как строки:

class ProductPatterns(BasePattern[Product]):
    in_stock = r"^(True|False)$"

Обработка сгенерированных данных

Сгенерированные данные автоматически преобразуются к типам, указанным в модели:

user = UserPatterns().generate()
# user.age будет типа int, если в модели указано age: int

Ограничения

При работе с базовыми возможностями генерации следует учитывать следующие ограничения:

  1. Все поля в модели должны иметь аннотации типов
  2. Регулярные выражения должны быть корректными и генерировать строки, которые можно преобразовать к указанным типам
  3. Для сложных типов данных может потребоваться дополнительная обработка после генерации

В следующих разделах мы рассмотрим более продвинутые возможности библиотеки.