class ModuleFactory(BasePageFactory): hero_image = factory.SubFactory(DummyImageFactory) teaser = factory.LazyAttribute( lambda x: fake.sentence(nb_words=random.randint(8, 12))) lead = factory.LazyAttribute( lambda x: fake.sentence(nb_words=random.randint(8, 12))) skill = factory.LazyAttribute(fake_title) description = factory.LazyAttribute(lambda x: fake.text(max_nb_chars=200)) video_id = random.choice( [274620659, 275716804, 269374180, 273656672, 275692750, 267406224]) video_description = factory.LazyAttribute( lambda x: fake.text(max_nb_chars=200)) resources = wagtail_factories.StreamFieldFactory({ 'link': LinkBlockFactory, 'document': DocumentBlockFactory, }) tools = wagtail_factories.StreamFieldFactory({ 'link': LinkBlockFactory, 'document': DocumentBlockFactory, }) class Meta: model = Module @classmethod def stream_field_magic(cls, kwargs, stream_field_name): if stream_field_name in kwargs: for idx, resource in enumerate(kwargs[stream_field_name]): value = resource['value'] for jdx, field in enumerate(value): kwargs['{}__{}__{}__{}'.format(stream_field_name, idx, resource['type'], field)] = value[field] del kwargs[stream_field_name] else: for i in range(0, random.randint(3, 7)): kwargs['{}__{}__{}__b'.format( stream_field_name, i, random.choice(['link', 'document']))] = None @classmethod def create(cls, **kwargs): cls.stream_field_magic(kwargs, 'resources') cls.stream_field_magic(kwargs, 'tools') return cls._generate(CREATE_STRATEGY, kwargs)
class OperatorPageFactory(BasePageFactory): pseudonym = factory.LazyAttribute(lambda x: fake.domain_word().title()) full_name = factory.LazyAttribute(lambda x: fake.name_male()) bio = factory.LazyAttribute(lambda x: fake.text(max_nb_chars=240)) companies = factory.LazyAttribute(lambda x: CompanyPage.objects.all(). order_by('?')[:random.randint(1, 3)]) portrait = wagtail_factories.StreamFieldFactory( {'image': PlainImageBlockFactory}) portfolio = wagtail_factories.StreamFieldFactory( {'image': PlainImageBlockFactory}) reviews = wagtail_factories.StreamFieldFactory({'review': ReviewFactory}) @factory.post_generation def tags(self, create, extracted, **kwargs): if not create: # Simple build, do nothing. return self.tags.add( *list(Tag.objects.all().order_by('?')[:random.randint(4, 8)])) class Meta: model = OperatorPage @classmethod def create(cls, **kwargs): for i, item in enumerate([{ 'type': 'image', 'initial': { 'dummy': 'dummy' } }] * random.randint(2, 4)): kwargs.update(_get_content_item(i, item, 'portrait')) for i, item in enumerate([{ 'type': 'image', 'initial': { 'dummy': 'dummy' } }] * random.randint(3, 9)): kwargs.update(_get_content_item(i, item, 'portfolio')) for i, item in enumerate([{ 'type': 'review', 'initial': { 'dummy': 'dummy' } }] * random.randint(2, 6)): kwargs.update(_get_content_item(i, item, 'reviews')) return cls._generate(factory.CREATE_STRATEGY, kwargs)
class BlogPageFactory(wagtail_factories.PageFactory): date = datetime.date.today() body = wagtail_factories.StreamFieldFactory({ "heading": wagtail_factories.CharBlockFactory, "paragraph": RichTextBlockFactory, "image": wagtail_factories.ImageChooserBlockFactory, "decimal": DecimalBlockFactory, "date": DateBlockFactory, "datetime": DateTimeBlockFactory, "gallery": ImageGalleryBlockFactory, }) class Meta: model = BlogPage @factory.post_generation def create_links(self, create, extracted, **kwargs): if create: # Create Blog Links BlogPageRelatedLinkFactory.create_batch(5, page=self)
class PageFactory(BasePageFactory): content = wagtail_factories.StreamFieldFactory(factories) class Meta: model = Page @staticmethod def _get_random_content_items(): return [ random.choice(list(factories.keys())) for i in range(0, random.randint(5, 10)) ] @classmethod def create(cls, **kwargs): blocks = kwargs.pop('blocks', [{ 'type': c, 'initial': { 'dummy': 'dummy' } } for c in cls._get_random_content_items()]) for i, item in enumerate(blocks): kwargs.update(_get_content_item(i, item)) return cls._generate(factory.CREATE_STRATEGY, kwargs)
class CompanyPageFactory(BasePageFactory): name = factory.LazyAttribute(lambda x: fake.bs().title()) street = factory.LazyAttribute(lambda x: fake.street_address()) zip = factory.LazyAttribute(lambda x: str(random.randint(1000, 8000))) city = factory.LazyAttribute(lambda x: fake.city()) portrait = wagtail_factories.StreamFieldFactory( {'image': PlainImageBlockFactory}) bio = factory.LazyAttribute(lambda x: fake.text(max_nb_chars=240)) latitude = factory.LazyAttribute(lambda x: fake.latitude()) longitude = factory.LazyAttribute(lambda x: fake.longitude()) class Meta: model = CompanyPage @classmethod def create(cls, **kwargs): for i, item in enumerate([{ 'type': 'image', 'initial': { 'dummy': 'dummy' } }] * random.randint(2, 4)): kwargs.update(_get_content_item(i, item, 'portrait')) return cls._generate(factory.CREATE_STRATEGY, kwargs)
class BlogPostFactory(CorePageFactory): title = factory.Sequence(lambda n: "Blog Post %d" % n) body = wagtail_factories.StreamFieldFactory( {"paragraph": RichTextBlockFactory}) body__0__paragraph__value = "<p>This is some text</p>" @factory.lazy_attribute def parent(self): return BlogPostIndexFactory.create() @factory.post_generation def authors(self, create, extracted, **kwargs): if not create: return if extracted: for author in extracted: self.authors.add(author) @factory.post_generation def tags(self, create, extracted, **kwargs): if not create: return if extracted: for tag in extracted: self.tags.add(tag) class Meta: model = BlogPost
class LearningTechniquesPageFactory(wagtail_factories.PageFactory): """LearningTechniquesPage factory class""" technique_items = wagtail_factories.StreamFieldFactory( {"techniques": LearningTechniquesItemFactory}) class Meta: model = LearningTechniquesPage
class ResourcePageFactory(wagtail_factories.PageFactory): """ResourcePage factory class""" sub_heading = factory.fuzzy.FuzzyText(prefix="Sub heading ") content = wagtail_factories.StreamFieldFactory( {"content": ResourceBlockFactory}) class Meta: model = ResourcePage
class ImageCarouselPageFactory(wagtail_factories.PageFactory): """ImageCarouselPage factory class""" title = factory.fuzzy.FuzzyText(prefix="title") images = wagtail_factories.StreamFieldFactory( {"image": wagtail_factories.ImageChooserBlockFactory}) class Meta: model = ImageCarouselPage
class NewsAndEventsPageFactory(wagtail_factories.PageFactory): """NewsAndEventsPage factory class""" heading = factory.fuzzy.FuzzyText(prefix="heading ") items = wagtail_factories.StreamFieldFactory( {"news_and_events": NewsAndEventsBlockFactory}) class Meta: model = NewsAndEventsPage
class CertificatePageFactory(wagtail_factories.PageFactory): """CertificatePage factory class""" product_name = factory.fuzzy.FuzzyText(prefix="product_name") CEUs = factory.Faker("pystr_format", string_format="#.#") signatories = wagtail_factories.StreamFieldFactory( {"signatory": SignatoryPageFactory}) class Meta: model = CertificatePage
class FacultyMembersPageFactory(wagtail_factories.PageFactory): """FacultyMembersPage factory class""" heading = factory.fuzzy.FuzzyText(prefix="heading ") subhead = factory.fuzzy.FuzzyText(prefix="subhead ") members = wagtail_factories.StreamFieldFactory( {"member": FacultyBlockFactory}) class Meta: model = FacultyMembersPage
class UserTestimonialsPageFactory(wagtail_factories.PageFactory): """UserTestimonialsPage factory class""" heading = factory.fuzzy.FuzzyText(prefix="heading ") subhead = factory.fuzzy.FuzzyText(prefix="subhead ") items = wagtail_factories.StreamFieldFactory( {"testimonial": UserTestimonialBlockFactory}) class Meta: model = UserTestimonialsPage
class CoursesInProgramPageFactory(wagtail_factories.PageFactory): """CoursesInProgramPage factory class""" heading = factory.fuzzy.FuzzyText(prefix="Heading ") body = factory.fuzzy.FuzzyText(prefix="Body ") contents = wagtail_factories.StreamFieldFactory( {"item": CoursePageFactory}) class Meta: model = CoursesInProgramPage
class MyTestPageWithStreamFieldFactory(wagtail_factories.PageFactory): body = wagtail_factories.StreamFieldFactory({ 'char_array': wagtail_factories.ListBlockFactory(wagtail_factories.CharBlockFactory), 'int_array': wagtail_factories.ListBlockFactory( wagtail_factories.IntegerBlockFactory), 'struct': MyBlockFactory, 'image': wagtail_factories.ImageChooserBlockFactory }) class Meta: model = models.MyTestPage
class MyTestPageWithStreamFieldFactory(wagtail_factories.PageFactory): body = wagtail_factories.StreamFieldFactory({ "char_array": wagtail_factories.ListBlockFactory(wagtail_factories.CharBlockFactory), "int_array": wagtail_factories.ListBlockFactory( wagtail_factories.IntegerBlockFactory), "struct": MyBlockFactory, "image": wagtail_factories.ImageChooserBlockFactory, }) class Meta: model = models.MyTestPage
class BlogPageFactory(wagtail_factories.PageFactory): title = factory.Sequence(lambda n: f"Blog post {n}") date = datetime.date.today() author = factory.SubFactory("home.factories.AuthorPageFactory") body = wagtail_factories.StreamFieldFactory({ "heading": wagtail_factories.CharBlockFactory, "paragraph": RichTextBlockFactory, "image": wagtail_factories.ImageChooserBlockFactory, "decimal": DecimalBlockFactory, "date": DateBlockFactory, "datetime": DateTimeBlockFactory, "gallery": ImageGalleryBlockFactory, "page": PageChooserBlockFactory, "text_with_callable": TextWithCallableBlockFactory, }) class Meta: model = BlogPage @factory.post_generation def create_links(self, create, extracted, **kwargs): if create: # Create Blog Links BlogPageRelatedLinkFactory.create_batch(5, page=self) # Create a Person person = PersonFactory.create() # Create Blog Authors AuthorFactory.create_batch(8, page=self, person=person) # Create Blog tags for tag in ["Tag 1", "Tag 2", "Tag 3"]: self.tags.add(tag)