pulseapi/entries/factory.py (72 lines of code) (raw):

""" Create fake entries for local development and Heroku's review app. """ from datetime import timezone from factory import ( DjangoModelFactory, Faker, Iterator, Trait, post_generation, LazyAttribute, ) from faker import Factory as FakerFactory from pulseapi.entries.models import Entry, ModerationState from pulseapi.helptypes.models import HelpType from pulseapi.issues.models import Issue from pulseapi.tags.models import Tag from pulseapi.users.models import EmailUser from pulseapi.utility.factories_utility import get_random_items, ImageProvider Faker.add_provider(ImageProvider) faker = FakerFactory.create() pending = ModerationState.objects.get(name='Pending') approved = ModerationState.objects.get(name='Approved') class EntryFactory(DjangoModelFactory): title = LazyAttribute( lambda o: 'title ' + ' '.join(faker.words(nb=1)) ) description = LazyAttribute( lambda o: 'description ' + ''.join(faker.sentence(nb_words=20)) ) content_url = 'http://example.org/image.png' featured = False published_by = LazyAttribute( lambda o: EmailUser.objects.all()[0] ) moderation_state = approved class Meta: model = Entry class BasicEntryFactory(DjangoModelFactory): class Meta: model = Entry exclude = ('title_sentence',) class Params: mozillauser = Trait( published_by=Iterator(EmailUser.objects.filter(email__icontains='mozilla')) ) is_featured = Trait( featured=True ) is_published_by_creator = Trait( published_by_creator=True ) title = LazyAttribute(lambda o: o.title_sentence.rstrip('.')) content_url = Faker('url') created = Faker('past_datetime', start_date='-30d', tzinfo=timezone.utc) published_by = Iterator(EmailUser.objects.exclude(email__icontains='mozilla')) moderation_state = Iterator(ModerationState.objects.all()) description = Faker('paragraph', nb_sentences=6, variable_nb_sentences=True) internal_notes = Faker('paragraph', nb_sentences=3, variable_nb_sentences=True) # LazyAttribute helper value title_sentence = Faker('sentence', nb_words=8, variable_nb_words=True) @post_generation def tags(self, create, extracted, **kwargs): self.tags.add(*get_random_items(Tag)) @post_generation def issues(self, create, extracted, **kwargs): self.issues.add(*get_random_items(Issue)) @post_generation def set_thumbnail(self, create, extracted, **kwargs): self.thumbnail.name = Faker('generic_image').generate({}) class GetInvolvedEntryFactory(BasicEntryFactory): get_involved = Faker('paragraph', nb_sentences=3, variable_nb_sentences=True) get_involved_url = Faker('url') @post_generation def help_types(self, create, extracted, **kwargs): self.help_types.add(*(get_random_items(HelpType)))