49 lines
1.3 KiB
Python
49 lines
1.3 KiB
Python
from faker import Faker
|
|
|
|
from cpl.database.abc import DataSeederABC
|
|
from cpl.query import Enumerable
|
|
from model.author import Author
|
|
from model.author_dao import AuthorDao
|
|
from model.post import Post
|
|
from model.post_dao import PostDao
|
|
|
|
|
|
fake = Faker()
|
|
|
|
|
|
class TestDataSeeder(DataSeederABC):
|
|
|
|
def __init__(self, authors: AuthorDao, posts: PostDao):
|
|
DataSeederABC.__init__(self)
|
|
|
|
self._authors = authors
|
|
self._posts = posts
|
|
|
|
async def seed(self):
|
|
if await self._authors.count() == 0:
|
|
await self._seed_authors()
|
|
|
|
if await self._posts.count() == 0:
|
|
await self._seed_posts()
|
|
|
|
async def _seed_authors(self):
|
|
authors = Enumerable.range(0, 35).select(
|
|
lambda x: Author(
|
|
0,
|
|
fake.first_name(),
|
|
fake.last_name(),
|
|
)
|
|
).to_list()
|
|
await self._authors.create_many(authors, skip_editor=True)
|
|
|
|
async def _seed_posts(self):
|
|
posts = Enumerable.range(0, 100).select(
|
|
lambda x: Post(
|
|
id=0,
|
|
author_id=fake.random_int(min=1, max=35),
|
|
title=fake.sentence(nb_words=6),
|
|
content=fake.paragraph(nb_sentences=6),
|
|
)
|
|
).to_list()
|
|
await self._posts.create_many(posts, skip_editor=True)
|