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

Конфигурация генерации

FUCKTAR предоставляет гибкие возможности для настройки процесса генерации данных. В этом разделе мы рассмотрим различные параметры конфигурации.

Конфигурация паттерна

Каждый паттерн должен иметь конфигурацию, определяемую через PatternConfig:

from fucktar.config import PatternConfig

class UserPatterns(BasePattern[User]):
    first_name = UserRuPatterns.first_name
    last_name = UserRuPatterns.last_name
    email = UserRuPatterns.email

    pattern_config = PatternConfig(
        scope="users",           # Имя scope для хранения истории
        unique_fields=["email"]  # Поля, по которым проверяется уникальность
    )

Параметры PatternConfig

  • scope (str): Имя области видимости для хранения истории генерации. Используется для разделения истории между разными типами данных.
  • unique_fields (list[str]): Список полей, по которым проверяется уникальность. Обязательно для заполнения.

Динамическая конфигурация

Вы можете настраивать параметры генерации динамически с помощью метода configure():

users = (
    UserPatterns()
    .configure(
        unique=True,      # Включить режим уникальности
        ignore_count=False  # Не игнорировать запрошенное количество
    )
    .generate(count=100)
)

Параметры configure()

  • unique (bool): Включить режим генерации уникальных данных
  • ignore_count (bool): Если True, вернуть столько данных, сколько удалось сгенерировать, даже если меньше запрошенного количества

Установка значений по умолчанию

Вы можете установить значения по умолчанию для полей с помощью метода default_values():

users = (
    UserPatterns()
    .default_values(city="Москва", country="Россия")
    .generate(count=10)
)

Значения по умолчанию имеют приоритет над регулярными выражениями при генерации.

Параметры метода generate()

Метод generate() принимает несколько параметров для тонкой настройки процесса генерации:

users = UserPatterns().generate(
    count=100,        # Количество объектов для генерации
    max_attempts=1000, # Максимальное число попыток генерации уникального объекта
    timeout=30         # Таймаут генерации в секундах
)

Подробное описание параметров

  • count (int): Количество объектов для генерации. По умолчанию 1.
  • max_attempts (int): Максимальное число неудачных попыток генерации уникального объекта подряд. По умолчанию 1000.
  • timeout (int): Таймаут генерации в секундах. По умолчанию 30.

Fluent-интерфейс

FUCKTAR использует fluent-интерфейс для цепочки вызовов конфигурационных методов:

users = (
    UserPatterns()
    .configure(unique=True, ignore_count=False)
    .default_values(city="Москва")
    .generate(count=100, timeout=60)
)

Это позволяет гибко комбинировать различные параметры конфигурации.

Примеры конфигураций

Генерация с ограничением по времени

# Быстрая генерация с коротким таймаутом
users = UserPatterns().generate(count=1000, timeout=5)

Генерация с высокой гарантией уникальности

# Генерация с увеличенным числом попыток
unique_users = (
    UserPatterns()
    .configure(unique=True)
    .generate(count=10000, max_attempts=10000)
)

Генерация с игнорированием количества

# Генерация уникальных данных с ограничением по попыткам
users = (
    UserPatterns()
    .configure(unique=True, ignore_count=True)
    .generate(count=1000000, max_attempts=100)
)

Рекомендации по конфигурации

  1. Всегда указывайте осмысленные имена для scope в PatternConfig
  2. Используйте unique_fields только для тех полей, по которым действительно нужна уникальность
  3. Устанавливайте разумные значения для max_attempts и timeout в зависимости от сложности паттернов
  4. Используйте default_values для полей, которые должны иметь фиксированные значения
  5. Комбинируйте методы конфигурации в цепочку для лучшей читаемости кода