Skip to content

base

django_spire.contrib.seeding.seed.factory.base

BaseSeedFactory

Bases: ABC

Source code in django_spire/contrib/seeding/seed/factory/base.py
def __init__(self, seeder: Seeder) -> None:
    self.seeder = seeder
    self.current_progress = 0
    self._validate()

seeder = seeder instance-attribute

current_progress = 0 instance-attribute

generate_seeds

Source code in django_spire/contrib/seeding/seed/factory/base.py
def generate_seeds(self, count: int, cache_enabled: bool, cache_name: str) -> list[Seed]:
    if cache_enabled:
        cache_key = generate_cache_key(
            self._generate_seeds, self.seeder.fields_seeds, count=count
        )

        cache = SqliteCache(cache_name=cache_name, limit=100)
        cached_seeds: list[Seed] | None = cache.get(cache_key)

        if cached_seeds:
            self._print_cached()

            self.seeder.meta.cached_seed_count += count

            return cached_seeds

    self._print_fresh()

    try:
        fresh_seeds = self._generate_seeds(count)
    except DandyRecoverableError:
        try:
            self._print_retry()

            fresh_seeds = self._generate_seeds(count)
        except DandyRecoverableError:
            message = f'Failed to generate a seed with an LLM please try again'

            raise DandyRecoverableError(message)

    if cache_enabled:
        cache.set(cache_key, fresh_seeds)

    self.seeder.meta.fresh_seed_count += count

    return fresh_seeds