Skip to content

Instantly share code, notes, and snippets.

@jbeezley
Last active April 9, 2020 20:36
Show Gist options
  • Save jbeezley/1c4ea69f92d8bed120e0ccab85d48041 to your computer and use it in GitHub Desktop.
Save jbeezley/1c4ea69f92d8bed120e0ccab85d48041 to your computer and use it in GitHub Desktop.
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