bigeye-cli 0.7.4__tar.gz → 0.8.0__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 (36) hide show
  1. bigeye_cli-0.7.4/bigeye_cli/CLI_DOCS.md → bigeye_cli-0.8.0/PKG-INFO +173 -1
  2. bigeye_cli-0.7.4/PKG-INFO → bigeye_cli-0.8.0/bigeye_cli/CLI_DOCS.md +152 -20
  3. {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/bigeye_cli/catalog/catalog_commands.py +2 -0
  4. bigeye_cli-0.8.0/bigeye_cli/catalog/custom_repo_commands.py +216 -0
  5. {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/bigeye_cli/lineage/lineage_commands.py +145 -0
  6. {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/pyproject.toml +2 -2
  7. {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/LICENSE +0 -0
  8. {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/bigeye_cli/__init__.py +0 -0
  9. {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/bigeye_cli/__main__.py +0 -0
  10. {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/bigeye_cli/__version__.py +0 -0
  11. {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/bigeye_cli/bigconfig/__init__.py +0 -0
  12. {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/bigeye_cli/bigconfig/bigconfig_commands.py +0 -0
  13. {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/bigeye_cli/bigconfig/bigconfig_options.py +0 -0
  14. {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/bigeye_cli/catalog/__init__.py +0 -0
  15. {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/bigeye_cli/collections/__init__.py +0 -0
  16. {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/bigeye_cli/collections/collection_commands.py +0 -0
  17. {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/bigeye_cli/configure/__init__.py +0 -0
  18. {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/bigeye_cli/configure/configure_commands.py +0 -0
  19. {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/bigeye_cli/deltas/__init__.py +0 -0
  20. {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/bigeye_cli/deltas/deltas_commands.py +0 -0
  21. {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/bigeye_cli/enums.py +0 -0
  22. {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/bigeye_cli/exceptions/__init__.py +0 -0
  23. {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/bigeye_cli/exceptions/exceptions.py +0 -0
  24. {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/bigeye_cli/functions.py +0 -0
  25. {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/bigeye_cli/global_options.py +0 -0
  26. {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/bigeye_cli/issues/__init__.py +0 -0
  27. {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/bigeye_cli/issues/issue_commands.py +0 -0
  28. {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/bigeye_cli/lineage/__init__.py +0 -0
  29. {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/bigeye_cli/metric/__init__.py +0 -0
  30. {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/bigeye_cli/metric/metric_commands.py +0 -0
  31. {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/bigeye_cli/model/__init__.py +0 -0
  32. {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/bigeye_cli/model/cicd_conf.py +0 -0
  33. {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/bigeye_cli/model/github_report.py +0 -0
  34. {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/bigeye_cli/model/vendor_report.py +0 -0
  35. {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/bigeye_cli/workspace/__init__.py +0 -0
  36. {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/bigeye_cli/workspace/workspace_commands.py +0 -0
@@ -1,5 +1,24 @@
1
+ Metadata-Version: 2.1
2
+ Name: bigeye-cli
3
+ Version: 0.8.0
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.11.0,<4.0.0
10
+ Classifier: License :: Other/Proprietary License
11
+ Classifier: Programming Language :: Python :: 3
12
+ Classifier: Programming Language :: Python :: 3.11
13
+ Classifier: Programming Language :: Python :: 3.12
14
+ Requires-Dist: PyGithub (>=1.59.1,<2.0.0)
15
+ Requires-Dist: bigeye-sdk (>=0.10.0,<0.11.0)
16
+ Requires-Dist: click (>=8.1.8,<9.0.0)
17
+ Requires-Dist: rich (>=14.1.0,<15.0.0)
18
+ Description-Content-Type: text/markdown
19
+
1
20
  # **Bigeye CLI**
2
- Version: 0.7.4
21
+ Version: 0.8.0
3
22
  ## Installation
4
23
 
5
24
  **Setting up your local/build environment**
@@ -716,6 +735,7 @@ $ bigeye catalog [OPTIONS] COMMAND [ARGS]...
716
735
  * `ingest-dbt-core-run-info`: Ingest manifest.json and run_results.json...
717
736
  * `track-schema-changes`: Track schema changes for sources on demand...
718
737
  * `sync-custom-repository`: Sync a custom repository from a YAML file.
738
+ * `custom-repo`: Import and export custom repositories as...
719
739
 
720
740
  ## `bigeye catalog regen-autometrics`
721
741
 
@@ -1268,6 +1288,102 @@ $ bigeye catalog sync-custom-repository [OPTIONS]
1268
1288
  * `-ip, --input_path TEXT`: The path to the CUSTOM_REPOSITORY_CONFIGURATION file (Required)
1269
1289
  * `--help`: Show this message and exit.
1270
1290
 
1291
+ ## `bigeye catalog custom-repo`
1292
+
1293
+ Import and export custom repositories as Excel (.xlsx) workbooks.
1294
+
1295
+ **Usage**:
1296
+
1297
+ ```console
1298
+ $ bigeye catalog custom-repo [OPTIONS] COMMAND [ARGS]...
1299
+ ```
1300
+
1301
+ **Options**:
1302
+
1303
+ * `--help`: Show this message and exit.
1304
+
1305
+ **Commands**:
1306
+
1307
+ * `init`: Generate a blank custom repository...
1308
+ * `import`: Import a custom repository from an Excel...
1309
+ * `export`: Export a custom repository to an Excel...
1310
+ * `delete`: Entirely delete a custom repository,...
1311
+
1312
+ ### `bigeye catalog custom-repo init`
1313
+
1314
+ Generate a blank custom repository workbook (branded, with the Instructions
1315
+ sheet and dropdowns) for you to populate, then import with `custom-repo import`.
1316
+
1317
+ **Usage**:
1318
+
1319
+ ```console
1320
+ $ bigeye catalog custom-repo init [OPTIONS]
1321
+ ```
1322
+
1323
+ **Options**:
1324
+
1325
+ * `-o, --output TEXT`: Output .xlsx path for the blank template. [default: custom_repo_template.xlsx]
1326
+ * `--force`: Overwrite the output file if it already exists.
1327
+ * `--help`: Show this message and exit.
1328
+
1329
+ ### `bigeye catalog custom-repo import`
1330
+
1331
+ Import a custom repository from an Excel workbook.
1332
+
1333
+ **Usage**:
1334
+
1335
+ ```console
1336
+ $ bigeye catalog custom-repo import [OPTIONS]
1337
+ ```
1338
+
1339
+ **Options**:
1340
+
1341
+ * `-b, --bigeye_conf TEXT`: Bigeye Credential File Path [env var: BIGEYE_API_CRED_FILE]
1342
+ * `-c, --config_file TEXT`: Bigeye CLI Configuration File Path [env var: BIGEYE_API_CONFIG_FILE]
1343
+ * `-w, --workspace TEXT`: Name of the workspace configuration. [env var: BIGEYE_WORKSPACE; default: DEFAULT]
1344
+ * `-f, --file TEXT`: Path to the custom repository .xlsx workbook. [required]
1345
+ * `--cleanup-stale`: Delete nodes/edges present in Bigeye but missing from the sheet. Off by default.
1346
+ * `--help`: Show this message and exit.
1347
+
1348
+ ### `bigeye catalog custom-repo export`
1349
+
1350
+ Export a custom repository to an Excel workbook.
1351
+
1352
+ **Usage**:
1353
+
1354
+ ```console
1355
+ $ bigeye catalog custom-repo export [OPTIONS]
1356
+ ```
1357
+
1358
+ **Options**:
1359
+
1360
+ * `-b, --bigeye_conf TEXT`: Bigeye Credential File Path [env var: BIGEYE_API_CRED_FILE]
1361
+ * `-c, --config_file TEXT`: Bigeye CLI Configuration File Path [env var: BIGEYE_API_CONFIG_FILE]
1362
+ * `-w, --workspace TEXT`: Name of the workspace configuration. [env var: BIGEYE_WORKSPACE; default: DEFAULT]
1363
+ * `--repo-name TEXT`: Display name of the custom repository to export. [required]
1364
+ * `-o, --output TEXT`: Output .xlsx path. Defaults to &lt;repo-name&gt;.xlsx in the current directory.
1365
+ * `--help`: Show this message and exit.
1366
+
1367
+ ### `bigeye catalog custom-repo delete`
1368
+
1369
+ Entirely delete a custom repository, including its nodes, edges, node types,
1370
+ and integration type.
1371
+
1372
+ **Usage**:
1373
+
1374
+ ```console
1375
+ $ bigeye catalog custom-repo delete [OPTIONS]
1376
+ ```
1377
+
1378
+ **Options**:
1379
+
1380
+ * `-b, --bigeye_conf TEXT`: Bigeye Credential File Path [env var: BIGEYE_API_CRED_FILE]
1381
+ * `-c, --config_file TEXT`: Bigeye CLI Configuration File Path [env var: BIGEYE_API_CONFIG_FILE]
1382
+ * `-w, --workspace TEXT`: Name of the workspace configuration. [env var: BIGEYE_WORKSPACE; default: DEFAULT]
1383
+ * `--repo-name TEXT`: Display name of the custom repository to delete. [required]
1384
+ * `-y, --yes`: Skip the confirmation prompt.
1385
+ * `--help`: Show this message and exit.
1386
+
1271
1387
  # `bigeye metric`
1272
1388
 
1273
1389
  Metric Commands for Bigeye CLI
@@ -1773,6 +1889,8 @@ $ bigeye lineage [OPTIONS] COMMAND [ARGS]...
1773
1889
  * `create-relation`: Create a lineage relationship for 2 entities
1774
1890
  * `delete-relation`: Deletes a single relationship based on...
1775
1891
  * `infer-relations`: Given an upstream and downstream path,...
1892
+ * `export-graphs`: Bulk-export lineage graphs for a list of...
1893
+ * `export-end-to-end`: Export complete end-to-end lineage paths...
1776
1894
 
1777
1895
  ## `bigeye lineage create-node`
1778
1896
 
@@ -1874,3 +1992,57 @@ $ bigeye lineage infer-relations [OPTIONS]
1874
1992
  * `-purge, --purge_lineage`: Purge all lineage edges.
1875
1993
  * `--help`: Show this message and exit.
1876
1994
 
1995
+ ## `bigeye lineage export-graphs`
1996
+
1997
+ Bulk-export lineage graphs for a list of FQNs into a single zip.
1998
+
1999
+ Reads fully-qualified catalog names from a CSV, downloads each one&#x27;s lineage graph,
2000
+ and writes one folder per FQN (nodes/edges/attributes) plus a top-level manifest of
2001
+ successes and failures.
2002
+
2003
+ **Usage**:
2004
+
2005
+ ```console
2006
+ $ bigeye lineage export-graphs [OPTIONS]
2007
+ ```
2008
+
2009
+ **Options**:
2010
+
2011
+ * `-b, --bigeye_conf TEXT`: Bigeye Credential File Path [env var: BIGEYE_API_CRED_FILE]
2012
+ * `-c, --config_file TEXT`: Bigeye CLI Configuration File Path [env var: BIGEYE_API_CONFIG_FILE]
2013
+ * `-w, --workspace TEXT`: Name of the workspace configuration. [env var: BIGEYE_WORKSPACE; default: DEFAULT]
2014
+ * `--fqns-file TEXT`: Path to a CSV with a single column of fully-qualified catalog names. [required]
2015
+ * `--direction [upstream|downstream|both]`: Direction to traverse: upstream, downstream, or both. [default: both]
2016
+ * `--content [all|nodes|edges|attributes]`: What each per-graph report contains: all, nodes, edges, or attributes. [default: all]
2017
+ * `--include-etl / --no-include-etl`: Include or exclude ETL operator nodes. Defaults to including them. [default: include-etl]
2018
+ * `-o, --output TEXT`: Output .zip path. Defaults to lineage_graphs.zip in the current directory.
2019
+ * `--help`: Show this message and exit.
2020
+
2021
+ ## `bigeye lineage export-end-to-end`
2022
+
2023
+ Export complete end-to-end lineage paths for one or more roots into a CSV.
2024
+
2025
+ Each row is one full lineage path and each Hop_* column is one object along it;
2026
+ the CSV widens to the longest path discovered. Only lineage edges become hops,
2027
+ collapsed to the chosen (or root-inferred) granularity — column/field hops roll
2028
+ up to their containing table/object (warehouse tables, ETL targets, BI objects).
2029
+
2030
+ **Usage**:
2031
+
2032
+ ```console
2033
+ $ bigeye lineage export-end-to-end [OPTIONS]
2034
+ ```
2035
+
2036
+ **Options**:
2037
+
2038
+ * `-b, --bigeye_conf TEXT`: Bigeye Credential File Path [env var: BIGEYE_API_CRED_FILE]
2039
+ * `-c, --config_file TEXT`: Bigeye CLI Configuration File Path [env var: BIGEYE_API_CONFIG_FILE]
2040
+ * `-w, --workspace TEXT`: Name of the workspace configuration. [env var: BIGEYE_WORKSPACE; default: DEFAULT]
2041
+ * `--root TEXT`: A starting point: a schema/table/column warehouse FQN or a custom node identifier. Repeatable to trace several roots into one CSV. [required]
2042
+ * `--direction [upstream|downstream|both]`: Direction to trace: upstream, downstream, or both. [default: both]
2043
+ * `--granularity [schema|table|column]`: Hop level: schema, table, or column. Defaults to each root&#x27;s own level.
2044
+ * `--max-paths INTEGER`: Per-root cap on enumerated paths. Truncation is logged, never silent. [default: 10000]
2045
+ * `-o, --output TEXT`: Output .csv path. Defaults to end_to_end_&lt;root&gt;.csv in the current directory.
2046
+ * `--help`: Show this message and exit.
2047
+
2048
+
@@ -1,24 +1,5 @@
1
- Metadata-Version: 2.1
2
- Name: bigeye-cli
3
- Version: 0.7.4
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.11.0,<4.0.0
10
- Classifier: License :: Other/Proprietary License
11
- Classifier: Programming Language :: Python :: 3
12
- Classifier: Programming Language :: Python :: 3.11
13
- Classifier: Programming Language :: Python :: 3.12
14
- Requires-Dist: PyGithub (>=1.59.1,<2.0.0)
15
- Requires-Dist: bigeye-sdk (>=0.8.0,<0.9.0)
16
- Requires-Dist: click (>=8.1.8,<9.0.0)
17
- Requires-Dist: rich (>=14.1.0,<15.0.0)
18
- Description-Content-Type: text/markdown
19
-
20
1
  # **Bigeye CLI**
21
- Version: 0.7.4
2
+ Version: 0.8.0
22
3
  ## Installation
23
4
 
24
5
  **Setting up your local/build environment**
@@ -735,6 +716,7 @@ $ bigeye catalog [OPTIONS] COMMAND [ARGS]...
735
716
  * `ingest-dbt-core-run-info`: Ingest manifest.json and run_results.json...
736
717
  * `track-schema-changes`: Track schema changes for sources on demand...
737
718
  * `sync-custom-repository`: Sync a custom repository from a YAML file.
719
+ * `custom-repo`: Import and export custom repositories as...
738
720
 
739
721
  ## `bigeye catalog regen-autometrics`
740
722
 
@@ -1287,6 +1269,102 @@ $ bigeye catalog sync-custom-repository [OPTIONS]
1287
1269
  * `-ip, --input_path TEXT`: The path to the CUSTOM_REPOSITORY_CONFIGURATION file (Required)
1288
1270
  * `--help`: Show this message and exit.
1289
1271
 
1272
+ ## `bigeye catalog custom-repo`
1273
+
1274
+ Import and export custom repositories as Excel (.xlsx) workbooks.
1275
+
1276
+ **Usage**:
1277
+
1278
+ ```console
1279
+ $ bigeye catalog custom-repo [OPTIONS] COMMAND [ARGS]...
1280
+ ```
1281
+
1282
+ **Options**:
1283
+
1284
+ * `--help`: Show this message and exit.
1285
+
1286
+ **Commands**:
1287
+
1288
+ * `init`: Generate a blank custom repository...
1289
+ * `import`: Import a custom repository from an Excel...
1290
+ * `export`: Export a custom repository to an Excel...
1291
+ * `delete`: Entirely delete a custom repository,...
1292
+
1293
+ ### `bigeye catalog custom-repo init`
1294
+
1295
+ Generate a blank custom repository workbook (branded, with the Instructions
1296
+ sheet and dropdowns) for you to populate, then import with `custom-repo import`.
1297
+
1298
+ **Usage**:
1299
+
1300
+ ```console
1301
+ $ bigeye catalog custom-repo init [OPTIONS]
1302
+ ```
1303
+
1304
+ **Options**:
1305
+
1306
+ * `-o, --output TEXT`: Output .xlsx path for the blank template. [default: custom_repo_template.xlsx]
1307
+ * `--force`: Overwrite the output file if it already exists.
1308
+ * `--help`: Show this message and exit.
1309
+
1310
+ ### `bigeye catalog custom-repo import`
1311
+
1312
+ Import a custom repository from an Excel workbook.
1313
+
1314
+ **Usage**:
1315
+
1316
+ ```console
1317
+ $ bigeye catalog custom-repo import [OPTIONS]
1318
+ ```
1319
+
1320
+ **Options**:
1321
+
1322
+ * `-b, --bigeye_conf TEXT`: Bigeye Credential File Path [env var: BIGEYE_API_CRED_FILE]
1323
+ * `-c, --config_file TEXT`: Bigeye CLI Configuration File Path [env var: BIGEYE_API_CONFIG_FILE]
1324
+ * `-w, --workspace TEXT`: Name of the workspace configuration. [env var: BIGEYE_WORKSPACE; default: DEFAULT]
1325
+ * `-f, --file TEXT`: Path to the custom repository .xlsx workbook. [required]
1326
+ * `--cleanup-stale`: Delete nodes/edges present in Bigeye but missing from the sheet. Off by default.
1327
+ * `--help`: Show this message and exit.
1328
+
1329
+ ### `bigeye catalog custom-repo export`
1330
+
1331
+ Export a custom repository to an Excel workbook.
1332
+
1333
+ **Usage**:
1334
+
1335
+ ```console
1336
+ $ bigeye catalog custom-repo export [OPTIONS]
1337
+ ```
1338
+
1339
+ **Options**:
1340
+
1341
+ * `-b, --bigeye_conf TEXT`: Bigeye Credential File Path [env var: BIGEYE_API_CRED_FILE]
1342
+ * `-c, --config_file TEXT`: Bigeye CLI Configuration File Path [env var: BIGEYE_API_CONFIG_FILE]
1343
+ * `-w, --workspace TEXT`: Name of the workspace configuration. [env var: BIGEYE_WORKSPACE; default: DEFAULT]
1344
+ * `--repo-name TEXT`: Display name of the custom repository to export. [required]
1345
+ * `-o, --output TEXT`: Output .xlsx path. Defaults to &lt;repo-name&gt;.xlsx in the current directory.
1346
+ * `--help`: Show this message and exit.
1347
+
1348
+ ### `bigeye catalog custom-repo delete`
1349
+
1350
+ Entirely delete a custom repository, including its nodes, edges, node types,
1351
+ and integration type.
1352
+
1353
+ **Usage**:
1354
+
1355
+ ```console
1356
+ $ bigeye catalog custom-repo delete [OPTIONS]
1357
+ ```
1358
+
1359
+ **Options**:
1360
+
1361
+ * `-b, --bigeye_conf TEXT`: Bigeye Credential File Path [env var: BIGEYE_API_CRED_FILE]
1362
+ * `-c, --config_file TEXT`: Bigeye CLI Configuration File Path [env var: BIGEYE_API_CONFIG_FILE]
1363
+ * `-w, --workspace TEXT`: Name of the workspace configuration. [env var: BIGEYE_WORKSPACE; default: DEFAULT]
1364
+ * `--repo-name TEXT`: Display name of the custom repository to delete. [required]
1365
+ * `-y, --yes`: Skip the confirmation prompt.
1366
+ * `--help`: Show this message and exit.
1367
+
1290
1368
  # `bigeye metric`
1291
1369
 
1292
1370
  Metric Commands for Bigeye CLI
@@ -1792,6 +1870,8 @@ $ bigeye lineage [OPTIONS] COMMAND [ARGS]...
1792
1870
  * `create-relation`: Create a lineage relationship for 2 entities
1793
1871
  * `delete-relation`: Deletes a single relationship based on...
1794
1872
  * `infer-relations`: Given an upstream and downstream path,...
1873
+ * `export-graphs`: Bulk-export lineage graphs for a list of...
1874
+ * `export-end-to-end`: Export complete end-to-end lineage paths...
1795
1875
 
1796
1876
  ## `bigeye lineage create-node`
1797
1877
 
@@ -1893,4 +1973,56 @@ $ bigeye lineage infer-relations [OPTIONS]
1893
1973
  * `-purge, --purge_lineage`: Purge all lineage edges.
1894
1974
  * `--help`: Show this message and exit.
1895
1975
 
1976
+ ## `bigeye lineage export-graphs`
1977
+
1978
+ Bulk-export lineage graphs for a list of FQNs into a single zip.
1979
+
1980
+ Reads fully-qualified catalog names from a CSV, downloads each one&#x27;s lineage graph,
1981
+ and writes one folder per FQN (nodes/edges/attributes) plus a top-level manifest of
1982
+ successes and failures.
1983
+
1984
+ **Usage**:
1985
+
1986
+ ```console
1987
+ $ bigeye lineage export-graphs [OPTIONS]
1988
+ ```
1989
+
1990
+ **Options**:
1991
+
1992
+ * `-b, --bigeye_conf TEXT`: Bigeye Credential File Path [env var: BIGEYE_API_CRED_FILE]
1993
+ * `-c, --config_file TEXT`: Bigeye CLI Configuration File Path [env var: BIGEYE_API_CONFIG_FILE]
1994
+ * `-w, --workspace TEXT`: Name of the workspace configuration. [env var: BIGEYE_WORKSPACE; default: DEFAULT]
1995
+ * `--fqns-file TEXT`: Path to a CSV with a single column of fully-qualified catalog names. [required]
1996
+ * `--direction [upstream|downstream|both]`: Direction to traverse: upstream, downstream, or both. [default: both]
1997
+ * `--content [all|nodes|edges|attributes]`: What each per-graph report contains: all, nodes, edges, or attributes. [default: all]
1998
+ * `--include-etl / --no-include-etl`: Include or exclude ETL operator nodes. Defaults to including them. [default: include-etl]
1999
+ * `-o, --output TEXT`: Output .zip path. Defaults to lineage_graphs.zip in the current directory.
2000
+ * `--help`: Show this message and exit.
2001
+
2002
+ ## `bigeye lineage export-end-to-end`
2003
+
2004
+ Export complete end-to-end lineage paths for one or more roots into a CSV.
2005
+
2006
+ Each row is one full lineage path and each Hop_* column is one object along it;
2007
+ the CSV widens to the longest path discovered. Only lineage edges become hops,
2008
+ collapsed to the chosen (or root-inferred) granularity — column/field hops roll
2009
+ up to their containing table/object (warehouse tables, ETL targets, BI objects).
2010
+
2011
+ **Usage**:
2012
+
2013
+ ```console
2014
+ $ bigeye lineage export-end-to-end [OPTIONS]
2015
+ ```
2016
+
2017
+ **Options**:
2018
+
2019
+ * `-b, --bigeye_conf TEXT`: Bigeye Credential File Path [env var: BIGEYE_API_CRED_FILE]
2020
+ * `-c, --config_file TEXT`: Bigeye CLI Configuration File Path [env var: BIGEYE_API_CONFIG_FILE]
2021
+ * `-w, --workspace TEXT`: Name of the workspace configuration. [env var: BIGEYE_WORKSPACE; default: DEFAULT]
2022
+ * `--root TEXT`: A starting point: a schema/table/column warehouse FQN or a custom node identifier. Repeatable to trace several roots into one CSV. [required]
2023
+ * `--direction [upstream|downstream|both]`: Direction to trace: upstream, downstream, or both. [default: both]
2024
+ * `--granularity [schema|table|column]`: Hop level: schema, table, or column. Defaults to each root&#x27;s own level.
2025
+ * `--max-paths INTEGER`: Per-root cap on enumerated paths. Truncation is logged, never silent. [default: 10000]
2026
+ * `-o, --output TEXT`: Output .csv path. Defaults to end_to_end_&lt;root&gt;.csv in the current directory.
2027
+ * `--help`: Show this message and exit.
1896
2028
 
@@ -17,6 +17,7 @@ from bigeye_cli.exceptions.exceptions import MissingArgumentException
17
17
  from bigeye_sdk.client.enum import Method
18
18
 
19
19
  from bigeye_cli import global_options
20
+ from bigeye_cli.catalog import custom_repo_commands
20
21
  from bigeye_sdk.controller.custom_repository_controller import CustomRepositoryController
21
22
  from bigeye_sdk.functions.dbt import parse_dbt_manifest
22
23
  from bigeye_sdk.functions.file_functs import read_json_file
@@ -65,6 +66,7 @@ from bigeye_sdk.model.schema_change import SourceSchemaChange
65
66
  log = get_logger(__file__)
66
67
 
67
68
  app = typer.Typer(no_args_is_help=True, help="Catalog Commands for Bigeye CLI")
69
+ app.add_typer(custom_repo_commands.app, name="custom-repo")
68
70
 
69
71
  """
70
72
  File should contain commands that will impact catalog, table, or schema level changes to a Bigeye workspace. This
@@ -0,0 +1,216 @@
1
+ import os
2
+ from typing import Dict, List, Optional, Tuple
3
+
4
+ import typer
5
+
6
+ from bigeye_cli import global_options
7
+ from bigeye_cli.functions import cli_client_factory
8
+ from bigeye_sdk.controller.custom_repository_controller import CustomRepositoryController
9
+ from bigeye_sdk.log import get_logger
10
+ from bigeye_sdk.model.custom_repository_excel import (
11
+ SHEET_EDGES,
12
+ CustomRepoWorkbook,
13
+ EdgeEndpointType,
14
+ WorkbookValidationError,
15
+ build_config,
16
+ iter_path_endpoints,
17
+ parse_catalog_path,
18
+ read_workbook,
19
+ validate_workbook,
20
+ write_workbook,
21
+ )
22
+
23
+ log = get_logger(__file__)
24
+
25
+ app = typer.Typer(
26
+ no_args_is_help=True,
27
+ help="Import and export custom repositories as Excel (.xlsx) workbooks.",
28
+ )
29
+
30
+
31
+ def _print_errors(header: str, errors: List[WorkbookValidationError]) -> None:
32
+ typer.echo(f"{header} with {len(errors)} error(s):", err=True)
33
+ for error in errors:
34
+ typer.echo(f" {error.format()}", err=True)
35
+
36
+
37
+ def _resolve_paths(
38
+ wb: CustomRepoWorkbook, controller: CustomRepositoryController
39
+ ) -> Tuple[Dict[str, int], List[WorkbookValidationError]]:
40
+ """Resolve every catalog-path/FQN edge endpoint to a node_id, aggregating failures."""
41
+ resolved: Dict[str, int] = {}
42
+ errors: List[WorkbookValidationError] = []
43
+ endpoints = iter_path_endpoints(wb)
44
+ # Bulk-load every referenced warehouse object up front so the per-endpoint
45
+ # resolution below is a cache lookup rather than several API calls each.
46
+ controller.warm_warehouse_cache(endpoints)
47
+ for endpoint_type, value in endpoints:
48
+ if endpoint_type == EdgeEndpointType.CUSTOM.value:
49
+ matches = controller.resolve_catalog_path(parse_catalog_path(value))
50
+ else:
51
+ matches = controller.resolve_warehouse_fqn(endpoint_type, value)
52
+ if not matches:
53
+ errors.append(
54
+ WorkbookValidationError(
55
+ SHEET_EDGES, "Could not resolve endpoint to a Bigeye node", value=value
56
+ )
57
+ )
58
+ elif len(matches) > 1:
59
+ errors.append(
60
+ WorkbookValidationError(
61
+ SHEET_EDGES,
62
+ f"Endpoint is ambiguous (matched node_ids {matches})",
63
+ value=value,
64
+ )
65
+ )
66
+ else:
67
+ resolved[value] = matches[0]
68
+ return resolved, errors
69
+
70
+
71
+ @app.command(name="init")
72
+ def init_repo(
73
+ output: str = typer.Option(
74
+ "custom_repo_template.xlsx",
75
+ "--output",
76
+ "-o",
77
+ help="Output .xlsx path for the blank template.",
78
+ ),
79
+ force: bool = typer.Option(
80
+ False,
81
+ "--force",
82
+ help="Overwrite the output file if it already exists.",
83
+ ),
84
+ ):
85
+ """Generate a blank custom repository workbook (branded, with the Instructions
86
+ sheet and dropdowns) for you to populate, then import with `custom-repo import`."""
87
+ if os.path.exists(output) and not force:
88
+ typer.echo(
89
+ f"'{output}' already exists. Choose a different --output or pass --force to overwrite.",
90
+ err=True,
91
+ )
92
+ raise typer.Exit(code=1)
93
+
94
+ write_workbook(CustomRepoWorkbook(repo_name=""), output)
95
+ log.info(f"Wrote blank custom repository template to {output}")
96
+
97
+
98
+ @app.command(name="import")
99
+ def import_repo(
100
+ bigeye_conf: str = global_options.bigeye_conf,
101
+ config_file: str = global_options.config_file,
102
+ workspace: str = global_options.workspace,
103
+ file: str = typer.Option(
104
+ ..., "--file", "-f", help="Path to the custom repository .xlsx workbook."
105
+ ),
106
+ cleanup_stale: bool = typer.Option(
107
+ False,
108
+ "--cleanup-stale",
109
+ help="Delete nodes/edges present in Bigeye but missing from the sheet. Off by default.",
110
+ ),
111
+ ):
112
+ """Import a custom repository from an Excel workbook."""
113
+ client = cli_client_factory(bigeye_conf, config_file, workspace)
114
+ controller = CustomRepositoryController(client)
115
+
116
+ try:
117
+ wb = read_workbook(file)
118
+ except (FileNotFoundError, ValueError) as e:
119
+ typer.echo(f"Could not read workbook '{file}': {e}", err=True)
120
+ raise typer.Exit(code=1)
121
+
122
+ validation_errors = validate_workbook(wb)
123
+ if validation_errors:
124
+ _print_errors("Import validation failed", validation_errors)
125
+ raise typer.Exit(code=1)
126
+
127
+ path_node_ids, unresolved = _resolve_paths(wb, controller)
128
+ if unresolved:
129
+ _print_errors("Could not resolve all catalog path references", unresolved)
130
+ raise typer.Exit(code=1)
131
+
132
+ config = build_config(wb, path_node_ids=path_node_ids, cleanup_stale=cleanup_stale)
133
+ result = controller.sync_from_config(config, wait_for_completion=True)
134
+
135
+ log.info(
136
+ f"Sync complete for '{wb.repo_name}': {result.nodes_synced} nodes, "
137
+ f"{result.edges_synced} edges submitted."
138
+ )
139
+ if result.edges_dropped:
140
+ log.warning(f"{result.edges_dropped} edge(s) dropped during sync:")
141
+ for reason in result.dropped_edge_reasons:
142
+ log.warning(f" - {reason}")
143
+
144
+
145
+ @app.command(name="export")
146
+ def export_repo(
147
+ bigeye_conf: str = global_options.bigeye_conf,
148
+ config_file: str = global_options.config_file,
149
+ workspace: str = global_options.workspace,
150
+ repo_name: str = typer.Option(
151
+ ..., "--repo-name", help="Display name of the custom repository to export."
152
+ ),
153
+ output: Optional[str] = typer.Option(
154
+ None,
155
+ "--output",
156
+ "-o",
157
+ help="Output .xlsx path. Defaults to <repo-name>.xlsx in the current directory.",
158
+ ),
159
+ ):
160
+ """Export a custom repository to an Excel workbook."""
161
+ client = cli_client_factory(bigeye_conf, config_file, workspace)
162
+ controller = CustomRepositoryController(client)
163
+
164
+ try:
165
+ wb = controller.export_repository(repo_name)
166
+ except ValueError as e:
167
+ typer.echo(str(e), err=True)
168
+ raise typer.Exit(code=1)
169
+
170
+ output_path = output or f"{repo_name}.xlsx"
171
+ write_workbook(wb, output_path)
172
+ log.info(
173
+ f"Exported repository '{repo_name}' to {output_path} "
174
+ f"({len(wb.nodes)} nodes, {len(wb.edges)} edges)."
175
+ )
176
+
177
+
178
+ @app.command(name="delete")
179
+ def delete_repo(
180
+ bigeye_conf: str = global_options.bigeye_conf,
181
+ config_file: str = global_options.config_file,
182
+ workspace: str = global_options.workspace,
183
+ repo_name: str = typer.Option(
184
+ ..., "--repo-name", help="Display name of the custom repository to delete."
185
+ ),
186
+ yes: bool = typer.Option(
187
+ False,
188
+ "--yes",
189
+ "-y",
190
+ help="Skip the confirmation prompt.",
191
+ ),
192
+ ):
193
+ """Entirely delete a custom repository, including its nodes, edges, node types,
194
+ and integration type."""
195
+ client = cli_client_factory(bigeye_conf, config_file, workspace)
196
+ controller = CustomRepositoryController(client)
197
+
198
+ if not yes:
199
+ typer.confirm(
200
+ f"Permanently delete custom repository '{repo_name}' and all its nodes, "
201
+ f"edges, node types, and integration type?",
202
+ abort=True,
203
+ )
204
+
205
+ try:
206
+ result = controller.delete_repository(repo_name)
207
+ except ValueError as e:
208
+ typer.echo(str(e), err=True)
209
+ raise typer.Exit(code=1)
210
+
211
+ summary = f"Deleted custom repository '{result.repository_name}' (id {result.repository_id})"
212
+ if result.integration_type_deleted:
213
+ summary += f", its integration type, and {result.node_types_deleted} node type(s)"
214
+ else:
215
+ summary += " (integration type retained — shared by another repository)"
216
+ log.info(summary + ".")
@@ -8,10 +8,23 @@ from bigeye_cli.exceptions.exceptions import InvalidEntityException
8
8
  from bigeye_cli.functions import cli_client_factory
9
9
  from bigeye_cli import global_options
10
10
  from bigeye_sdk.controller.lineage_controller import LineageController
11
+ from bigeye_sdk.controller.lineage_custom_reporting_controller import LineageCustomReporting
11
12
  from bigeye_sdk.model.enums import MatchType
12
13
  from bigeye_sdk.log import get_logger
13
14
  from bigeye_sdk.model.lineage_facade import LineageConfigurationFile, SimpleLineageConfigurationFile, \
14
15
  LineageColumnOverride
16
+ from bigeye_sdk.model.lineage_end_to_end import (
17
+ DEFAULT_MAX_PATHS,
18
+ EndToEndDirection,
19
+ Granularity,
20
+ default_output_filename,
21
+ )
22
+ from bigeye_sdk.model.lineage_graph_export import (
23
+ MANIFEST_FILENAME,
24
+ GraphContent,
25
+ GraphDirection,
26
+ read_fqns_file,
27
+ )
15
28
 
16
29
  log = get_logger(__file__)
17
30
 
@@ -224,3 +237,135 @@ def infer_relations(
224
237
  tables=matching_tables,
225
238
  purge_lineage=purge_lineage
226
239
  )
240
+
241
+
242
+ @app.command(name="export-graphs")
243
+ def export_graphs(
244
+ bigeye_conf: str = global_options.bigeye_conf,
245
+ config_file: str = global_options.config_file,
246
+ workspace: str = global_options.workspace,
247
+ fqns_file: str = typer.Option(
248
+ ...,
249
+ "--fqns-file",
250
+ help="Path to a CSV with a single column of fully-qualified catalog names.",
251
+ ),
252
+ direction: GraphDirection = typer.Option(
253
+ GraphDirection.BOTH,
254
+ "--direction",
255
+ help="Direction to traverse: upstream, downstream, or both.",
256
+ case_sensitive=False,
257
+ ),
258
+ content: GraphContent = typer.Option(
259
+ GraphContent.ALL,
260
+ "--content",
261
+ help="What each per-graph report contains: all, nodes, edges, or attributes.",
262
+ case_sensitive=False,
263
+ ),
264
+ include_etl: bool = typer.Option(
265
+ True,
266
+ "--include-etl/--no-include-etl",
267
+ help="Include or exclude ETL operator nodes. Defaults to including them.",
268
+ ),
269
+ output: Optional[str] = typer.Option(
270
+ None,
271
+ "--output",
272
+ "-o",
273
+ help="Output .zip path. Defaults to lineage_graphs.zip in the current directory.",
274
+ ),
275
+ ):
276
+ """Bulk-export lineage graphs for a list of FQNs into a single zip.
277
+
278
+ Reads fully-qualified catalog names from a CSV, downloads each one's lineage graph,
279
+ and writes one folder per FQN (nodes/edges/attributes) plus a top-level manifest of
280
+ successes and failures.
281
+ """
282
+ client = cli_client_factory(bigeye_conf, config_file, workspace)
283
+ controller = LineageCustomReporting(client)
284
+
285
+ try:
286
+ fqns = read_fqns_file(fqns_file)
287
+ except OSError as e:
288
+ typer.echo(f"Could not read FQNs file '{fqns_file}': {e}", err=True)
289
+ raise typer.Exit(code=1)
290
+
291
+ if not fqns:
292
+ typer.echo(f"No FQNs found in '{fqns_file}'.", err=True)
293
+ raise typer.Exit(code=1)
294
+
295
+ output_path = output or "lineage_graphs.zip"
296
+ summary = controller.export_graphs(
297
+ fqns=fqns,
298
+ direction=direction,
299
+ content=content,
300
+ include_etl=include_etl,
301
+ output_path=output_path,
302
+ )
303
+
304
+ log.info(
305
+ f"Exported {len(summary.succeeded)} of {len(fqns)} lineage graph(s) to "
306
+ f"{output_path} ({len(summary.failed)} failed). See {MANIFEST_FILENAME} in the zip."
307
+ )
308
+ for entry in summary.failed:
309
+ log.warning(f" {entry.fqn}: {entry.error}")
310
+
311
+
312
+ @app.command(name="export-end-to-end")
313
+ def export_end_to_end(
314
+ bigeye_conf: str = global_options.bigeye_conf,
315
+ config_file: str = global_options.config_file,
316
+ workspace: str = global_options.workspace,
317
+ root: List[str] = typer.Option(
318
+ ...,
319
+ "--root",
320
+ help="A starting point: a schema/table/column warehouse FQN or a custom node "
321
+ "identifier. Repeatable to trace several roots into one CSV.",
322
+ ),
323
+ direction: EndToEndDirection = typer.Option(
324
+ EndToEndDirection.BOTH,
325
+ "--direction",
326
+ help="Direction to trace: upstream, downstream, or both.",
327
+ case_sensitive=False,
328
+ ),
329
+ granularity: Optional[Granularity] = typer.Option(
330
+ None,
331
+ "--granularity",
332
+ help="Hop level: schema, table, or column. Defaults to each root's own level.",
333
+ case_sensitive=False,
334
+ ),
335
+ max_paths: int = typer.Option(
336
+ DEFAULT_MAX_PATHS,
337
+ "--max-paths",
338
+ help="Per-root cap on enumerated paths. Truncation is logged, never silent.",
339
+ ),
340
+ output: Optional[str] = typer.Option(
341
+ None,
342
+ "--output",
343
+ "-o",
344
+ help="Output .csv path. Defaults to end_to_end_<root>.csv in the current directory.",
345
+ ),
346
+ ):
347
+ """Export complete end-to-end lineage paths for one or more roots into a CSV.
348
+
349
+ Each row is one full lineage path and each Hop_* column is one object along it;
350
+ the CSV widens to the longest path discovered. Only lineage edges become hops,
351
+ collapsed to the chosen (or root-inferred) granularity — column/field hops roll
352
+ up to their containing table/object (warehouse tables, ETL targets, BI objects).
353
+ """
354
+ client = cli_client_factory(bigeye_conf, config_file, workspace)
355
+ controller = LineageCustomReporting(client)
356
+
357
+ output_path = output or default_output_filename(root)
358
+ summary = controller.export_end_to_end(
359
+ roots=root,
360
+ direction=direction,
361
+ granularity=granularity,
362
+ output_path=output_path,
363
+ max_paths=max_paths,
364
+ )
365
+
366
+ log.info(
367
+ f"Wrote {len(summary.rows)} lineage path(s) for {len(summary.succeeded)} of "
368
+ f"{len(root)} root(s) to {output_path} ({len(summary.failed)} failed)."
369
+ )
370
+ for result in summary.failed:
371
+ log.warning(f" {result.root}: {result.error}")
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "bigeye-cli"
3
- version = "0.7.4"
3
+ version = "0.8.0"
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.11.0"
21
21
  click = "^8.1.8"
22
- bigeye-sdk = "^0.8.0"
22
+ bigeye-sdk = "^0.10.0"
23
23
  rich = "^14.1.0"
24
24
  PyGithub = '^1.59.1'
25
25
 
File without changes