Last active
April 9, 2020 20:36
-
-
Save jbeezley/1c4ea69f92d8bed120e0ccab85d48041 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from dataclasses import dataclass | |
from factory import Faker | |
from factory.alchemy import SQLAlchemyModelFactory | |
from faker import providers | |
from sqlalchemy import Column, Integer, String | |
Faker.add_provider(providers.internet) | |
Faker.add_provider(providers.date_time) | |
@dataclass | |
class User: | |
id = Column(Integer, primary_key=True) | |
name = Column(String, unique=True, nullable=False) | |
email = Column(String) | |
class GetOrCreateFactory(SQLAlchemyModelFactory): | |
@classmethod | |
def _create(cls, model_class, name, **kwargs): | |
result = model_class.query.filter_by(name=name).first() | |
if result is None: | |
return super()._create(model_class, name=name, **kwargs) | |
return result | |
class UserFactory(GetOrCreateFactory): | |
name = Faker('random_element', elements=['Alice', 'Bob', 'Charlie']) | |
email = Faker('email') | |
class Meta: | |
model = User | |
user1 = UserFactory(name='Alice') | |
user2 = UserFactory(name='Alice') | |
assert user1.id == user2.id |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment