def generate()

in sql_generators/active_users_aggregates_v4/__init__.py [0:0]


def generate(target_project, output_dir, use_cloud_function):
    """Generate per-app queries, views and metadata for active users and search counts aggregates.

    The parent folders will be created if not existing and existing files will be overwritten.
    """
    env = Environment(loader=FileSystemLoader(str(THIS_PATH / "templates")))
    output_dir = Path(output_dir) / target_project
    # query templates
    mobile_query_template = env.get_template("mobile_query.sql")
    desktop_query_template = env.get_template("desktop_query.sql")
    focus_android_query_template = env.get_template("focus_android_query.sql")
    # view templates
    focus_android_view_template = env.get_template("focus_android_view.sql")
    mobile_view_template = env.get_template("mobile_view.sql")
    view_template = env.get_template("view.sql")
    # metadata template
    metadata_template = "metadata.yaml"
    # schema templates
    desktop_schema_template = "desktop_schema.yaml"
    mobile_schema_template = "mobile_schema.yaml"
    # backfill template
    desktop_backfill_template = "desktop_backfill.yaml"
    # checks templates
    desktop_checks_template = env.get_template("desktop_checks.sql")
    fenix_checks_template = env.get_template("fenix_checks.sql")
    mobile_checks_template = env.get_template("mobile_checks.sql")

    for browser in Browsers:
        if browser.name == "firefox_desktop":
            query_sql = reformat(
                desktop_query_template.render(
                    app_value=browser.value,
                )
            )
            schema_template = desktop_schema_template
        elif browser.name == "focus_android":
            query_sql = reformat(
                focus_android_query_template.render(
                    project_id=target_project,
                    app_name=browser.name,
                )
            )
            schema_template = mobile_schema_template
        else:
            query_sql = reformat(
                mobile_query_template.render(
                    project_id=target_project,
                    app_value=browser.value,
                    app_name=browser.name,
                )
            )
            schema_template = mobile_schema_template

        # create checks_sql
        if browser.name == "firefox_desktop":
            checks_sql = desktop_checks_template.render(
                project_id=target_project,
                app_value=browser.value,
                app_name=browser.name,
            )
        elif browser.name == "fenix":
            checks_sql = fenix_checks_template.render(
                project_id=target_project,
                app_value=browser.value,
                app_name=browser.name,
            )
        elif browser.name in CHECKS_TEMPLATE_CHANNELS.keys():
            checks_sql = mobile_checks_template.render(
                project_id=target_project,
                app_value=browser.value,
                app_name=browser.name,
                channels=CHECKS_TEMPLATE_CHANNELS[browser.name],
            )


        # Write query SQL files.
        write_sql(
            output_dir=output_dir,
            full_table_id=f"{target_project}.{browser.name}_derived.{TABLE_NAME}",
            basename="query.sql",
            sql=query_sql,
            skip_existing=False,
        )

        # Write metadata YAML files.
        write_sql(
            output_dir=output_dir,
            full_table_id=f"{target_project}.{browser.name}_derived.{TABLE_NAME}",
            basename="metadata.yaml",
            sql=render(
                    metadata_template,
                    template_folder=THIS_PATH / "templates",
                    app_value=browser.value,
                    app_name=browser.name,
                    table_name=TABLE_NAME,
                    format=False,
                ),
            skip_existing=False,
        )

        # Write schema YAML files.
        write_sql(
            output_dir=output_dir,
            full_table_id=f"{target_project}.{browser.name}_derived.{TABLE_NAME}",
            basename="schema.yaml",
            sql=render(
                schema_template,
                template_folder=THIS_PATH / "templates",
                format=False,
            ),
            skip_existing=False,
        )

        # Write backfill YAML files.
        if browser.name == "firefox_desktop":
            write_sql(
                output_dir=output_dir,
                full_table_id=f"{target_project}.{browser.name}_derived.{TABLE_NAME}",
                basename="backfill.yaml",
                sql=render(
                    desktop_backfill_template,
                    template_folder=THIS_PATH / "templates",
                    format=False,
                ),
                skip_existing=False,
            )

        # Write checks sql files.
        write_sql(
            output_dir=output_dir,
            full_table_id=f"{target_project}.{browser.name}_derived.{TABLE_NAME}",
            basename="checks.sql",
            sql=checks_sql,
            skip_existing=False,
        )

        if browser.name == "focus_android":
            write_sql(
                output_dir=output_dir,
                full_table_id=f"{target_project}.{browser.name}.{BASE_NAME}",
                basename="view.sql",
                sql=reformat(
                    focus_android_view_template.render(
                        project_id=target_project,
                        app_name=browser.name,
                        table_name=TABLE_NAME,
                    )
                ),
                skip_existing=False,
            )
        else:
            write_sql(
                output_dir=output_dir,
                full_table_id=f"{target_project}.{browser.name}.{BASE_NAME}",
                basename="view.sql",
                sql=reformat(
                    view_template.render(
                        project_id=target_project,
                        app_name=browser.name,
                        table_name=TABLE_NAME,
                    )
                ),
                skip_existing=False,
            )