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,
)