def generate(seed): """ Makes a batch of 3 publication pages. """ reseed(seed) home_page = get_homepage() """ Create a couple scenarios that will be best for testing: * A PublicationPage with several child ArticlePages * A PublicationPage with child PublicationPages, each of which has their own ArticlePages * future: perhaps nested at random levels of depth? """ pub_page_with_child_articles = PublicationPageFactory.create( parent=home_page, title='Publication Page with child Article Pages') pub_page_with_chapters = PublicationPageFactory.create( parent=home_page, title='Publication Page with chapter pages') ArticlePageFactory.create_batch(parent=pub_page_with_child_articles, size=8) PublicationPageFactory.create_batch(parent=pub_page_with_chapters, size=3) for chapter in pub_page_with_chapters.get_children(): ArticlePageFactory.create_batch(parent=chapter, size=8) article_pages = ArticlePage.objects.all() for post in article_pages: add_authors(post)
def handle(self, *args, **options): if options['delete']: call_command('flush_models') faker = factory.faker.Faker._get_faker(locale='en-US') # Seed Faker with the provided seed value or a pseudorandom int between 0 and five million if options['seed']: seed = options['seed'] elif settings.RANDOM_SEED is not None: seed = settings.RANDOM_SEED else: seed = random.randint(0, 5000000) print(f'Seeding random numbers with: {seed}') reseed(seed) print('Generating Images') [ ImageFactory.create(file__width=1080, file__height=720, file__color=faker.safe_color_name()) for i in range(20) ] [ app_factory.generate(seed) for app_factory in [ news_factory, highlights_factory, wagtailpages_factory, buyersguide_factory, mozfest_factory ] ] print(self.style.SUCCESS('Done!'))
def generate(seed): participate_page = None try: participate_page = ParticipatePage2.objects.get( title='What you can do') except WagtailPage.DoesNotExist: print( 'Participate page must exist. Ensure that ' + 'networkapi.wagtailpages.factory.participage_page is executing first' ) reseed(seed) print('Generating Participate Highlights') if participate_page is not None: featured_highlights = [HighlightFactory.create() for i in range(3)] participate_page.featured_highlights = [ ParticipatePage2FeaturedHighlightsFactory.build( highlight=featured_highlights[i]) for i in range(3) ] featured_highlights2 = [HighlightFactory.create() for i in range(6)] participate_page.featured_highlights2 = [ ParticipatePage2FeaturedHighlights2Factory.build( highlight=featured_highlights2[i]) for i in range(6) ] participate_page.save()
def generate(seed): reseed(seed) print('Generating PNI Homepage') pni_homepage = BuyersGuidePageFactory.create( parent=Homepage.objects.first(), title='* Privacy not included', slug='privacynotincluded', header='Be Smart. Shop Safe.', intro_text= ('How creepy is that smart speaker, that fitness tracker' ', those wireless headphones? We created this guide to help you shop for safe' ', secure connected products.'), ) print('Generating visual regression test products') create_general_product_visual_regression_product(seed, pni_homepage) create_software_product_visual_regression_product(seed, pni_homepage) print('Generating 52 ProductPages') for i in range(26): # General products general_page = GeneralProductPageFactory.create(parent=pni_homepage, ) fake_privacy_policy = ProductPagePrivacyPolicyLinkFactory( page=general_page) general_page.privacy_policy_links.add(fake_privacy_policy) general_page.save_revision().publish() # Software products software_page = SoftwareProductPageFactory.create( parent=pni_homepage, ) software_page.save_revision().publish() fake_privacy_policy = ProductPagePrivacyPolicyLinkFactory( page=software_page) software_page.privacy_policy_links.add(fake_privacy_policy) software_page.save_revision().publish() print('Crosslinking related products') product_pages = ProductPage.objects.all() total_product_pages = product_pages.count() for product_page in product_pages: # Create a new orderable 3 times. # Each page will be randomly selected from an existing factory page. for i in range(3): random_number = randint(1, total_product_pages) - 1 random_page = product_pages[random_number] related_product = RelatedProducts( page=product_page, related_product=random_page, ) related_product.save() product_page.related_product_pages.add(related_product) reseed(seed) print('Generating Buyer\'s Guide product updates') generate_fake_data(ProductUpdateFactory, 15) # TODO: link updates into products """
def generate(seed): print('Generating Homepage Focus Areas and Spotlights') home_page = get_homepage() reseed(seed) # These are "guaranteed" to exist as they are created as # part of the wagtailpages migrations: HomepageFocusAreas.objects.create( page=home_page, area=FocusArea.objects.get(name='Empower Action')) HomepageFocusAreas.objects.create( page=home_page, area=FocusArea.objects.get(name='Connect Leaders')) HomepageFocusAreas.objects.create( page=home_page, area=FocusArea.objects.get(name='Investigate & Research')) NUM_SPOTLIGHT_POSTS = 3 all_blogs = list(BlogPage.objects.all()) home_page.spotlight_posts = [ HomepageSpotlightPosts.objects.create(page=home_page, blog=choice(all_blogs)) for i in range(NUM_SPOTLIGHT_POSTS) ] home_page.save()
def generate(seed): home_page = get_homepage() reseed(seed) try: WagtailPage.objects.get(title='participate') print('participate page exists') except WagtailPage.DoesNotExist: print('Generating an empty Participate Page') ParticipatePage2Factory.create(parent=home_page)
def generate(seed): home_page = get_homepage() reseed(seed) try: WagtailPage.objects.get(title='news') print('news page exists') except WagtailPage.DoesNotExist: print('Generating an empty News Page') NewsPageFactory.create(parent=home_page, show_in_menus=False)
def generate(seed): home_page = get_homepage() reseed(seed) try: WagtailPage.objects.get(title='initiatives') print('initiatives page exists') except WagtailPage.DoesNotExist: print('Generating an empty Initiatives Page') InitiativesPageFactory.create(parent=home_page)
def generate(seed): home_page = get_homepage() reseed(seed) try: WagtailPage.objects.get(title='style-guide') print('styleguide page exists') except WagtailPage.DoesNotExist: print('Generating a Styleguide Page') StyleguideFactory.create(parent=home_page)
def generate(seed): reseed(seed) print('Generating PNI Homepage') pni_homepage = BuyersGuidePageFactory.create( parent=Homepage.objects.first(), title='* Privacy not included', slug='privacynotincluded', ) print('Generating visual regression test products') create_general_product_visual_regression_product(seed, pni_homepage) create_software_product_visual_regression_product(seed, pni_homepage) print('Generating 52 ProductPages') for i in range(26): # General products general_page = GeneralProductPageFactory.create(parent=pni_homepage,) fake_privacy_policy = ProductPagePrivacyPolicyLinkFactory(page=general_page) general_page.privacy_policy_links.add(fake_privacy_policy) general_page.save_revision().publish() # Software products software_page = SoftwareProductPageFactory.create(parent=pni_homepage,) software_page.save_revision().publish() fake_privacy_policy = ProductPagePrivacyPolicyLinkFactory(page=software_page) software_page.privacy_policy_links.add(fake_privacy_policy) software_page.save_revision().publish() print('Crosslinking related products') product_pages = ProductPage.objects.all() total_product_pages = product_pages.count() for product_page in product_pages: # Create a new orderable 3 times. # Each page will be randomly selected from an existing factory page. for i in range(3): random_number = randint(1, total_product_pages) - 1 random_page = product_pages[random_number] related_product = RelatedProducts( page=product_page, related_product=random_page, ) related_product.save() product_page.related_product_pages.add(related_product) reseed(seed) print('Generating Buyer\'s Guide product updates') generate_fake_data(ProductUpdateFactory, 15) # TODO: link updates into products """
def generate(seed): reseed(seed) home_page = get_homepage() try: opportunity_namespace = WagtailPage.objects.get(title='opportunity') print('opportunity namespace exists') except WagtailPage.DoesNotExist: print('Generating an opportunity namespace') opportunity_namespace = MiniSiteNamespaceFactory.create( parent=home_page, title='opportunity', live=False) reseed(seed) print('Generating Opportunity Pages under namespace') [ OpportunityPageFactory.create(parent=opportunity_namespace) for i in range(5) ] reseed(seed) try: OpportunityPage.objects.get(title='Global Sprint') print('Global Sprint OpportunityPage exists') except OpportunityPage.DoesNotExist: print('Generating Global Sprint OpportunityPage') OpportunityPageFactory.create(parent=opportunity_namespace, title='Global Sprint') reseed(seed) try: OpportunityPage.objects.get(title='single-page') print('single-page OpportunityPage exists') except OpportunityPage.DoesNotExist: print('Generating single-page OpportunityPage') OpportunityPageFactory.create(parent=opportunity_namespace, title='single-page') reseed(seed) try: OpportunityPage.objects.get(title='multi-page') print('multi-page OpportunityPage exists') except OpportunityPage.DoesNotExist: print('Generating multi-page OpportunityPage') multi_page_opportunity = OpportunityPageFactory( parent=opportunity_namespace, title='multi-page') [ OpportunityPageFactory(parent=multi_page_opportunity) for k in range(3) ]
def generate(seed): print('Generating Homepage Cause Statement Link') home_page = get_homepage() reseed(seed) home_page.cause_statement_link_text = faker.text(max_nb_chars=80) all_children = list(home_page.get_descendants()) home_page.cause_statement_link_page = choice(all_children) home_page.save()
def generate(seed): print('Generating Homepage Blogs and Highlights') home_page = get_homepage() reseed(seed) home_page.news_you_can_use = [ HomepageNewsYouCanUseFactory.build(blog=BlogPage.objects.all()[i]) for i in range(4) ] home_page.save()
def generate(seed): reseed(seed) print('Generating blank Homepage') try: home_page = get_homepage() print('Homepage already exists') except Homepage.DoesNotExist: print('Generating a Homepage') site_root = WagtailPage.objects.get(id=1) home_page = WagtailHomepageFactory.create(parent=site_root, title='Homepage', slug=None, hero_image__file__width=1080, hero_image__file__height=720) reseed(seed) try: default_site = WagtailSite.objects.get(is_default_site=True) default_site.root_page = home_page if settings.HEROKU_APP_NAME: hostname = REVIEW_APP_HOSTNAME port = 80 else: hostname = 'localhost' port = 8000 default_site.hostname = hostname default_site.port = port default_site.save() print('Updated the default Site') except WagtailSite.DoesNotExist: print('Generating a default Site') if settings.HEROKU_APP_NAME: hostname = REVIEW_APP_HOSTNAME port = 80 else: hostname = 'localhost' port = 8000 WagtailSite.objects.create(hostname=hostname, port=port, root_page=home_page, site_name='Foundation Home Page', is_default_site=True) reseed(seed) try: about_page = WagtailPage.objects.get(title='Who we are') print('about page exists') except WagtailPage.DoesNotExist: print('Generating an about Page (PrimaryPage)') about_page = PrimaryPageFactory.create(parent=home_page, title='Who we are') reseed(seed) print('Generating child pages for about page') [PrimaryPageFactory.create(parent=about_page) for i in range(5)]
def handle(self, *args, **options): if options['delete']: call_command('flush_models') faker = factory.faker.Faker._get_faker(locale='en-US') # Seed Faker with the provided seed value or a pseudorandom int between 0 and five million if options['seed']: seed = options['seed'] elif settings.RANDOM_SEED is not None: seed = settings.RANDOM_SEED else: seed = random.randint(0, 5000000) print(f'Seeding random numbers with: {seed}') reseed(seed) print('Generating Images') images = [ ImageFactory.create(file__width=1080, file__height=720, file__color=faker.safe_color_name()) for i in range(20) ] social_share_tag, created = Tag.objects.get_or_create( name='social share image') images[0].tags.add(social_share_tag) # Create one PNI product for every image we have in our media folder product_images = [ 'babymonitor.jpg', 'drone.jpg', 'nest.jpg', 'teddy.jpg', 'echo.jpg' ] for image in product_images: image_path = abspath( join(dirname(__file__), f'../../../media/images/placeholders/products/{image}')) create_wagtail_image(image_path, collection_name='pni products') [ app_factory.generate(seed) for app_factory in [ news_factory, highlights_factory, wagtailpages_factory, buyersguide_factory, mozfest_factory ] ] print(self.style.SUCCESS('Done!'))
def generate(seed): reseed(seed) print('Generating Mozfest Homepage') try: home_page = MozfestHomepage.objects.get(title='Mozilla Festival') print('Homepage already exists') except MozfestHomepage.DoesNotExist: print('Generating a Homepage') # If this is a review app, make the root of the mozfest site a child of the main site if is_review_app: site_root = WagtailPage.objects.get(title='Homepage') else: site_root = WagtailPage.objects.get(id=1) home_page = MozfestHomepageFactory.create( parent=site_root, title='Mozilla Festival', slug=None ) reseed(seed) if not is_review_app: print('Creating MozFest Site record in Wagtail') tds = settings.TARGET_DOMAINS if tds and len(tds) > 1: # Assume that tds[0] is the main mofo domain, and tds[1] is the Mozfest domain hostname = tds[1] port = 80 else: # use a localhost domain (must be set in /etc/hosts) hostname = 'mozfest.localhost' port = 8000 WagtailSite.objects.create( hostname=hostname, port=port, root_page=home_page, site_name='Mozilla Festival', is_default_site=False ) print('Generating Mozfest sub-pages') [MozfestPrimaryPageFactory.create( parent=home_page, title=title ) for title in ['Spaces', 'Tickets', 'Team', 'Sponsors']]
def generate(seed): reseed(seed) home_page = get_homepage() try: blog_namespace = WagtailPage.objects.get(title='Blog') print('blog namespace exists') except WagtailPage.DoesNotExist: print('Generating a blog namespace') blog_namespace = BlogIndexPageFactory.create(parent=home_page, title='Blog', header='Blog', show_in_menus=True, live=True) print('Generating blog posts under namespace') title = 'Initial test blog post with fixed title' post = None try: post = BlogPage.objects.get(title=title) except BlogPage.DoesNotExist: post = BlogPageFactory.create(parent=blog_namespace, title=title) add_tags(post) add_category(post) add_authors(post) for i in range(6): title = Faker('sentence', nb_words=6, variable_nb_words=False) post = None try: post = BlogPage.objects.get(title=title) except BlogPage.DoesNotExist: post = BlogPageFactory.create(parent=blog_namespace, title=title) add_tags(post) add_category(post) add_authors(post) for post in BlogPage.objects.all(): post.ensure_related_posts() post.save()
def generate(seed): print('Generating Partner Logos') home_page = get_homepage() reseed(seed) all_images = list(Image.objects.all()) for i in range(3): partner_logo_orderable = PartnerLogos.objects.create( page=home_page, logo=choice(all_images), link=Faker('url').generate(), name=Faker('text', max_nb_chars=30).generate(), ) home_page.partner_logos.add(partner_logo_orderable) home_page.save()
def generate(seed): reseed(seed) home_page = get_homepage() try: blog_namespace = WagtailPage.objects.get(title='blog') print('blog namespace exists') except WagtailPage.DoesNotExist: print('Generating a blog namespace') blog_namespace = MiniSiteNamespaceFactory.create(parent=home_page, title='blog', live=False) try: BlogPage.objects.get(title='post') print('a post page (BlogPage) exists') except BlogPage.DoesNotExist: print('Generating a post page (BlogPage) under namespace') BlogPageFactory.create(parent=blog_namespace, title='post')
def generate(seed): reseed(seed) home_page = get_homepage() try: blog_namespace = WagtailPage.objects.get(title='Blog') print('blog namespace exists') except WagtailPage.DoesNotExist: print('Generating a blog namespace') blog_namespace = BlogIndexPageFactory.create(parent=home_page, title='Blog', header='Blog', live=True) print('Generating Blog Authors') generate_fake_data(BlogAuthorFactory, NUM_BLOG_AUTHORS) print('Generating blog posts under namespace') title = 'Initial test blog post with fixed title' post = None try: post = BlogPage.objects.get(title=title) except BlogPage.DoesNotExist: post = BlogPageFactory.create(parent=blog_namespace, title=title) add_tags(post) add_category(post) add_authors(post) for i in range(6): title = Faker('sentence', nb_words=6, variable_nb_words=False) post = None try: post = BlogPage.objects.get(title=title) except BlogPage.DoesNotExist: post = BlogPageFactory.create(parent=blog_namespace, title=title) add_tags(post) add_category(post) add_authors(post)
def generate(seed): print('Generating Homepage Take Actions') home_page = get_homepage() reseed(seed) all_images = list(Image.objects.all()) all_pages = list(Page.objects.all()) for i in range(4): take_action_orderable = HomepageTakeActionCards.objects.create( page=home_page, image=choice(all_images), text=faker.text(max_nb_chars=255), internal_link=choice(all_pages), ) home_page.take_action_cards.add(take_action_orderable) home_page.save()
def generate(seed): print('Generating Homepage Highlights and News') home_page = get_homepage() reseed(seed) featured_highlights = [HighlightFactory.create() for i in range(6)] featured_news = [NewsFactory.create() for i in range(6)] home_page.featured_highlights = [ HomepageFeaturedHighlightsFactory.build( highlight=featured_highlights[i]) for i in range(6) ] home_page.featured_news = [ HomepageFeaturedNewsFactory.build(news=featured_news[i]) for i in range(6) ] home_page.save()
def generate(seed): home_page = get_homepage() reseed(seed) try: campaign_index_page = WagtailPage.objects.get(title='campaigns') print('campaign index page exists') except WagtailPage.DoesNotExist: print('Generating a campaign index page') campaign_index_page = CampaignIndexPageFactory.create( parent=home_page, title='campaigns', live=True ) reseed(seed) print('Generating Bannered Campaign Pages under namespace') title = 'Initial test Bannered Campaign with fixed title' post = None try: post = BanneredCampaignPage.objects.get(title=title) except BanneredCampaignPage.DoesNotExist: post = BanneredCampaignPageFactory.create(parent=campaign_index_page, title=title) add_tags(post) for i in range(6): title = Faker('sentence', nb_words=6, variable_nb_words=False) post = None try: post = BanneredCampaignPage.objects.get(title=title) except BanneredCampaignPage.DoesNotExist: post = BanneredCampaignPageFactory.create(parent=campaign_index_page, title=title) add_tags(post) for post in BanneredCampaignPage.objects.all(): post.save()
def create_software_product_visual_regression_product(seed, pni_homepage): reseed(seed) SoftwareProductPageFactory.create( # page fields title='Software Percy Product', first_published_at=datetime(2025, 1, 1, tzinfo=timezone.utc), last_published_at=datetime(2025, 1, 1, tzinfo=timezone.utc), parent=pni_homepage, # product fields privacy_ding=True, adult_content=True, uses_wifi=True, uses_bluetooth=True, review_date=date(2025, 1, 1), company='Percy Corp', blurb='This is a general product specifically created for visual regression testing', product_url='http://example.com/general-percy', price=999, worst_case='Visual regression fails', # software product fields )
def generate(seed): print('Generating Homepage Blogs and Highlights') home_page = get_homepage() reseed(seed) NUM_BLOGS = 4 NUM_HIGHLIGHTS = 5 home_page.featured_blogs = [ HomepageFeaturedBlogsFactory.build(blog=BlogPage.objects.all()[i]) for i in range(NUM_BLOGS) ] home_page.featured_highlights = [ HomepageFeaturedHighlightsFactory.build( highlight=HighlightFactory.create()) for i in range(NUM_HIGHLIGHTS) ] home_page.save()
def generate(seed): home_page = get_homepage() reseed(seed) try: campaign_index_page = WagtailPage.objects.get(title='campaigns') print('campaign index page exists') except WagtailPage.DoesNotExist: print('Generating a campaign index page') campaign_index_page = CampaignIndexPageFactory.create( parent=home_page, title='campaigns', live=True) reseed(seed) title = 'YouTube Regrets' try: YoutubeRegretsPage.objects.get(title=title) print('YouTube Regrets page exists') except YoutubeRegretsPage.DoesNotExist: print('Generating YouTube Regrets Page under campaigns namespace') YoutubeRegretsPageFactory.create(parent=campaign_index_page, title=title) reseed(seed)
def generate(seed): home_page = get_homepage() reseed(seed) try: bannered_campaign_namespace = WagtailPage.objects.get( title='campaigns') print('Campaigns namespace exists') except WagtailPage.DoesNotExist: print('Generating campaigns namespace') bannered_campaign_namespace = MiniSiteNamespaceFactory.create( parent=home_page, title='campaigns', live=False) reseed(seed) print('Generating Bannered Campaign Pages under namespace') title = 'Initial test Bannered Campaign with fixed title' post = None try: post = BanneredCampaignPage.objects.get(title=title) except BanneredCampaignPage.DoesNotExist: post = BanneredCampaignPageFactory.create( parent=bannered_campaign_namespace, title=title) add_tags(post) for i in range(6): title = Faker('sentence', nb_words=6, variable_nb_words=False) post = None try: post = BanneredCampaignPage.objects.get(title=title) except BanneredCampaignPage.DoesNotExist: post = BanneredCampaignPageFactory.create( parent=bannered_campaign_namespace, title=title) add_tags(post)
def generate(seed): home_page = get_homepage() reseed(seed) try: initiatives_page = WagtailPage.objects.get(title='initiatives') print('initiatives page exists') except WagtailPage.DoesNotExist: print('Generating an empty Initiatives Page') initiatives_page = InitiativesPageFactory.create(parent=home_page) reseed(seed) print('Generating Opportunity Pages as child pages of an Initiative Page') [OpportunityPageFactory.create(parent=initiatives_page) for i in range(3)] reseed(seed) try: OpportunityPage.objects.get(title='single-page-opportunity') print('single-page OpportunityPage exists') except OpportunityPage.DoesNotExist: print('Generating single-page OpportunityPage') OpportunityPageFactory.create(parent=initiatives_page, title='single-page-opportunity') reseed(seed) try: OpportunityPage.objects.get(title='multi-page-opportunity') print('multi-page OpportunityPage exists') except OpportunityPage.DoesNotExist: print('Generating multi-page OpportunityPage') multi_page_opportunity = OpportunityPageFactory( parent=initiatives_page, title='multi-page-opportunity') [ OpportunityPageFactory(parent=multi_page_opportunity) for k in range(3) ]
def generate(seed): home_page = get_homepage() reseed(seed) try: bannered_campaign_namespace = WagtailPage.objects.get( title='campaigns') print('Campaigns namespace exists') except WagtailPage.DoesNotExist: print('Generating campaigns namespace') bannered_campaign_namespace = MiniSiteNamespaceFactory.create( parent=home_page, title='campaigns', live=False) reseed(seed) print('Generating Bannered Campaign Pages under namespace') BanneredCampaignPageFactory.create(parent=bannered_campaign_namespace, title="Test Bannered Campaign") reseed(seed)
def generate(seed): reseed(seed) print('Generating Highlights') generate_fake_data(HighlightFactory, 10)