def generate()

in sql_generators/active_users_aggregates_v3/__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 template
    desktop_schema_template = "desktop_schema.yaml"
    mobile_schema_template = "mobile_schema.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_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,
        )

        # generate metadata file
        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_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_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,
            )
        elif browser.name != "firefox_desktop":
            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,
            )

    write_sql(
        output_dir=output_dir,
        full_table_id=f"{target_project}.{DATASET_FOR_UNIONED_VIEWS}.{BASE_NAME}_mobile",
        basename="view.sql",
        sql=reformat(
            mobile_view_template.render(
                project_id=target_project,
                dataset_id=DATASET_FOR_UNIONED_VIEWS,
                fenix_dataset=Browsers("Fenix").name,
                focus_ios_dataset=Browsers("Focus iOS").name,
                focus_android_dataset=Browsers("Focus Android").name,
                firefox_ios_dataset=Browsers("Firefox iOS").name,
                klar_ios_dataset=Browsers("Klar iOS").name,
                klar_android_dataset=Browsers("Klar Android").name,
            )
        ),
        skip_existing=False,
    )