bigeye-cli 0.3.62__tar.gz → 0.3.64__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. bigeye_cli-0.3.62/bigeye_cli/CLI_DOCS.md → bigeye_cli-0.3.64/PKG-INFO +84 -16
  2. bigeye_cli-0.3.62/PKG-INFO → bigeye_cli-0.3.64/bigeye_cli/CLI_DOCS.md +63 -37
  3. {bigeye_cli-0.3.62 → bigeye_cli-0.3.64}/bigeye_cli/bigconfig/bigconfig_commands.py +9 -3
  4. {bigeye_cli-0.3.62 → bigeye_cli-0.3.64}/bigeye_cli/configure/configure_commands.py +81 -57
  5. {bigeye_cli-0.3.62 → bigeye_cli-0.3.64}/bigeye_cli/functions.py +65 -4
  6. {bigeye_cli-0.3.62 → bigeye_cli-0.3.64}/bigeye_cli/issues/issue_commands.py +3 -3
  7. {bigeye_cli-0.3.62 → bigeye_cli-0.3.64}/pyproject.toml +2 -2
  8. {bigeye_cli-0.3.62 → bigeye_cli-0.3.64}/LICENSE +0 -0
  9. {bigeye_cli-0.3.62 → bigeye_cli-0.3.64}/bigeye_cli/__init__.py +0 -0
  10. {bigeye_cli-0.3.62 → bigeye_cli-0.3.64}/bigeye_cli/__main__.py +0 -0
  11. {bigeye_cli-0.3.62 → bigeye_cli-0.3.64}/bigeye_cli/__version__.py +0 -0
  12. {bigeye_cli-0.3.62 → bigeye_cli-0.3.64}/bigeye_cli/bigconfig/__init__.py +0 -0
  13. {bigeye_cli-0.3.62 → bigeye_cli-0.3.64}/bigeye_cli/bigconfig/bigconfig_options.py +0 -0
  14. {bigeye_cli-0.3.62 → bigeye_cli-0.3.64}/bigeye_cli/catalog/__init__.py +0 -0
  15. {bigeye_cli-0.3.62 → bigeye_cli-0.3.64}/bigeye_cli/catalog/catalog_commands.py +0 -0
  16. {bigeye_cli-0.3.62 → bigeye_cli-0.3.64}/bigeye_cli/collections/__init__.py +0 -0
  17. {bigeye_cli-0.3.62 → bigeye_cli-0.3.64}/bigeye_cli/collections/collection_commands.py +0 -0
  18. {bigeye_cli-0.3.62 → bigeye_cli-0.3.64}/bigeye_cli/configure/__init__.py +0 -0
  19. {bigeye_cli-0.3.62 → bigeye_cli-0.3.64}/bigeye_cli/deltas/__init__.py +0 -0
  20. {bigeye_cli-0.3.62 → bigeye_cli-0.3.64}/bigeye_cli/deltas/deltas_commands.py +0 -0
  21. {bigeye_cli-0.3.62 → bigeye_cli-0.3.64}/bigeye_cli/enums.py +0 -0
  22. {bigeye_cli-0.3.62 → bigeye_cli-0.3.64}/bigeye_cli/exceptions/__init__.py +0 -0
  23. {bigeye_cli-0.3.62 → bigeye_cli-0.3.64}/bigeye_cli/exceptions/exceptions.py +0 -0
  24. {bigeye_cli-0.3.62 → bigeye_cli-0.3.64}/bigeye_cli/global_options.py +0 -0
  25. {bigeye_cli-0.3.62 → bigeye_cli-0.3.64}/bigeye_cli/issues/__init__.py +0 -0
  26. {bigeye_cli-0.3.62 → bigeye_cli-0.3.64}/bigeye_cli/lineage/__init__.py +0 -0
  27. {bigeye_cli-0.3.62 → bigeye_cli-0.3.64}/bigeye_cli/lineage/lineage_commands.py +0 -0
  28. {bigeye_cli-0.3.62 → bigeye_cli-0.3.64}/bigeye_cli/metric/__init__.py +0 -0
  29. {bigeye_cli-0.3.62 → bigeye_cli-0.3.64}/bigeye_cli/metric/metric_commands.py +0 -0
  30. {bigeye_cli-0.3.62 → bigeye_cli-0.3.64}/bigeye_cli/model/__init__.py +0 -0
  31. {bigeye_cli-0.3.62 → bigeye_cli-0.3.64}/bigeye_cli/model/cicd_conf.py +0 -0
  32. {bigeye_cli-0.3.62 → bigeye_cli-0.3.64}/bigeye_cli/model/github_report.py +0 -0
  33. {bigeye_cli-0.3.62 → bigeye_cli-0.3.64}/bigeye_cli/model/vendor_report.py +0 -0
  34. {bigeye_cli-0.3.62 → bigeye_cli-0.3.64}/bigeye_cli/workspace/__init__.py +0 -0
  35. {bigeye_cli-0.3.62 → bigeye_cli-0.3.64}/bigeye_cli/workspace/workspace_commands.py +0 -0
@@ -1,5 +1,25 @@
1
+ Metadata-Version: 2.1
2
+ Name: bigeye-cli
3
+ Version: 0.3.64
4
+ Summary: Bigeye CLI offers developer tools for maintaining your developer workspace.
5
+ Home-page: https://docs.bigeye.com/docs
6
+ License: Proprietary
7
+ Author: Bigeye
8
+ Author-email: support@bigeye.com
9
+ Requires-Python: >=3.9.0,<4.0.0
10
+ Classifier: License :: Other/Proprietary License
11
+ Classifier: Programming Language :: Python :: 3
12
+ Classifier: Programming Language :: Python :: 3.9
13
+ Classifier: Programming Language :: Python :: 3.10
14
+ Classifier: Programming Language :: Python :: 3.11
15
+ Requires-Dist: PyGithub (>=1.57,<2.0)
16
+ Requires-Dist: bigeye-sdk (>=0.4.84,<0.5.0)
17
+ Requires-Dist: click (>=8.0.4,<9.0.0)
18
+ Requires-Dist: rich (>=12.4.4,<13.0.0)
19
+ Description-Content-Type: text/markdown
20
+
1
21
  # **Bigeye CLI**
2
- Version: 0.3.55
22
+ Version: 0.3.64
3
23
  ## Installation
4
24
 
5
25
  **Setting up your local/build environment**
@@ -171,9 +191,7 @@ password = fakepassword1234
171
191
 
172
192
  **Note:** Most use cases will only require you to have a single `DEFAULT` credential that all workspaces can utilize. Running the `bigeye configure -w <workspace-name>` command for a non-default workspace will prompt you to inherit the credentials from default or create a new set of credentials. A workspace credential is only required if the `use_default_credential` setting is set to False in the configuration of the corresponding workspace.
173
193
 
174
- # CLI Documentation
175
-
176
- # `bigeye configure`
194
+ # CLI Documentation# `bigeye configure`
177
195
 
178
196
  Configuration Commands for Bigeye CLI
179
197
 
@@ -214,7 +232,6 @@ $ bigeye configure get [OPTIONS] [SETTING_KEY]
214
232
 
215
233
  **Options**:
216
234
 
217
- * `-b, --bigeye_conf TEXT`: Bigeye Credential File Path [env var: BIGEYE_API_CRED_FILE]
218
235
  * `-c, --config_file TEXT`: Bigeye CLI Configuration File Path [env var: BIGEYE_API_CONFIG_FILE]
219
236
  * `-w, --workspace TEXT`: Name of the workspace configuration. [env var: BIGEYE_WORKSPACE; default: DEFAULT]
220
237
  * `--help`: Show this message and exit.
@@ -233,7 +250,6 @@ $ bigeye configure list [OPTIONS]
233
250
 
234
251
  * `-b, --bigeye_conf TEXT`: Bigeye Credential File Path [env var: BIGEYE_API_CRED_FILE]
235
252
  * `-c, --config_file TEXT`: Bigeye CLI Configuration File Path [env var: BIGEYE_API_CONFIG_FILE]
236
- * `-w, --workspace TEXT`: Name of the workspace configuration. [env var: BIGEYE_WORKSPACE; default: DEFAULT]
237
253
  * `--help`: Show this message and exit.
238
254
 
239
255
  ## `bigeye configure set`
@@ -253,7 +269,6 @@ $ bigeye configure set [OPTIONS] [SETTING_KEY] [SETTING_VALUE]
253
269
 
254
270
  **Options**:
255
271
 
256
- * `-b, --bigeye_conf TEXT`: Bigeye Credential File Path [env var: BIGEYE_API_CRED_FILE]
257
272
  * `-c, --config_file TEXT`: Bigeye CLI Configuration File Path [env var: BIGEYE_API_CONFIG_FILE]
258
273
  * `-w, --workspace TEXT`: Name of the workspace configuration. [env var: BIGEYE_WORKSPACE; default: DEFAULT]
259
274
  * `--help`: Show this message and exit.
@@ -287,6 +302,7 @@ $ bigeye workspace [OPTIONS] COMMAND [ARGS]...
287
302
  * `schedule-all-metrics`: Schedule all metrics in a workspace.
288
303
  * `unschedule-all-metrics`: Unschedule all metrics in a workspace.
289
304
  * `upsert-group`: Create or update a group.
305
+ * `upsert-named-schedule`: Create a named, cron based schedule
290
306
  * `upsert-workspace`: Create or update a workspace.
291
307
 
292
308
  ## `bigeye workspace create-named-schedule`
@@ -513,6 +529,25 @@ $ bigeye workspace upsert-group [OPTIONS]
513
529
  * `-id, --group_id INTEGER`: Group ID.
514
530
  * `--help`: Show this message and exit.
515
531
 
532
+ ## `bigeye workspace upsert-named-schedule`
533
+
534
+ Create a named, cron based schedule
535
+
536
+ **Usage**:
537
+
538
+ ```console
539
+ $ bigeye workspace upsert-named-schedule [OPTIONS]
540
+ ```
541
+
542
+ **Options**:
543
+
544
+ * `-b, --bigeye_conf TEXT`: Bigeye Credential File Path [env var: BIGEYE_API_CRED_FILE]
545
+ * `-c, --config_file TEXT`: Bigeye CLI Configuration File Path [env var: BIGEYE_API_CONFIG_FILE]
546
+ * `-w, --workspace TEXT`: Name of the workspace configuration. [env var: BIGEYE_WORKSPACE; default: DEFAULT]
547
+ * `-sn, --name TEXT`: The user defined name of the schedule [required]
548
+ * `-c, --cron TEXT`: The cron string to define the schedule [required]
549
+ * `--help`: Show this message and exit.
550
+
516
551
  ## `bigeye workspace upsert-workspace`
517
552
 
518
553
  Create or update a workspace.
@@ -624,6 +659,7 @@ $ bigeye bigconfig plan [OPTIONS]
624
659
  * `-nq, --no_queue`: Don't submit to queue: True or False.
625
660
  * `-r, --recursive`: Search all input directories recursively.
626
661
  * `-strict, --strict_mode`: API errors cause an exception if True. (Validation errors still cause an exception)
662
+ * `-cicd, --cicd_report`: Add the report to a pull request. (Github only)
627
663
  * `--help`: Show this message and exit.
628
664
 
629
665
  # `bigeye catalog`
@@ -663,6 +699,7 @@ $ bigeye catalog [OPTIONS] COMMAND [ARGS]...
663
699
  * `run-metrics`: Runs metrics by warehouse id, schema...
664
700
  * `schedule-all-metrics`: Updates schedule for all metrics in a...
665
701
  * `set-metric-time`: Sets metric times from a list of possible...
702
+ * `track-schema-changes`: Track schema changes for sources on demand...
666
703
  * `unschedule-all-metrics`: Unschedule all metrics by warehouse,...
667
704
  * `unset-metric-time`: Unsets metric times for whole warehouse or...
668
705
  * `upsert-template`: Create or update a template for a source.
@@ -750,7 +787,7 @@ $ bigeye catalog delete-metrics [OPTIONS]
750
787
  * `-wid, --warehouse_id INTEGER`: Warehouse ID
751
788
  * `-sn, --schema_name TEXT`: List of Schema Names. E.g. -sn schema_1 -sn schema_2.
752
789
  * `-tid, --table_id INTEGER`: Table IDs. E.g. -tid 123 -tid 124
753
- * `-m, --metric_type TEXT`: Delete by name of the metric type.UNDEFINED_PREDEFINED_METRIC_NAME, PERCENT_NULL, COUNT_NULL, PERCENT_EMPTY_STRING, COUNT_EMPTY_STRING, PERCENT_UNIQUE, PERCENT_VALUE_IN_LIST, AVERAGE, MIN, MAX, SUM, COUNT_ROWS, COUNT_DISTINCT, HOURS_SINCE_MAX_DATE, HOURS_SINCE_MAX_TIMESTAMP, COUNT_TRUE, PERCENT_TRUE, COUNT_FALSE, PERCENT_FALSE, COUNT_USA_PHONE, PERCENT_USA_PHONE, COUNT_USA_ZIP_CODE, PERCENT_USA_ZIP_CODE, PERCENT_UUID, COUNT_TIMESTAMP_STRING, PERCENT_TIMESTAMP_STRING, COUNT_DUPLICATES, COUNT_USA_STATE_CODE, PERCENT_USA_STATE_CODE, VARIANCE, SKEW, KURTOSIS, GEOMETRIC_MEAN, HARMONIC_MEAN, COUNT_UUID, COUNT_CUSIP, PERCENT_CUSIP, COUNT_SEDOL, PERCENT_SEDOL, COUNT_ISIN, PERCENT_ISIN, COUNT_LEI, PERCENT_LEI, COUNT_FIGI, PERCENT_FIGI, COUNT_PERM_ID, PERCENT_PERM_ID, COUNT_NAN, PERCENT_NAN, COUNT_LONGITUDE, PERCENT_LONGITUDE, COUNT_LATITUDE, PERCENT_LATITUDE, COUNT_NOT_IN_FUTURE, PERCENT_NOT_IN_FUTURE, COUNT_DATE_NOT_IN_FUTURE, PERCENT_DATE_NOT_IN_FUTURE, MEDIAN, PERCENTILE, COUNT_NOT_NULL, STRING_LENGTH_AVERAGE, STRING_LENGTH_MIN, STRING_LENGTH_MAX, COUNT_SSN, PERCENT_SSN, COUNT_EMAIL, PERCENT_EMAIL, ROWS_INSERTED, HOURS_SINCE_LAST_LOAD, COUNT_READ_QUERIES, PERCENT_NOT_NULL, FRESHNESS, VOLUME, FRESHNESS_DATA, VOLUME_DATA
790
+ * `-m, --metric_type TEXT`: Delete by name of the metric type.UNDEFINED_PREDEFINED_METRIC_NAME, PERCENT_NULL, COUNT_NULL, PERCENT_EMPTY_STRING, COUNT_EMPTY_STRING, PERCENT_UNIQUE, PERCENT_VALUE_IN_LIST, AVERAGE, MIN, MAX, SUM, COUNT_ROWS, COUNT_DISTINCT, HOURS_SINCE_MAX_DATE, HOURS_SINCE_MAX_TIMESTAMP, COUNT_TRUE, PERCENT_TRUE, COUNT_FALSE, PERCENT_FALSE, COUNT_USA_PHONE, PERCENT_USA_PHONE, COUNT_USA_ZIP_CODE, PERCENT_USA_ZIP_CODE, PERCENT_UUID, COUNT_TIMESTAMP_STRING, PERCENT_TIMESTAMP_STRING, COUNT_DUPLICATES, COUNT_USA_STATE_CODE, PERCENT_USA_STATE_CODE, VARIANCE, SKEW, KURTOSIS, GEOMETRIC_MEAN, HARMONIC_MEAN, COUNT_UUID, COUNT_CUSIP, PERCENT_CUSIP, COUNT_SEDOL, PERCENT_SEDOL, COUNT_ISIN, PERCENT_ISIN, COUNT_LEI, PERCENT_LEI, COUNT_FIGI, PERCENT_FIGI, COUNT_PERM_ID, PERCENT_PERM_ID, COUNT_NAN, PERCENT_NAN, COUNT_LONGITUDE, PERCENT_LONGITUDE, COUNT_LATITUDE, PERCENT_LATITUDE, COUNT_NOT_IN_FUTURE, PERCENT_NOT_IN_FUTURE, COUNT_DATE_NOT_IN_FUTURE, PERCENT_DATE_NOT_IN_FUTURE, MEDIAN, PERCENTILE, COUNT_NOT_NULL, STRING_LENGTH_AVERAGE, STRING_LENGTH_MIN, STRING_LENGTH_MAX, COUNT_SSN, PERCENT_SSN, COUNT_EMAIL, PERCENT_EMAIL, ROWS_INSERTED, HOURS_SINCE_LAST_LOAD, COUNT_READ_QUERIES, PERCENT_NOT_NULL, FRESHNESS, VOLUME, FRESHNESS_DATA, VOLUME_DATA, COUNT_VALUE_IN_LIST
754
791
  * `--help`: Show this message and exit.
755
792
 
756
793
  ## `bigeye catalog delete-source`
@@ -1073,6 +1110,32 @@ $ bigeye catalog set-metric-time [OPTIONS]
1073
1110
  * `-r, --replace`: replace metric times if already present on tables? Default is false.
1074
1111
  * `--help`: Show this message and exit.
1075
1112
 
1113
+ ## `bigeye catalog track-schema-changes`
1114
+
1115
+ Track schema changes for sources on demand or every n hour(s) and notify specified channels.
1116
+ Environment variables SMTP_USER and SMTP_PASSWORD MUST be set if using email notification.
1117
+
1118
+ **Usage**:
1119
+
1120
+ ```console
1121
+ $ bigeye catalog track-schema-changes [OPTIONS]
1122
+ ```
1123
+
1124
+ **Options**:
1125
+
1126
+ * `-b, --bigeye_conf TEXT`: Bigeye Credential File Path [env var: BIGEYE_API_CRED_FILE]
1127
+ * `-c, --config_file TEXT`: Bigeye CLI Configuration File Path [env var: BIGEYE_API_CONFIG_FILE]
1128
+ * `-w, --workspace TEXT`: Name of the workspace configuration. [env var: BIGEYE_WORKSPACE; default: DEFAULT]
1129
+ * `-src, --source TEXT`: A list of source names to track. (None will track changes from all sources)
1130
+ * `-s, --since TEXT`: Track schema changes from this date. (Formatted as yyyy-MM-dd) [default: 1970-01-01]
1131
+ * `-f, --frequency INTEGER`: Every n hours to check for schema changes. (None will only run the check once) [default: 0]
1132
+ * `-ct, --change_type [CREATED|DELETED|TYPE_CHANGED]`: The types of changes to track; i.e additions, changes, deletions. (None will track all types) [default: DELETED, CREATED, TYPE_CHANGED]
1133
+ * `-nc, --channel TEXT`: A list of notification channels; e.g. -nc email@mydomain.com -nc #slack_channel -nc https://www.webhook.com
1134
+ * `-smtp, --server TEXT`: The server to send emails.
1135
+ * `-p, --port INTEGER`: The server port to send emails. [default: 587]
1136
+ * `-t, --token TEXT`: The token to utilize the Slack web client. (Will attempt to use environment variable SLACK_BOT_TOKEN, if not set)
1137
+ * `--help`: Show this message and exit.
1138
+
1076
1139
  ## `bigeye catalog unschedule-all-metrics`
1077
1140
 
1078
1141
  Unschedule all metrics by warehouse, schema or tables.
@@ -1127,12 +1190,13 @@ $ bigeye catalog upsert-template [OPTIONS]
1127
1190
  * `-b, --bigeye_conf TEXT`: Bigeye Credential File Path [env var: BIGEYE_API_CRED_FILE]
1128
1191
  * `-c, --config_file TEXT`: Bigeye CLI Configuration File Path [env var: BIGEYE_API_CONFIG_FILE]
1129
1192
  * `-w, --workspace TEXT`: Name of the workspace configuration. [env var: BIGEYE_WORKSPACE; default: DEFAULT]
1130
- * `-sn, --source_name TEXT`: The name of the source where the template will be defined [required]
1131
- * `-tn, --name TEXT`: The user defined name of the template [required]
1132
- * `-tb, --body TEXT`: The string to define the template [required]
1133
- * `-rt, --returns [BOOLEAN|NUMERIC]`: The data type returned by the template; i.e. NUMERIC, BOOLEAN [required]
1134
- * `-p, --params TEXT`: A list of key/value pairs for parameters; ex. -p column=COLUMN_REFERENCE -p table=STRING [required]
1193
+ * `-sn, --source_name TEXT`: The name of the source where the template will be defined
1194
+ * `-tn, --name TEXT`: The user defined name of the template
1195
+ * `-tb, --body TEXT`: The string to define the template
1196
+ * `-rt, --returns [BOOLEAN|NUMERIC]`: The data type returned by the template; i.e. NUMERIC, BOOLEAN
1197
+ * `-p, --params TEXT`: A list of key/value pairs for parameters; ex. -p column=COLUMN_REFERENCE -p table=STRING
1135
1198
  * `-id, --template_id INTEGER`: The template ID (Only required when updating a template). [default: 0]
1199
+ * `-tf, --template_file TEXT`: A file containing a template definition.
1136
1200
  * `--help`: Show this message and exit.
1137
1201
 
1138
1202
  ## `bigeye catalog upsert-virtual-table`
@@ -1201,7 +1265,7 @@ $ bigeye metric dbt-tests-to-metrics [OPTIONS]
1201
1265
  * `-sf, --schema_file TEXT`: The path to the dbt schema file [required]
1202
1266
  * `-auto, --use_auto`: Use autothresholds over default constant
1203
1267
  * `-bigconfig, --to_bigconfig`: Convert the dbt tests to bigconfig.
1204
- * `-op, --output_path TEXT`: Output path where bigconfig file will be saved. If no output path is defined then current working directory will be used. Requires --to_bigconfig to be true. [default: /Users/cmacdonald/Projects/semantic-data-platform/bigeye-integrations/bigeye-cli]
1268
+ * `-op, --output_path TEXT`: Output path where bigconfig file will be saved. If no output path is defined then current working directory will be used. Requires --to_bigconfig to be true. [default: /home/runner/work/semantic-data-platform/semantic-data-platform/bigeye-integrations/bigeye-cli]
1205
1269
  * `--help`: Show this message and exit.
1206
1270
 
1207
1271
  ## `bigeye metric get-info`
@@ -1490,7 +1554,7 @@ $ bigeye deltas suggest-deltas [OPTIONS]
1490
1554
  * `-w, --workspace TEXT`: Name of the workspace configuration. [env var: BIGEYE_WORKSPACE; default: DEFAULT]
1491
1555
  * `-source, --source_selector TEXT`: The pattern of tables in the source to select. Wildcard (*) indicates all tables or all schemas, e.g. source_1.*.* would be all schemas in source_1. [required]
1492
1556
  * `-target, --target_selector TEXT`: The pattern of tables in the target to select. Wildcard (*) indicates all tables or all schemas, e.g. source_2.*.* would be all schemas in source_2. [required]
1493
- * `-mt, --match_type [strict|fuzzy]`: How to match tables between the source and target destinations. Strict will only create relations if table names match exactly, Fuzzy will attempt to create relations using a fuzzy match. [default: MatchType.STRICT]
1557
+ * `-mt, --match_type [strict|fuzzy]`: How to match tables between the source and target destinations. Strict will only create relations if table names match exactly, Fuzzy will attempt to create relations using a fuzzy match. [default: strict]
1494
1558
  * `-op, --output_path TEXT`: File to write the delta configuration. [required]
1495
1559
  * `--help`: Show this message and exit.
1496
1560
 
@@ -1699,6 +1763,7 @@ $ bigeye lineage create-relation [OPTIONS]
1699
1763
  * `-w, --workspace TEXT`: Name of the workspace configuration. [env var: BIGEYE_WORKSPACE; default: DEFAULT]
1700
1764
  * `-up, --upstream TEXT`: The fully qualified table name [required]
1701
1765
  * `-down, --downstream TEXT`: The fully qualified table name [required]
1766
+ * `-co, --column_overrides TEXT`: The list of column overrides, formatted as upstream_column_name:downstream_column_name
1702
1767
  * `--help`: Show this message and exit.
1703
1768
 
1704
1769
  ## `bigeye lineage delete-node`
@@ -1757,6 +1822,9 @@ $ bigeye lineage infer-relations [OPTIONS]
1757
1822
  * `-w, --workspace TEXT`: Name of the workspace configuration. [env var: BIGEYE_WORKSPACE; default: DEFAULT]
1758
1823
  * `-upstream, --upstream_selector TEXT`: The pattern of tables in the upstream source to select. Wildcard (*) indicates all tables or all schemas, e.g. source_1.*.* would be all schemas in source_1.
1759
1824
  * `-downstream, --downstream_selector TEXT`: The pattern of tables in the downstream source to select. Wildcard (*) indicates all tables or all schemas, e.g. source_2.*.* would be all schemas in source_2.
1760
- * `-mt, --match_type [strict|fuzzy]`: How to match tables between the source and target destinations. Strict will only create relations if table names match exactly, Fuzzy will attempt to create relations using a fuzzy match. [default: MatchType.STRICT]
1825
+ * `-mt, --match_type [strict|fuzzy]`: How to match tables between the source and target destinations. Strict will only create relations if table names match exactly, Fuzzy will attempt to create relations using a fuzzy match. [default: strict]
1826
+ * `-lc, --lineage_conf TEXT`: The path to a Simple Lineage configuration file.
1827
+ * `-purge, --purge_lineage`: Purge all lineage edges.
1761
1828
  * `--help`: Show this message and exit.
1762
1829
 
1830
+
@@ -1,25 +1,5 @@
1
- Metadata-Version: 2.1
2
- Name: bigeye-cli
3
- Version: 0.3.62
4
- Summary: Bigeye CLI offers developer tools for maintaining your developer workspace.
5
- Home-page: https://docs.bigeye.com/docs
6
- License: Proprietary
7
- Author: Bigeye
8
- Author-email: support@bigeye.com
9
- Requires-Python: >=3.9.0,<4.0.0
10
- Classifier: License :: Other/Proprietary License
11
- Classifier: Programming Language :: Python :: 3
12
- Classifier: Programming Language :: Python :: 3.9
13
- Classifier: Programming Language :: Python :: 3.10
14
- Classifier: Programming Language :: Python :: 3.11
15
- Requires-Dist: PyGithub (>=1.57,<2.0)
16
- Requires-Dist: bigeye-sdk (>=0.4.83,<0.5.0)
17
- Requires-Dist: click (>=8.0.4,<9.0.0)
18
- Requires-Dist: rich (>=12.4.4,<13.0.0)
19
- Description-Content-Type: text/markdown
20
-
21
1
  # **Bigeye CLI**
22
- Version: 0.3.55
2
+ Version: 0.3.64
23
3
  ## Installation
24
4
 
25
5
  **Setting up your local/build environment**
@@ -191,9 +171,7 @@ password = fakepassword1234
191
171
 
192
172
  **Note:** Most use cases will only require you to have a single `DEFAULT` credential that all workspaces can utilize. Running the `bigeye configure -w <workspace-name>` command for a non-default workspace will prompt you to inherit the credentials from default or create a new set of credentials. A workspace credential is only required if the `use_default_credential` setting is set to False in the configuration of the corresponding workspace.
193
173
 
194
- # CLI Documentation
195
-
196
- # `bigeye configure`
174
+ # CLI Documentation# `bigeye configure`
197
175
 
198
176
  Configuration Commands for Bigeye CLI
199
177
 
@@ -234,7 +212,6 @@ $ bigeye configure get [OPTIONS] [SETTING_KEY]
234
212
 
235
213
  **Options**:
236
214
 
237
- * `-b, --bigeye_conf TEXT`: Bigeye Credential File Path [env var: BIGEYE_API_CRED_FILE]
238
215
  * `-c, --config_file TEXT`: Bigeye CLI Configuration File Path [env var: BIGEYE_API_CONFIG_FILE]
239
216
  * `-w, --workspace TEXT`: Name of the workspace configuration. [env var: BIGEYE_WORKSPACE; default: DEFAULT]
240
217
  * `--help`: Show this message and exit.
@@ -253,7 +230,6 @@ $ bigeye configure list [OPTIONS]
253
230
 
254
231
  * `-b, --bigeye_conf TEXT`: Bigeye Credential File Path [env var: BIGEYE_API_CRED_FILE]
255
232
  * `-c, --config_file TEXT`: Bigeye CLI Configuration File Path [env var: BIGEYE_API_CONFIG_FILE]
256
- * `-w, --workspace TEXT`: Name of the workspace configuration. [env var: BIGEYE_WORKSPACE; default: DEFAULT]
257
233
  * `--help`: Show this message and exit.
258
234
 
259
235
  ## `bigeye configure set`
@@ -273,7 +249,6 @@ $ bigeye configure set [OPTIONS] [SETTING_KEY] [SETTING_VALUE]
273
249
 
274
250
  **Options**:
275
251
 
276
- * `-b, --bigeye_conf TEXT`: Bigeye Credential File Path [env var: BIGEYE_API_CRED_FILE]
277
252
  * `-c, --config_file TEXT`: Bigeye CLI Configuration File Path [env var: BIGEYE_API_CONFIG_FILE]
278
253
  * `-w, --workspace TEXT`: Name of the workspace configuration. [env var: BIGEYE_WORKSPACE; default: DEFAULT]
279
254
  * `--help`: Show this message and exit.
@@ -307,6 +282,7 @@ $ bigeye workspace [OPTIONS] COMMAND [ARGS]...
307
282
  * `schedule-all-metrics`: Schedule all metrics in a workspace.
308
283
  * `unschedule-all-metrics`: Unschedule all metrics in a workspace.
309
284
  * `upsert-group`: Create or update a group.
285
+ * `upsert-named-schedule`: Create a named, cron based schedule
310
286
  * `upsert-workspace`: Create or update a workspace.
311
287
 
312
288
  ## `bigeye workspace create-named-schedule`
@@ -533,6 +509,25 @@ $ bigeye workspace upsert-group [OPTIONS]
533
509
  * `-id, --group_id INTEGER`: Group ID.
534
510
  * `--help`: Show this message and exit.
535
511
 
512
+ ## `bigeye workspace upsert-named-schedule`
513
+
514
+ Create a named, cron based schedule
515
+
516
+ **Usage**:
517
+
518
+ ```console
519
+ $ bigeye workspace upsert-named-schedule [OPTIONS]
520
+ ```
521
+
522
+ **Options**:
523
+
524
+ * `-b, --bigeye_conf TEXT`: Bigeye Credential File Path [env var: BIGEYE_API_CRED_FILE]
525
+ * `-c, --config_file TEXT`: Bigeye CLI Configuration File Path [env var: BIGEYE_API_CONFIG_FILE]
526
+ * `-w, --workspace TEXT`: Name of the workspace configuration. [env var: BIGEYE_WORKSPACE; default: DEFAULT]
527
+ * `-sn, --name TEXT`: The user defined name of the schedule [required]
528
+ * `-c, --cron TEXT`: The cron string to define the schedule [required]
529
+ * `--help`: Show this message and exit.
530
+
536
531
  ## `bigeye workspace upsert-workspace`
537
532
 
538
533
  Create or update a workspace.
@@ -644,6 +639,7 @@ $ bigeye bigconfig plan [OPTIONS]
644
639
  * `-nq, --no_queue`: Don't submit to queue: True or False.
645
640
  * `-r, --recursive`: Search all input directories recursively.
646
641
  * `-strict, --strict_mode`: API errors cause an exception if True. (Validation errors still cause an exception)
642
+ * `-cicd, --cicd_report`: Add the report to a pull request. (Github only)
647
643
  * `--help`: Show this message and exit.
648
644
 
649
645
  # `bigeye catalog`
@@ -683,6 +679,7 @@ $ bigeye catalog [OPTIONS] COMMAND [ARGS]...
683
679
  * `run-metrics`: Runs metrics by warehouse id, schema...
684
680
  * `schedule-all-metrics`: Updates schedule for all metrics in a...
685
681
  * `set-metric-time`: Sets metric times from a list of possible...
682
+ * `track-schema-changes`: Track schema changes for sources on demand...
686
683
  * `unschedule-all-metrics`: Unschedule all metrics by warehouse,...
687
684
  * `unset-metric-time`: Unsets metric times for whole warehouse or...
688
685
  * `upsert-template`: Create or update a template for a source.
@@ -770,7 +767,7 @@ $ bigeye catalog delete-metrics [OPTIONS]
770
767
  * `-wid, --warehouse_id INTEGER`: Warehouse ID
771
768
  * `-sn, --schema_name TEXT`: List of Schema Names. E.g. -sn schema_1 -sn schema_2.
772
769
  * `-tid, --table_id INTEGER`: Table IDs. E.g. -tid 123 -tid 124
773
- * `-m, --metric_type TEXT`: Delete by name of the metric type.UNDEFINED_PREDEFINED_METRIC_NAME, PERCENT_NULL, COUNT_NULL, PERCENT_EMPTY_STRING, COUNT_EMPTY_STRING, PERCENT_UNIQUE, PERCENT_VALUE_IN_LIST, AVERAGE, MIN, MAX, SUM, COUNT_ROWS, COUNT_DISTINCT, HOURS_SINCE_MAX_DATE, HOURS_SINCE_MAX_TIMESTAMP, COUNT_TRUE, PERCENT_TRUE, COUNT_FALSE, PERCENT_FALSE, COUNT_USA_PHONE, PERCENT_USA_PHONE, COUNT_USA_ZIP_CODE, PERCENT_USA_ZIP_CODE, PERCENT_UUID, COUNT_TIMESTAMP_STRING, PERCENT_TIMESTAMP_STRING, COUNT_DUPLICATES, COUNT_USA_STATE_CODE, PERCENT_USA_STATE_CODE, VARIANCE, SKEW, KURTOSIS, GEOMETRIC_MEAN, HARMONIC_MEAN, COUNT_UUID, COUNT_CUSIP, PERCENT_CUSIP, COUNT_SEDOL, PERCENT_SEDOL, COUNT_ISIN, PERCENT_ISIN, COUNT_LEI, PERCENT_LEI, COUNT_FIGI, PERCENT_FIGI, COUNT_PERM_ID, PERCENT_PERM_ID, COUNT_NAN, PERCENT_NAN, COUNT_LONGITUDE, PERCENT_LONGITUDE, COUNT_LATITUDE, PERCENT_LATITUDE, COUNT_NOT_IN_FUTURE, PERCENT_NOT_IN_FUTURE, COUNT_DATE_NOT_IN_FUTURE, PERCENT_DATE_NOT_IN_FUTURE, MEDIAN, PERCENTILE, COUNT_NOT_NULL, STRING_LENGTH_AVERAGE, STRING_LENGTH_MIN, STRING_LENGTH_MAX, COUNT_SSN, PERCENT_SSN, COUNT_EMAIL, PERCENT_EMAIL, ROWS_INSERTED, HOURS_SINCE_LAST_LOAD, COUNT_READ_QUERIES, PERCENT_NOT_NULL, FRESHNESS, VOLUME, FRESHNESS_DATA, VOLUME_DATA
770
+ * `-m, --metric_type TEXT`: Delete by name of the metric type.UNDEFINED_PREDEFINED_METRIC_NAME, PERCENT_NULL, COUNT_NULL, PERCENT_EMPTY_STRING, COUNT_EMPTY_STRING, PERCENT_UNIQUE, PERCENT_VALUE_IN_LIST, AVERAGE, MIN, MAX, SUM, COUNT_ROWS, COUNT_DISTINCT, HOURS_SINCE_MAX_DATE, HOURS_SINCE_MAX_TIMESTAMP, COUNT_TRUE, PERCENT_TRUE, COUNT_FALSE, PERCENT_FALSE, COUNT_USA_PHONE, PERCENT_USA_PHONE, COUNT_USA_ZIP_CODE, PERCENT_USA_ZIP_CODE, PERCENT_UUID, COUNT_TIMESTAMP_STRING, PERCENT_TIMESTAMP_STRING, COUNT_DUPLICATES, COUNT_USA_STATE_CODE, PERCENT_USA_STATE_CODE, VARIANCE, SKEW, KURTOSIS, GEOMETRIC_MEAN, HARMONIC_MEAN, COUNT_UUID, COUNT_CUSIP, PERCENT_CUSIP, COUNT_SEDOL, PERCENT_SEDOL, COUNT_ISIN, PERCENT_ISIN, COUNT_LEI, PERCENT_LEI, COUNT_FIGI, PERCENT_FIGI, COUNT_PERM_ID, PERCENT_PERM_ID, COUNT_NAN, PERCENT_NAN, COUNT_LONGITUDE, PERCENT_LONGITUDE, COUNT_LATITUDE, PERCENT_LATITUDE, COUNT_NOT_IN_FUTURE, PERCENT_NOT_IN_FUTURE, COUNT_DATE_NOT_IN_FUTURE, PERCENT_DATE_NOT_IN_FUTURE, MEDIAN, PERCENTILE, COUNT_NOT_NULL, STRING_LENGTH_AVERAGE, STRING_LENGTH_MIN, STRING_LENGTH_MAX, COUNT_SSN, PERCENT_SSN, COUNT_EMAIL, PERCENT_EMAIL, ROWS_INSERTED, HOURS_SINCE_LAST_LOAD, COUNT_READ_QUERIES, PERCENT_NOT_NULL, FRESHNESS, VOLUME, FRESHNESS_DATA, VOLUME_DATA, COUNT_VALUE_IN_LIST
774
771
  * `--help`: Show this message and exit.
775
772
 
776
773
  ## `bigeye catalog delete-source`
@@ -1093,6 +1090,32 @@ $ bigeye catalog set-metric-time [OPTIONS]
1093
1090
  * `-r, --replace`: replace metric times if already present on tables? Default is false.
1094
1091
  * `--help`: Show this message and exit.
1095
1092
 
1093
+ ## `bigeye catalog track-schema-changes`
1094
+
1095
+ Track schema changes for sources on demand or every n hour(s) and notify specified channels.
1096
+ Environment variables SMTP_USER and SMTP_PASSWORD MUST be set if using email notification.
1097
+
1098
+ **Usage**:
1099
+
1100
+ ```console
1101
+ $ bigeye catalog track-schema-changes [OPTIONS]
1102
+ ```
1103
+
1104
+ **Options**:
1105
+
1106
+ * `-b, --bigeye_conf TEXT`: Bigeye Credential File Path [env var: BIGEYE_API_CRED_FILE]
1107
+ * `-c, --config_file TEXT`: Bigeye CLI Configuration File Path [env var: BIGEYE_API_CONFIG_FILE]
1108
+ * `-w, --workspace TEXT`: Name of the workspace configuration. [env var: BIGEYE_WORKSPACE; default: DEFAULT]
1109
+ * `-src, --source TEXT`: A list of source names to track. (None will track changes from all sources)
1110
+ * `-s, --since TEXT`: Track schema changes from this date. (Formatted as yyyy-MM-dd) [default: 1970-01-01]
1111
+ * `-f, --frequency INTEGER`: Every n hours to check for schema changes. (None will only run the check once) [default: 0]
1112
+ * `-ct, --change_type [CREATED|DELETED|TYPE_CHANGED]`: The types of changes to track; i.e additions, changes, deletions. (None will track all types) [default: DELETED, CREATED, TYPE_CHANGED]
1113
+ * `-nc, --channel TEXT`: A list of notification channels; e.g. -nc email@mydomain.com -nc #slack_channel -nc https://www.webhook.com
1114
+ * `-smtp, --server TEXT`: The server to send emails.
1115
+ * `-p, --port INTEGER`: The server port to send emails. [default: 587]
1116
+ * `-t, --token TEXT`: The token to utilize the Slack web client. (Will attempt to use environment variable SLACK_BOT_TOKEN, if not set)
1117
+ * `--help`: Show this message and exit.
1118
+
1096
1119
  ## `bigeye catalog unschedule-all-metrics`
1097
1120
 
1098
1121
  Unschedule all metrics by warehouse, schema or tables.
@@ -1147,12 +1170,13 @@ $ bigeye catalog upsert-template [OPTIONS]
1147
1170
  * `-b, --bigeye_conf TEXT`: Bigeye Credential File Path [env var: BIGEYE_API_CRED_FILE]
1148
1171
  * `-c, --config_file TEXT`: Bigeye CLI Configuration File Path [env var: BIGEYE_API_CONFIG_FILE]
1149
1172
  * `-w, --workspace TEXT`: Name of the workspace configuration. [env var: BIGEYE_WORKSPACE; default: DEFAULT]
1150
- * `-sn, --source_name TEXT`: The name of the source where the template will be defined [required]
1151
- * `-tn, --name TEXT`: The user defined name of the template [required]
1152
- * `-tb, --body TEXT`: The string to define the template [required]
1153
- * `-rt, --returns [BOOLEAN|NUMERIC]`: The data type returned by the template; i.e. NUMERIC, BOOLEAN [required]
1154
- * `-p, --params TEXT`: A list of key/value pairs for parameters; ex. -p column=COLUMN_REFERENCE -p table=STRING [required]
1173
+ * `-sn, --source_name TEXT`: The name of the source where the template will be defined
1174
+ * `-tn, --name TEXT`: The user defined name of the template
1175
+ * `-tb, --body TEXT`: The string to define the template
1176
+ * `-rt, --returns [BOOLEAN|NUMERIC]`: The data type returned by the template; i.e. NUMERIC, BOOLEAN
1177
+ * `-p, --params TEXT`: A list of key/value pairs for parameters; ex. -p column=COLUMN_REFERENCE -p table=STRING
1155
1178
  * `-id, --template_id INTEGER`: The template ID (Only required when updating a template). [default: 0]
1179
+ * `-tf, --template_file TEXT`: A file containing a template definition.
1156
1180
  * `--help`: Show this message and exit.
1157
1181
 
1158
1182
  ## `bigeye catalog upsert-virtual-table`
@@ -1221,7 +1245,7 @@ $ bigeye metric dbt-tests-to-metrics [OPTIONS]
1221
1245
  * `-sf, --schema_file TEXT`: The path to the dbt schema file [required]
1222
1246
  * `-auto, --use_auto`: Use autothresholds over default constant
1223
1247
  * `-bigconfig, --to_bigconfig`: Convert the dbt tests to bigconfig.
1224
- * `-op, --output_path TEXT`: Output path where bigconfig file will be saved. If no output path is defined then current working directory will be used. Requires --to_bigconfig to be true. [default: /Users/cmacdonald/Projects/semantic-data-platform/bigeye-integrations/bigeye-cli]
1248
+ * `-op, --output_path TEXT`: Output path where bigconfig file will be saved. If no output path is defined then current working directory will be used. Requires --to_bigconfig to be true. [default: /home/runner/work/semantic-data-platform/semantic-data-platform/bigeye-integrations/bigeye-cli]
1225
1249
  * `--help`: Show this message and exit.
1226
1250
 
1227
1251
  ## `bigeye metric get-info`
@@ -1510,7 +1534,7 @@ $ bigeye deltas suggest-deltas [OPTIONS]
1510
1534
  * `-w, --workspace TEXT`: Name of the workspace configuration. [env var: BIGEYE_WORKSPACE; default: DEFAULT]
1511
1535
  * `-source, --source_selector TEXT`: The pattern of tables in the source to select. Wildcard (*) indicates all tables or all schemas, e.g. source_1.*.* would be all schemas in source_1. [required]
1512
1536
  * `-target, --target_selector TEXT`: The pattern of tables in the target to select. Wildcard (*) indicates all tables or all schemas, e.g. source_2.*.* would be all schemas in source_2. [required]
1513
- * `-mt, --match_type [strict|fuzzy]`: How to match tables between the source and target destinations. Strict will only create relations if table names match exactly, Fuzzy will attempt to create relations using a fuzzy match. [default: MatchType.STRICT]
1537
+ * `-mt, --match_type [strict|fuzzy]`: How to match tables between the source and target destinations. Strict will only create relations if table names match exactly, Fuzzy will attempt to create relations using a fuzzy match. [default: strict]
1514
1538
  * `-op, --output_path TEXT`: File to write the delta configuration. [required]
1515
1539
  * `--help`: Show this message and exit.
1516
1540
 
@@ -1719,6 +1743,7 @@ $ bigeye lineage create-relation [OPTIONS]
1719
1743
  * `-w, --workspace TEXT`: Name of the workspace configuration. [env var: BIGEYE_WORKSPACE; default: DEFAULT]
1720
1744
  * `-up, --upstream TEXT`: The fully qualified table name [required]
1721
1745
  * `-down, --downstream TEXT`: The fully qualified table name [required]
1746
+ * `-co, --column_overrides TEXT`: The list of column overrides, formatted as upstream_column_name:downstream_column_name
1722
1747
  * `--help`: Show this message and exit.
1723
1748
 
1724
1749
  ## `bigeye lineage delete-node`
@@ -1777,7 +1802,8 @@ $ bigeye lineage infer-relations [OPTIONS]
1777
1802
  * `-w, --workspace TEXT`: Name of the workspace configuration. [env var: BIGEYE_WORKSPACE; default: DEFAULT]
1778
1803
  * `-upstream, --upstream_selector TEXT`: The pattern of tables in the upstream source to select. Wildcard (*) indicates all tables or all schemas, e.g. source_1.*.* would be all schemas in source_1.
1779
1804
  * `-downstream, --downstream_selector TEXT`: The pattern of tables in the downstream source to select. Wildcard (*) indicates all tables or all schemas, e.g. source_2.*.* would be all schemas in source_2.
1780
- * `-mt, --match_type [strict|fuzzy]`: How to match tables between the source and target destinations. Strict will only create relations if table names match exactly, Fuzzy will attempt to create relations using a fuzzy match. [default: MatchType.STRICT]
1805
+ * `-mt, --match_type [strict|fuzzy]`: How to match tables between the source and target destinations. Strict will only create relations if table names match exactly, Fuzzy will attempt to create relations using a fuzzy match. [default: strict]
1806
+ * `-lc, --lineage_conf TEXT`: The path to a Simple Lineage configuration file.
1807
+ * `-purge, --purge_lineage`: Purge all lineage edges.
1781
1808
  * `--help`: Show this message and exit.
1782
1809
 
1783
-
@@ -147,6 +147,8 @@ def export(
147
147
  name="Sample", description="SDK Generated"
148
148
  )
149
149
 
150
+ final_metric_ids: List[int] = []
151
+
150
152
  # Require at least 1 option to be specified
151
153
  if not collection_id and not table_id and not metric_ids:
152
154
  raise typer.BadParameter(
@@ -154,19 +156,23 @@ def export(
154
156
  "collection id (-cid), table id (-tid), or list of metric ids (-mid). "
155
157
  )
156
158
 
159
+ # Add metric ids if passed
160
+ if metric_ids:
161
+ final_metric_ids.extend(metric_ids)
162
+
157
163
  # Get existing collection if passed
158
164
  if collection_id:
159
165
  collection: SimpleCollection = SimpleCollection.from_datawatch_object(
160
166
  client.get_collection(collection_id=collection_id).collection
161
167
  )
162
- metric_ids.extend(collection.metric_ids)
168
+ final_metric_ids.extend(collection.metric_ids)
163
169
 
164
170
  # Get metrics from table if passed
165
171
  if table_id:
166
172
  metrics_from_table = client.get_metric_info_batch_post(
167
173
  table_ids=[table_id]
168
174
  ).metrics
169
- metric_ids.extend([m.metric_configuration.id for m in metrics_from_table])
175
+ final_metric_ids.extend([m.metric_configuration.id for m in metrics_from_table])
170
176
  if not metrics_from_table:
171
177
  raise typer.BadParameter(
172
178
  f"No metrics found for given table id. Please check arguments and try again."
@@ -175,7 +181,7 @@ def export(
175
181
  collection.name = metrics_from_table[0].metric_metadata.dataset_name
176
182
 
177
183
  # Pull metric information
178
- metrics: MetricInfoList = client.get_metric_info_batch_post(metric_ids=metric_ids)
184
+ metrics: MetricInfoList = client.get_metric_info_batch_post(metric_ids=final_metric_ids)
179
185
 
180
186
  if not output_path:
181
187
  output_path = client.config.bigconfig_output_path or Path.cwd()
@@ -2,19 +2,18 @@ import typer
2
2
  from rich import print
3
3
  from rich.table import Table
4
4
  from rich.text import Text
5
- from typing import List
5
+ from typing import List
6
6
 
7
- from bigeye_cli.functions import run_enum_menu
7
+ from bigeye_cli.functions import run_enum_menu, get_workspaces_for_user, get_workspace_id_for_user
8
8
  from bigeye_cli import global_options
9
9
 
10
10
  from bigeye_sdk.authentication.enums import AuthConfType, BrowserType
11
- from bigeye_sdk.authentication.api_authentication import BasicAPIAuth, BrowserAPIAuth, ApiAuth
11
+ from bigeye_sdk.authentication.api_authentication import BasicAPIAuth, BrowserAPIAuth, ApiAuth, APIKeyAuth
12
12
  from bigeye_sdk.authentication.config import Config
13
- from bigeye_sdk.client.datawatch_client import get_user_auth
14
- from bigeye_sdk.generated.com.bigeye.models.generated import Workspace
13
+ from bigeye_sdk.client.datawatch_client import get_user_auth, create_api_key_for_configuration
14
+ from bigeye_sdk.generated.com.bigeye.models.generated import WorkspaceIdNameAndRole
15
15
  from bigeye_sdk.exceptions.exceptions import WorkspaceNotSetException
16
16
 
17
-
18
17
  from bigeye_sdk.log import get_logger
19
18
 
20
19
  log = get_logger(__file__)
@@ -29,6 +28,7 @@ def configure(
29
28
  config_file: str = global_options.config_file,
30
29
  workspace: str = global_options.workspace
31
30
  ):
31
+ required_config = {}
32
32
  if ctx.invoked_subcommand is None:
33
33
  """Create a default credential for Bigeye CLI."""
34
34
  from rich.prompt import Prompt, Confirm
@@ -36,72 +36,94 @@ def configure(
36
36
  use_default_credential = True
37
37
  if workspace != 'DEFAULT':
38
38
  use_default_credential = Confirm.ask("Should this workspace inherit the default credentials?")
39
-
39
+
40
40
  # If configuring the default workspace or user specifically asked to enter creds, then perform credential
41
41
  # workflow
42
42
  if workspace == 'DEFAULT' or not use_default_credential:
43
- auth_type = run_enum_menu(enum_clz=AuthConfType, default=AuthConfType.BASIC_AUTH)
43
+ auth_type = run_enum_menu(enum_clz=AuthConfType, default=AuthConfType.API_KEY_AUTH)
44
44
 
45
- if auth_type == AuthConfType.BASIC_AUTH:
46
- base_url = Prompt.ask("Enter the Bigeye URL", default="https://app.bigeye.com")
47
- username = Prompt.ask("Enter the username")
48
- password = Prompt.ask("Enter the password", password=True)
49
- cred = BasicAPIAuth(base_url=base_url,
50
- user=username,password=password)
51
- else:
45
+ if auth_type == AuthConfType.BROWSER_AUTH:
52
46
  browser_type = run_enum_menu(enum_clz=BrowserType, default=BrowserType.CHROME)
53
47
 
54
48
  browser_profile_user_name = None
55
49
 
56
50
  if browser_type == BrowserType.CHROME:
57
51
  # TODO Could condition on path containing Profile_N directories.
58
- browser_profile_user_name = Prompt.ask("Enter the profile email if logged into Chrome (Default: None)")
52
+ browser_profile_user_name = Prompt.ask(
53
+ "Enter the profile email if logged into Chrome (Default: None)")
59
54
  base_url = Prompt.ask("Enter the Bigeye URL", default="https://app.bigeye.com")
60
55
  cred = BrowserAPIAuth(browser=browser_type, base_url=base_url,
61
- browser_profile_user_name=browser_profile_user_name)
56
+ browser_profile_user_name=browser_profile_user_name)
57
+
58
+ elif auth_type == AuthConfType.API_KEY_AUTH:
59
+ base_url = Prompt.ask("Enter the Bigeye URL", default="https://app.bigeye.com")
60
+ username = Prompt.ask("Enter Bigeye username")
61
+ uses_sso = Confirm.ask("Do you use SSO to access the Bigeye UI?")
62
+ if not uses_sso:
63
+ print(Text(text='\n** Please login to continue **', style='bold green'))
64
+ password = Prompt.ask("Enter Bigeye password for username above", password=True)
65
+ create_key = Confirm.ask("Would you like to create an API Key?")
66
+ basic_cred = BasicAPIAuth(base_url=base_url,
67
+ user=username,
68
+ password=password)
69
+ if create_key:
70
+ key_name = Prompt.ask("Enter a name for the key")
71
+ key_description = Prompt.ask("Enter a description (optional)", default="")
72
+ api_key = create_api_key_for_configuration(
73
+ cred=basic_cred, name=key_name, description=key_description
74
+ )
75
+ else:
76
+ api_key = Prompt.ask("Enter the API Key", password=True)
77
+
78
+ required_config = get_workspaces_for_user(
79
+ cred=basic_cred, workspace=workspace, use_default_credential=use_default_credential
80
+ )
81
+ else:
82
+ print(Text(text='\n** Make sure you have created an API key in the UI **', style='bold green'))
83
+ api_key = Prompt.ask("Enter the API Key", password=True)
84
+ api_auth = APIKeyAuth(base_url=base_url, api_key=api_key)
85
+ required_config = get_workspace_id_for_user(cred=api_auth,
86
+ workspace=workspace,
87
+ use_default_credential=use_default_credential,
88
+ bigeye_username=username)
89
+
90
+
91
+ cred = APIKeyAuth(base_url=base_url, api_key=api_key)
92
+
93
+ else:
94
+ base_url = Prompt.ask("Enter the Bigeye URL", default="https://app.bigeye.com")
95
+ username = Prompt.ask("Enter the username")
96
+ password = Prompt.ask("Enter the password", password=True)
97
+ cred = BasicAPIAuth(base_url=base_url,
98
+ user=username,
99
+ password=password)
62
100
 
63
- cred.save_as_file(auth_filename=bigeye_conf,cred=cred,workspace=workspace)
101
+ cred.save_as_file(auth_filename=bigeye_conf, cred=cred, workspace=workspace)
64
102
  # If inheriting from default credential then load default credential
65
103
  else:
66
- cred = ApiAuth.load(auth_file=bigeye_conf,workspace='DEFAULT')
67
-
68
- # Only prompt user for workspace ID if they have access to multiple workspaces
69
- accessible_workspaces: List[Workspace] = get_user_auth(cred).workspaces
70
- if len(accessible_workspaces) > 1:
71
- print(Text(text='\n** WORKSPACE OPTIONS **',style='bold green'))
72
- for wk in accessible_workspaces:
73
- print(f'{wk.name} - {wk.id}')
74
- required_config = {
75
- "workspace_id": Prompt.ask(f"Enter Bigeye workspace ID for desired {workspace} configuration",
76
- choices=[str(w.id) for w in accessible_workspaces]),
77
- "use_default_credential": use_default_credential
78
- }
79
- elif len(accessible_workspaces) == 1:
80
- required_config = {
81
- "workspace_id": str(accessible_workspaces[0].id),
82
- "use_default_credential": use_default_credential
83
- }
84
- else:
85
- raise WorkspaceNotSetException(f'No workspace access detected. Please check with your Bigeye '
86
- 'administrators to obtain access to a workspace.')
104
+ cred = ApiAuth.load(auth_file=bigeye_conf, workspace='DEFAULT')
105
+
106
+ if not required_config:
107
+ required_config = get_workspaces_for_user(
108
+ cred=cred, workspace=workspace, use_default_credential=use_default_credential
109
+ )
87
110
 
88
111
  Config(**required_config).upsert_workspace_config(
89
- config_file=config_file,
90
- workspace=workspace)
91
-
112
+ config_file=config_file,
113
+ workspace=workspace)
114
+
92
115
 
93
116
  @app.command()
94
117
  def set(
95
- bigeye_conf: str = global_options.bigeye_conf,
96
118
  config_file: str = global_options.config_file,
97
119
  workspace: str = global_options.workspace,
98
120
  setting_key: str = typer.Argument(
99
121
  None
100
- ,help="The name of the configuration setting."
122
+ , help="The name of the configuration setting."
101
123
  ),
102
124
  setting_value: str = typer.Argument(
103
125
  None
104
- ,help="The value of the configuration setting."
126
+ , help="The value of the configuration setting."
105
127
  )
106
128
  ):
107
129
  """
@@ -118,17 +140,17 @@ def set(
118
140
  else:
119
141
  raise typer.BadParameter(
120
142
  message=f"No configuration setting named {setting_key} available to modify. "
121
- f"Try one of the following: {str.join(', ',config_settings)}"
143
+ f"Try one of the following: {str.join(', ', config_settings)}"
122
144
  )
123
145
 
146
+
124
147
  @app.command()
125
148
  def get(
126
- bigeye_conf: str = global_options.bigeye_conf,
127
149
  config_file: str = global_options.config_file,
128
150
  workspace: str = global_options.workspace,
129
151
  setting_key: str = typer.Argument(
130
- None
131
- ,help="The name of the configuration setting."
152
+ None
153
+ , help="The name of the configuration setting."
132
154
  )
133
155
  ):
134
156
  """
@@ -140,7 +162,7 @@ def get(
140
162
  config_file=config_file,
141
163
  setting=setting_key,
142
164
  workspace=workspace)
143
-
165
+
144
166
  table = Table()
145
167
  table.add_column("Workspace", justify="right", style="cyan", no_wrap=True)
146
168
  table.add_column("Key", style="magenta")
@@ -150,14 +172,14 @@ def get(
150
172
  else:
151
173
  raise typer.BadParameter(
152
174
  message=f"No configuration setting named {setting_key} available to retrieve. "
153
- f"Try one of the following: {str.join(', ',config_settings)}"
175
+ f"Try one of the following: {str.join(', ', config_settings)}"
154
176
  )
155
177
 
178
+
156
179
  @app.command()
157
180
  def list(
158
181
  bigeye_conf: str = global_options.bigeye_conf,
159
- config_file: str = global_options.config_file,
160
- workspace: str = global_options.workspace,
182
+ config_file: str = global_options.config_file
161
183
  ):
162
184
  """
163
185
  List all configured workspaces.
@@ -181,12 +203,14 @@ def list(
181
203
  table.add_column("Credential Type", justify="right", style="green")
182
204
  for key, value in config.items():
183
205
  cred_type = None
184
- if auth.get(section=key,option='browser',fallback=None):
206
+ if auth.get(section=key, option='browser', fallback=None):
185
207
  cred_type = 'Browser'
186
- elif auth.get(section=key,option='user',fallback=None):
208
+ elif auth.get(section=key, option='user', fallback=None):
187
209
  cred_type = 'Basic'
210
+ elif auth.get(section=key, option='api_key', fallback=None):
211
+ cred_type = 'Api Key'
188
212
  else:
189
213
  cred_type = 'Default'
190
- table.add_row(key,value.get('workspace_id'),cred_type)
214
+ table.add_row(key, value.get('workspace_id'), cred_type)
191
215
 
192
- print(table)
216
+ print(table)
@@ -4,9 +4,13 @@ import os
4
4
  from typing import List, Dict
5
5
  import typer
6
6
  from rich.prompt import Prompt
7
+ from rich import print
8
+ from rich.table import Table
9
+ from rich.text import Text
7
10
 
8
11
  from bigeye_sdk.class_ext.enum_ext import StrEnum
9
- from bigeye_sdk.client.datawatch_client import DatawatchClient, datawatch_client_factory, get_user_auth
12
+ from bigeye_sdk.client.datawatch_client import DatawatchClient, datawatch_client_factory, get_user_auth, \
13
+ get_all_workspaces_for_login, get_allowed_emails_for_workspace
10
14
  from bigeye_sdk.functions.metric_functions import get_file_name_for_metric
11
15
  from bigeye_sdk.functions.file_functs import create_subdir_if_not_exists, serialize_listdict_to_json_file, \
12
16
  write_to_file, serialize_list_to_json_file
@@ -15,7 +19,8 @@ from bigeye_sdk.log import get_logger
15
19
  from bigeye_sdk.authentication.api_authentication import ApiAuth
16
20
  from bigeye_sdk.authentication.config import Config, WorkspaceConfig
17
21
  from bigeye_sdk.exceptions.exceptions import WorkspaceNotSetException, ConfigNotFoundException
18
- from bigeye_sdk.generated.com.bigeye.models.generated import MetricInfoList, Table, Issue, MetricTemplate
22
+ from bigeye_sdk.generated.com.bigeye.models.generated import MetricInfoList, Table, Issue, MetricTemplate, \
23
+ WorkspaceIdNameAndRole
19
24
  from bigeye_sdk.model.protobuf_extensions import MetricDebugQueries
20
25
 
21
26
  log = get_logger(__file__)
@@ -65,8 +70,7 @@ def cli_client_factory(auth_file: str = None, config_file: str = None, workspace
65
70
  else:
66
71
  auth = ApiAuth.load(auth_file=auth_file, workspace=workspace)
67
72
 
68
-
69
- # Attempt to get workspace configuration. If no config created yet, then throw an error
73
+ # Attempt to get workspace configuration. If no config created yet, then throw an error
70
74
  # and have the user run the bigeye configure command.
71
75
  try:
72
76
  workspace_config = WorkspaceConfig(**config[workspace])
@@ -214,3 +218,60 @@ def run_enum_menu(enum_clz: enum.EnumMeta, default: StrEnum) -> StrEnum:
214
218
  typer.echo(f"Invalid Choice.")
215
219
 
216
220
  return valid_types[user_chosen_type_ix]
221
+
222
+
223
+ def get_workspaces_for_user(cred: ApiAuth, workspace: str, use_default_credential: bool) -> dict:
224
+ # Only prompt user for workspace ID if they have access to multiple workspaces
225
+ accessible_workspaces: List[WorkspaceIdNameAndRole] = get_user_auth(auth=cred).workspaces
226
+ if len(accessible_workspaces) > 1:
227
+ print(Text(text='\n** WORKSPACE OPTIONS **', style='bold green'))
228
+ for wk in accessible_workspaces:
229
+ print(f'{wk.name} - {wk.id}')
230
+ required_config = {
231
+ "workspace_id": Prompt.ask(f"Enter Bigeye workspace ID for desired {workspace} configuration",
232
+ choices=[str(w.id) for w in accessible_workspaces]),
233
+ "use_default_credential": use_default_credential
234
+ }
235
+ elif len(accessible_workspaces) == 1:
236
+ required_config = {
237
+ "workspace_id": str(accessible_workspaces[0].id),
238
+ "use_default_credential": use_default_credential
239
+ }
240
+ else:
241
+ raise WorkspaceNotSetException(f'No workspace access detected. Please check with your Bigeye '
242
+ 'administrators to obtain access to a workspace.')
243
+
244
+ return required_config
245
+
246
+
247
+ def verify_email_access_for_workspace(cred: ApiAuth, workspace_id: int, bigeye_username: str) -> int:
248
+ no_access = f"\nBigeye user {bigeye_username} does not have access to workspace ID {workspace_id}."
249
+ please_verify = "Please verify you have access or choose another ID from the list above."
250
+ workspace_emails = get_allowed_emails_for_workspace(cred=cred, workspace_id=workspace_id)
251
+ while bigeye_username.lower() not in workspace_emails:
252
+ print(Text(text=f"{no_access}\n{please_verify}", style='bold yellow'))
253
+ workspace_id = Prompt.ask(f"Enter Bigeye workspace ID")
254
+ workspace_emails = get_allowed_emails_for_workspace(cred=cred, workspace_id=workspace_id)
255
+ return workspace_id
256
+
257
+
258
+ def get_workspace_id_for_user(
259
+ cred: ApiAuth, workspace: str, use_default_credential: bool, bigeye_username: str
260
+ ) -> dict:
261
+ all_workspaces = get_all_workspaces_for_login(cred=cred)
262
+ if not all_workspaces:
263
+ raise WorkspaceNotSetException(f'No workspace access detected. Please check with your Bigeye '
264
+ 'administrators to obtain access to a workspace.')
265
+ print(
266
+ Text(text='\n** WORKSPACE OPTIONS **\nNOTE: You may not have access to some listed below', style='bold green')
267
+ )
268
+ for wk in all_workspaces:
269
+ print(f'{wk.name} - {wk.id}')
270
+
271
+ workspace_id = Prompt.ask(f"Enter Bigeye workspace ID for desired {workspace} configuration",
272
+ choices=[str(w.id) for w in all_workspaces])
273
+ workspace_id = verify_email_access_for_workspace(cred=cred, workspace_id=workspace_id, bigeye_username=bigeye_username)
274
+ return {
275
+ "workspace_id": workspace_id,
276
+ "use_default_credential": use_default_credential
277
+ }
@@ -53,10 +53,10 @@ def get_issues(
53
53
  , help="File to write the failed metric configurations to.")
54
54
  ):
55
55
  """Gets issues and writes info to files."""
56
- client = cli_client_factory(bigeye_conf,config_file,workspace)
56
+ client = cli_client_factory(bigeye_conf, config_file, workspace)
57
57
 
58
58
  issues = client.get_issues(warehouse_ids=warehouse_ids,
59
- schemas=schemas,
59
+ schema_names=schemas,
60
60
  metric_ids=metric_ids,
61
61
  collection_ids=collection_ids,
62
62
  issue_ids=issue_ids)
@@ -96,7 +96,7 @@ def update_issue(
96
96
  , help="Used to train Bigeye when closing an issue. Options are TRUE_POSITIVE, FALSE_POSITIVE, EXPECTED.")
97
97
  ):
98
98
  """Updates an issue in Bigeye and returns the Issue object from the protobuff."""
99
- client = cli_client_factory(bigeye_conf,config_file,workspace)
99
+ client = cli_client_factory(bigeye_conf, config_file, workspace)
100
100
 
101
101
  client.update_issue(issue_id=issue_id,
102
102
  issue_status=issue_status,
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "bigeye-cli"
3
- version = "0.3.62"
3
+ version = "0.3.64"
4
4
  description = "Bigeye CLI offers developer tools for maintaining your developer workspace."
5
5
  license = "Proprietary"
6
6
  authors = ["Bigeye <support@bigeye.com>"]
@@ -19,7 +19,7 @@ bigeye = "bigeye_cli.__main__:app"
19
19
  [tool.poetry.dependencies]
20
20
  python = "^3.9.0"
21
21
  click = "^8.0.4"
22
- bigeye-sdk = "^0.4.83"
22
+ bigeye-sdk = "^0.4.84"
23
23
  rich = "^12.4.4"
24
24
  PyGithub = '^1.57'
25
25
 
File without changes