bigeye-cli 0.8.4__tar.gz → 0.8.5__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.
- {bigeye_cli-0.8.4 → bigeye_cli-0.8.5}/PKG-INFO +3 -2
- {bigeye_cli-0.8.4 → bigeye_cli-0.8.5}/bigeye_cli/CLI_DOCS.md +2 -1
- {bigeye_cli-0.8.4 → bigeye_cli-0.8.5}/bigeye_cli/bigconfig/bigconfig_commands.py +56 -33
- {bigeye_cli-0.8.4 → bigeye_cli-0.8.5}/bigeye_cli/lineage/lineage_commands.py +7 -0
- {bigeye_cli-0.8.4 → bigeye_cli-0.8.5}/pyproject.toml +1 -1
- {bigeye_cli-0.8.4 → bigeye_cli-0.8.5}/LICENSE +0 -0
- {bigeye_cli-0.8.4 → bigeye_cli-0.8.5}/bigeye_cli/__init__.py +0 -0
- {bigeye_cli-0.8.4 → bigeye_cli-0.8.5}/bigeye_cli/__main__.py +0 -0
- {bigeye_cli-0.8.4 → bigeye_cli-0.8.5}/bigeye_cli/__version__.py +0 -0
- {bigeye_cli-0.8.4 → bigeye_cli-0.8.5}/bigeye_cli/bigconfig/__init__.py +0 -0
- {bigeye_cli-0.8.4 → bigeye_cli-0.8.5}/bigeye_cli/bigconfig/bigconfig_options.py +0 -0
- {bigeye_cli-0.8.4 → bigeye_cli-0.8.5}/bigeye_cli/catalog/__init__.py +0 -0
- {bigeye_cli-0.8.4 → bigeye_cli-0.8.5}/bigeye_cli/catalog/catalog_commands.py +0 -0
- {bigeye_cli-0.8.4 → bigeye_cli-0.8.5}/bigeye_cli/catalog/custom_repo_commands.py +0 -0
- {bigeye_cli-0.8.4 → bigeye_cli-0.8.5}/bigeye_cli/collections/__init__.py +0 -0
- {bigeye_cli-0.8.4 → bigeye_cli-0.8.5}/bigeye_cli/collections/collection_commands.py +0 -0
- {bigeye_cli-0.8.4 → bigeye_cli-0.8.5}/bigeye_cli/configure/__init__.py +0 -0
- {bigeye_cli-0.8.4 → bigeye_cli-0.8.5}/bigeye_cli/configure/configure_commands.py +0 -0
- {bigeye_cli-0.8.4 → bigeye_cli-0.8.5}/bigeye_cli/deltas/__init__.py +0 -0
- {bigeye_cli-0.8.4 → bigeye_cli-0.8.5}/bigeye_cli/deltas/deltas_commands.py +0 -0
- {bigeye_cli-0.8.4 → bigeye_cli-0.8.5}/bigeye_cli/enums.py +0 -0
- {bigeye_cli-0.8.4 → bigeye_cli-0.8.5}/bigeye_cli/exceptions/__init__.py +0 -0
- {bigeye_cli-0.8.4 → bigeye_cli-0.8.5}/bigeye_cli/exceptions/exceptions.py +0 -0
- {bigeye_cli-0.8.4 → bigeye_cli-0.8.5}/bigeye_cli/functions.py +0 -0
- {bigeye_cli-0.8.4 → bigeye_cli-0.8.5}/bigeye_cli/global_options.py +0 -0
- {bigeye_cli-0.8.4 → bigeye_cli-0.8.5}/bigeye_cli/issues/__init__.py +0 -0
- {bigeye_cli-0.8.4 → bigeye_cli-0.8.5}/bigeye_cli/issues/issue_commands.py +0 -0
- {bigeye_cli-0.8.4 → bigeye_cli-0.8.5}/bigeye_cli/lineage/__init__.py +0 -0
- {bigeye_cli-0.8.4 → bigeye_cli-0.8.5}/bigeye_cli/metric/__init__.py +0 -0
- {bigeye_cli-0.8.4 → bigeye_cli-0.8.5}/bigeye_cli/metric/metric_commands.py +0 -0
- {bigeye_cli-0.8.4 → bigeye_cli-0.8.5}/bigeye_cli/model/__init__.py +0 -0
- {bigeye_cli-0.8.4 → bigeye_cli-0.8.5}/bigeye_cli/model/cicd_conf.py +0 -0
- {bigeye_cli-0.8.4 → bigeye_cli-0.8.5}/bigeye_cli/model/github_report.py +0 -0
- {bigeye_cli-0.8.4 → bigeye_cli-0.8.5}/bigeye_cli/model/vendor_report.py +0 -0
- {bigeye_cli-0.8.4 → bigeye_cli-0.8.5}/bigeye_cli/workspace/__init__.py +0 -0
- {bigeye_cli-0.8.4 → bigeye_cli-0.8.5}/bigeye_cli/workspace/workspace_commands.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: bigeye-cli
|
|
3
|
-
Version: 0.8.
|
|
3
|
+
Version: 0.8.5
|
|
4
4
|
Summary: Bigeye CLI offers developer tools for maintaining your developer workspace.
|
|
5
5
|
Home-page: https://docs.bigeye.com/docs
|
|
6
6
|
License: Proprietary
|
|
@@ -18,7 +18,7 @@ Requires-Dist: rich (>=14.1.0,<15.0.0)
|
|
|
18
18
|
Description-Content-Type: text/markdown
|
|
19
19
|
|
|
20
20
|
# **Bigeye CLI**
|
|
21
|
-
Version: 0.8.
|
|
21
|
+
Version: 0.8.5
|
|
22
22
|
## Installation
|
|
23
23
|
|
|
24
24
|
**Setting up your local/build environment**
|
|
@@ -2046,6 +2046,7 @@ $ bigeye lineage export-end-to-end [OPTIONS]
|
|
|
2046
2046
|
* `--direction [upstream|downstream|both]`: Direction to trace: upstream, downstream, or both. [default: both]
|
|
2047
2047
|
* `--granularity [schema|table|column]`: Hop level: schema, table, or column. Defaults to each root's own level.
|
|
2048
2048
|
* `--max-paths INTEGER`: Per-root cap on enumerated paths. Truncation is logged, never silent. [default: 10000]
|
|
2049
|
+
* `--include-etl / --no-include-etl`: Include or exclude ETL operator nodes as hops. When excluded, paths are stitched across removed ETL nodes (A -> ETL -> C becomes A -> C). Defaults to including them. [default: include-etl]
|
|
2049
2050
|
* `--depth INTEGER`: Per-window traversal depth. When set, each root's graph is fetched in bounded depth-hop windows, re-rooting at the lineage frontier until the lineage is exhausted end-to-end. This escapes the backend's per-request depth ceiling (lineage.max_depth) that truncates a single full fetch, and keeps each request small so very large graphs don't fail. Omit to request the graph in one call (the previous behavior, capped at the backend depth limit).
|
|
2050
2051
|
* `--concurrency INTEGER`: Max concurrent window requests when --depth is used. Lower it to reduce client memory and server load on wide graphs. Ignored without --depth. [default: 8]
|
|
2051
2052
|
* `-o, --output TEXT`: Output .csv path. Defaults to end_to_end_<root>.csv in the current directory.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# **Bigeye CLI**
|
|
2
|
-
Version: 0.8.
|
|
2
|
+
Version: 0.8.5
|
|
3
3
|
## Installation
|
|
4
4
|
|
|
5
5
|
**Setting up your local/build environment**
|
|
@@ -2027,6 +2027,7 @@ $ bigeye lineage export-end-to-end [OPTIONS]
|
|
|
2027
2027
|
* `--direction [upstream|downstream|both]`: Direction to trace: upstream, downstream, or both. [default: both]
|
|
2028
2028
|
* `--granularity [schema|table|column]`: Hop level: schema, table, or column. Defaults to each root's own level.
|
|
2029
2029
|
* `--max-paths INTEGER`: Per-root cap on enumerated paths. Truncation is logged, never silent. [default: 10000]
|
|
2030
|
+
* `--include-etl / --no-include-etl`: Include or exclude ETL operator nodes as hops. When excluded, paths are stitched across removed ETL nodes (A -> ETL -> C becomes A -> C). Defaults to including them. [default: include-etl]
|
|
2030
2031
|
* `--depth INTEGER`: Per-window traversal depth. When set, each root's graph is fetched in bounded depth-hop windows, re-rooting at the lineage frontier until the lineage is exhausted end-to-end. This escapes the backend's per-request depth ceiling (lineage.max_depth) that truncates a single full fetch, and keeps each request small so very large graphs don't fail. Omit to request the graph in one call (the previous behavior, capped at the backend depth limit).
|
|
2031
2032
|
* `--concurrency INTEGER`: Max concurrent window requests when --depth is used. Lower it to reduce client memory and server load on wide graphs. Ignored without --depth. [default: 8]
|
|
2032
2033
|
* `-o, --output TEXT`: Output .csv path. Defaults to end_to_end_<root>.csv in the current directory.
|
|
@@ -2,7 +2,7 @@ import os
|
|
|
2
2
|
import warnings
|
|
3
3
|
from datetime import datetime
|
|
4
4
|
from pathlib import Path
|
|
5
|
-
from typing import Optional, List
|
|
5
|
+
from typing import Optional, List, Dict
|
|
6
6
|
|
|
7
7
|
import typer
|
|
8
8
|
|
|
@@ -14,7 +14,9 @@ from bigeye_sdk.bigconfig_validation.big_config_reports import all_reports
|
|
|
14
14
|
from bigeye_sdk.controller.metric_controller import MetricController, filter_metrics_by_namespace
|
|
15
15
|
from bigeye_sdk.functions.file_functs import sanitize_filename
|
|
16
16
|
from bigeye_sdk.controller.metric_suite_controller import MetricSuiteController
|
|
17
|
-
from bigeye_sdk.generated.com.bigeye.models.generated import
|
|
17
|
+
from bigeye_sdk.generated.com.bigeye.models.generated import (
|
|
18
|
+
MetricInfoList, MetricInfo
|
|
19
|
+
)
|
|
18
20
|
from bigeye_sdk.model.big_config import BigConfig
|
|
19
21
|
from bigeye_sdk.model.protobuf_message_facade import SimpleCollection
|
|
20
22
|
from bigeye_sdk.log import get_logger
|
|
@@ -192,6 +194,14 @@ def export(
|
|
|
192
194
|
"collection id (-cid), table id (-tid), or list of metric ids (-mid). "
|
|
193
195
|
)
|
|
194
196
|
|
|
197
|
+
# Collect the SQL (custom) rules in scope up front. A scope can contain only SQL
|
|
198
|
+
# rules and no metrics, so both the table guard below and the main "nothing to
|
|
199
|
+
# export" guard consult this to avoid bailing out before the rules are exported.
|
|
200
|
+
# `namespace` scopes the rules the same way it scopes metrics below.
|
|
201
|
+
sql_rule_deployments = mc.collect_sql_rule_deployments(
|
|
202
|
+
collection_id=collection_id, table_id=table_id, namespace=namespace
|
|
203
|
+
)
|
|
204
|
+
|
|
195
205
|
# Add metric ids if passed
|
|
196
206
|
if metric_ids:
|
|
197
207
|
final_metric_ids.extend(metric_ids)
|
|
@@ -209,16 +219,22 @@ def export(
|
|
|
209
219
|
table_ids=[table_id]
|
|
210
220
|
).metrics
|
|
211
221
|
final_metric_ids.extend([m.metric_configuration.id for m in metrics_from_table])
|
|
212
|
-
if not metrics_from_table:
|
|
222
|
+
if not metrics_from_table and not sql_rule_deployments:
|
|
213
223
|
raise typer.BadParameter(
|
|
214
|
-
f"No metrics found for given table id. Please check arguments and try again."
|
|
224
|
+
f"No metrics or SQL rules found for given table id. Please check arguments and try again."
|
|
215
225
|
)
|
|
216
|
-
if not collection_id:
|
|
226
|
+
if metrics_from_table and not collection_id:
|
|
217
227
|
collection.name = metrics_from_table[0].metric_metadata.dataset_name
|
|
218
228
|
|
|
219
|
-
# Pull raw metric info. Converting to protobuf objects complicates default and zero values
|
|
220
|
-
|
|
221
|
-
|
|
229
|
+
# Pull raw metric info. Converting to protobuf objects complicates default and zero values
|
|
230
|
+
# unnecessarily. NOTE: the API treats an empty metric_ids list as "no filter" and returns
|
|
231
|
+
# every metric in the workspace, so only fetch when at least one metric is in scope --
|
|
232
|
+
# otherwise a metrics-less scope (e.g. a collection of only SQL rules) would export everything.
|
|
233
|
+
raw_metrics: List[dict] = (
|
|
234
|
+
client.get_metric_info_batch_post(metric_ids=final_metric_ids, return_raw_response=True)
|
|
235
|
+
if final_metric_ids
|
|
236
|
+
else []
|
|
237
|
+
)
|
|
222
238
|
|
|
223
239
|
# `namespace` is used ONLY to filter which metrics get exported. It is
|
|
224
240
|
# intentionally NOT written into the generated bigconfig file (nor the shared
|
|
@@ -234,40 +250,47 @@ def export(
|
|
|
234
250
|
if not output_path:
|
|
235
251
|
output_path = client.config.bigconfig_output_path or Path.cwd()
|
|
236
252
|
|
|
237
|
-
if not raw_metrics:
|
|
253
|
+
if not raw_metrics and not sql_rule_deployments:
|
|
238
254
|
raise typer.BadParameter(
|
|
239
|
-
"No metrics found for given arguments. Please check again."
|
|
255
|
+
"No metrics or SQL rules found for given arguments. Please check again."
|
|
240
256
|
)
|
|
241
257
|
|
|
258
|
+
if raw_metrics:
|
|
259
|
+
if not use_v1:
|
|
260
|
+
mc.infos_to_convert = raw_metrics
|
|
261
|
+
template_smds = mc.collect_template_smds_from_inputs()
|
|
262
|
+
mc.write_or_update_smd_library(
|
|
263
|
+
template_smds_from_inputs=template_smds, auto_apply=auto_apply_on_indexing
|
|
264
|
+
)
|
|
265
|
+
typer.secho(
|
|
266
|
+
f"\nUpdated SMD library at: {mc.saved_metric_def_path}\n", fg="green", bold=True
|
|
267
|
+
)
|
|
242
268
|
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
template_smds = mc.collect_template_smds_from_inputs()
|
|
246
|
-
mc.write_or_update_smd_library(
|
|
247
|
-
template_smds_from_inputs=template_smds, auto_apply=auto_apply_on_indexing
|
|
248
|
-
)
|
|
249
|
-
typer.secho(
|
|
250
|
-
f"\nUpdated SMD library at: {mc.saved_metric_def_path}\n", fg="green", bold=True
|
|
251
|
-
)
|
|
252
|
-
|
|
253
|
-
if smd_only:
|
|
254
|
-
raise typer.Exit(0)
|
|
269
|
+
if smd_only:
|
|
270
|
+
raise typer.Exit(0)
|
|
255
271
|
|
|
256
|
-
|
|
272
|
+
bc = mc.to_bigconfig_yaml(collection=collection, auto_apply_on_indexing=auto_apply_on_indexing)
|
|
257
273
|
|
|
258
|
-
|
|
259
|
-
|
|
274
|
+
# Dumping **kwargs messes up the formatting
|
|
275
|
+
bigconfig = BigConfig(type=bc["type"])
|
|
260
276
|
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
277
|
+
if bc.get("auto_apply_on_indexing", None):
|
|
278
|
+
bigconfig.auto_apply_on_indexing = True
|
|
279
|
+
if bc.get("tag_definitions", None):
|
|
280
|
+
bigconfig.tag_definitions = bc.get("tag_definitions")
|
|
265
281
|
|
|
266
|
-
|
|
282
|
+
bigconfig.tag_deployments = bc.get("tag_deployments")
|
|
283
|
+
else:
|
|
284
|
+
bigconfig = mc.metric_info_to_bigconfig(
|
|
285
|
+
metric_info=MetricInfoList(metrics=[MetricInfo().from_dict(m) for m in raw_metrics]), collection=collection
|
|
286
|
+
)
|
|
267
287
|
else:
|
|
268
|
-
bigconfig
|
|
269
|
-
|
|
270
|
-
|
|
288
|
+
# Only SQL rules are in scope: emit a minimal bigconfig carrying just the rules.
|
|
289
|
+
bigconfig = BigConfig(type='BIGCONFIG_FILE')
|
|
290
|
+
|
|
291
|
+
# Export custom (SQL) rules in scope alongside the metrics, in the same format apply reads.
|
|
292
|
+
if sql_rule_deployments:
|
|
293
|
+
bigconfig.sql_rules = sql_rule_deployments
|
|
271
294
|
|
|
272
295
|
file_name = sanitize_filename(collection.name)
|
|
273
296
|
output = bigconfig.save(
|
|
@@ -366,6 +366,12 @@ def export_end_to_end(
|
|
|
366
366
|
"--max-paths",
|
|
367
367
|
help="Per-root cap on enumerated paths. Truncation is logged, never silent.",
|
|
368
368
|
),
|
|
369
|
+
include_etl: bool = typer.Option(
|
|
370
|
+
True,
|
|
371
|
+
"--include-etl/--no-include-etl",
|
|
372
|
+
help="Include or exclude ETL operator nodes as hops. When excluded, paths are stitched "
|
|
373
|
+
"across removed ETL nodes (A -> ETL -> C becomes A -> C). Defaults to including them.",
|
|
374
|
+
),
|
|
369
375
|
depth: Optional[int] = typer.Option(
|
|
370
376
|
None,
|
|
371
377
|
"--depth",
|
|
@@ -411,6 +417,7 @@ def export_end_to_end(
|
|
|
411
417
|
max_paths=max_paths,
|
|
412
418
|
depth=depth,
|
|
413
419
|
concurrency=concurrency,
|
|
420
|
+
include_etl=include_etl,
|
|
414
421
|
)
|
|
415
422
|
|
|
416
423
|
log.info(
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|