@classmethod
@recorder_to_html_file('model_seeder')
def seed_data(
cls,
count=1,
fields: dict | None = None,
) -> list[dict]:
field_config = cls.get_field_config().override(fields) if fields else cls.get_field_config()
if cls.cache_seed:
hash_key = generate_hash_key(cls.seed_data, count=count, field_config=field_config.fields)
cache = SqliteCache(cache_name=cls.cache_name, limit=cls.cache_limit)
formatted_seed_data = cache.get(hash_key)
if formatted_seed_data:
return formatted_seed_data
seed_data = []
for seeder_cls in cls._field_seeders:
seeder = seeder_cls(field_config.fields, field_config.default_to)
if len(seeder.seeder_fields) > 0:
seed_data.append(seeder.seed(cls, count))
formatted_seed_data = [dict() for _ in range(max(len(sublist) for sublist in seed_data))]
for sublist in seed_data:
for i, d in enumerate(sublist):
formatted_seed_data[i].update(d)
if cls.cache_seed:
cache.set(hash_key, formatted_seed_data)
return formatted_seed_data