diddi- / flask-seeder

Flask extension for seeding database
32 stars 11 forks source link

Need more generators #7

Open SaidiAli opened 4 years ago

SaidiAli commented 4 years ago

I searched for some good database seeders for my flask app and I always ended considering this project but it failed to do the job too because apparently there is not enough generators, you need some more generators for email, date , address and many more. An inspiration can be picked from the faker project. I myself will consider to folk the repo and do some work.

zgoda commented 3 years ago

Faker provides a plenty of localised generators, and it can be used as-is, no need to replicate functionality.

Razator73 commented 2 years ago

Here is how I implemented the Faker library with Flask-Seeder. I couldn't figure out a good way to get Faker to return a generator object so I was hoping there is a better way to do this, but this works.

from flask_seeder import Seeder, Faker as FlaskFaker, generator
from faker import Faker

from test_site.user.models import User

fake = Faker()

class FakerGenerator(generator.Generator):
    def __init__(self, method, **kwargs):
        super().__init__(**kwargs)
        self._method = method

    def generate(self):
        return self._method()

class TestSeeder(Seeder):

    def run(self):
        user_faker = FlaskFaker(
            cls=User,
            init={
                "username": FakerGenerator(fake.user_name),
                "email": generator.Email(),
                "password": FakerGenerator(fake.password)
            }
        )
        User.query.delete()
        for user in user_faker.create(5):
            self.db.session.add(user)