|
1 | 1 | import os |
| 2 | +import re |
2 | 3 | import time |
3 | 4 | import webbrowser |
4 | 5 | from typing import List, Optional, Dict |
5 | 6 | import keyring |
6 | 7 |
|
7 | 8 | import pydantic |
8 | 9 | import rich |
9 | | -from rich.prompt import Confirm |
| 10 | +from rich.prompt import Confirm, Prompt |
10 | 11 |
|
11 | 12 | from . import connect_to_table, diff_tables, Algorithm |
12 | 13 | from .cloud import DatafoldAPI, TCloudApiDataDiff, TCloudApiOrgMeta, get_or_create_data_source |
13 | 14 | from .dbt_parser import DbtParser, PROJECT_FILE |
14 | 15 | from .tracking import ( |
| 16 | + bool_ask_for_email, |
| 17 | + create_email_signup_event_json, |
15 | 18 | set_entrypoint_name, |
16 | 19 | set_dbt_user_id, |
17 | 20 | set_dbt_version, |
@@ -63,9 +66,7 @@ def dbt_diff( |
63 | 66 | config_prod_schema = datadiff_variables.get("prod_schema") |
64 | 67 | config_prod_custom_schema = datadiff_variables.get("prod_custom_schema") |
65 | 68 | datasource_id = datadiff_variables.get("datasource_id") |
66 | | - set_dbt_user_id(dbt_parser.dbt_user_id) |
67 | | - set_dbt_version(dbt_parser.dbt_version) |
68 | | - set_dbt_project_id(dbt_parser.dbt_project_id) |
| 69 | + _initialize_events(dbt_parser.dbt_user_id, dbt_parser.dbt_version, dbt_parser.dbt_project_id) |
69 | 70 |
|
70 | 71 | if datadiff_variables.get("custom_schemas") is not None: |
71 | 72 | logger.warning( |
@@ -389,3 +390,34 @@ def _cloud_diff(diff_vars: TDiffVars, datasource_id: int, api: DatafoldAPI, org_ |
389 | 390 |
|
390 | 391 | def _diff_output_base(dev_path: str, prod_path: str) -> str: |
391 | 392 | return f"\n[green]{prod_path} <> {dev_path}[/] \n" |
| 393 | + |
| 394 | + |
| 395 | +def _initialize_events(dbt_user_id: Optional[str], dbt_version: Optional[str], dbt_project_id: Optional[str]) -> None: |
| 396 | + set_dbt_user_id(dbt_user_id) |
| 397 | + set_dbt_version(dbt_version) |
| 398 | + set_dbt_project_id(dbt_project_id) |
| 399 | + _email_signup() |
| 400 | + |
| 401 | + |
| 402 | +def _email_signup() -> None: |
| 403 | + email_regex = r'^[\w\.\+-]+@[\w\.-]+\.\w+$' |
| 404 | + prompt = "\nWould you like to be notified when a new data-diff version is available?\n\nEnter email or leave blank to opt out (we'll only ask once).\n" |
| 405 | + |
| 406 | + if bool_ask_for_email(): |
| 407 | + while True: |
| 408 | + email_input = Prompt.ask( |
| 409 | + prompt=prompt, |
| 410 | + default="", |
| 411 | + show_default=False, |
| 412 | + ) |
| 413 | + email = email_input.strip() |
| 414 | + |
| 415 | + if email == "" or re.match(email_regex, email): |
| 416 | + break |
| 417 | + |
| 418 | + prompt = "" |
| 419 | + rich.print("[red]Invalid email. Please enter a valid email or leave it blank to opt out.[/]") |
| 420 | + |
| 421 | + if email: |
| 422 | + event_json = create_email_signup_event_json(email) |
| 423 | + run_as_daemon(send_event_json, event_json) |
0 commit comments