sql-glider 0.1.24__tar.gz → 0.1.26__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.
- {sql_glider-0.1.24 → sql_glider-0.1.26}/PKG-INFO +1 -1
- {sql_glider-0.1.24 → sql_glider-0.1.26}/docs/docs/graph-lineage.md +14 -8
- sql_glider-0.1.26/docs/docs/static/plotly-dash-example.png +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/examples/plotly_viewer.py +12 -3
- sql_glider-0.1.26/graph.json +5319 -0
- sql_glider-0.1.26/lineage.json +0 -0
- sql_glider-0.1.26/mm.md +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/src/sqlglider/_version.py +2 -2
- {sql_glider-0.1.24 → sql_glider-0.1.26}/src/sqlglider/cli.py +7 -3
- {sql_glider-0.1.24 → sql_glider-0.1.26}/src/sqlglider/graph/diagram_formatters.py +141 -35
- {sql_glider-0.1.24 → sql_glider-0.1.26}/tests/sqlglider/graph/test_diagram_formatters.py +150 -24
- {sql_glider-0.1.24 → sql_glider-0.1.26}/.github/workflows/ci.yml +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/.github/workflows/docs.yml +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/.github/workflows/publish.yml +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/.gitignore +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/.python-version +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/ARCHITECTURE.md +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/CLAUDE.md +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/LICENSE +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/README.md +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/docs/.github/workflows/docs.yml +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/docs/docs/catalogs.md +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/docs/docs/index.md +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/docs/docs/static/sqlglider-logo-transparent.png +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/docs/docs/templating.md +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/docs/zensical.toml +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/plans/2025-12-05-column-level-lineage.md +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/plans/2025-12-05-reverse-lineage.md +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/plans/2025-12-06-config-file-support.md +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/plans/2025-12-06-graph-lineage.md +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/plans/2025-12-06-unify-single-multi-query.md +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/plans/2025-12-07-sample-data-model.md +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/plans/2025-12-07-sql-templating.md +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/plans/2025-12-08-tables-command.md +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/plans/2025-12-09-graph-query-paths.md +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/plans/2025-12-13-dissect-command.md +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/plans/2025-12-14-tables-pull-command.md +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/plans/2026-01-25-fix-union-lineage-chain.md +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/plans/2026-01-26-file-scoped-schema-context.md +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/plans/2026-01-28-sparksql-table-extraction.md +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/plans/2026-01-29-no-star-flag.md +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/plans/2026-01-29-resolve-schema.md +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/plans/2026-01-29-schema-pruning-optimization.md +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/plans/2026-01-29-tables-scrape-command.md +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/plans/2026-02-02-diagram-output-formats.md +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/pyproject.toml +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/sample_data_model/README.md +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/sample_data_model/business/expire_dim_customer.sql +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/sample_data_model/business/load_fact_orders.sql +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/sample_data_model/business/load_fact_payments.sql +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/sample_data_model/business/merge_dim_customer.sql +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/sample_data_model/business/merge_dim_product.sql +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/sample_data_model/business/update_dim_customer_metrics.sql +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/sample_data_model/complex/conditional_merge.sql +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/sample_data_model/complex/cte_insert.sql +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/sample_data_model/complex/multi_table_transform.sql +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/sample_data_model/ddl/dim_customer.sql +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/sample_data_model/ddl/dim_product.sql +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/sample_data_model/ddl/fact_orders.sql +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/sample_data_model/ddl/fact_payments.sql +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/sample_data_model/ddl/raw_addresses.sql +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/sample_data_model/ddl/raw_customers.sql +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/sample_data_model/ddl/raw_order_items.sql +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/sample_data_model/ddl/raw_orders.sql +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/sample_data_model/ddl/raw_payments.sql +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/sample_data_model/ddl/raw_products.sql +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/sample_data_model/ddl/stg_customers.sql +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/sample_data_model/ddl/stg_orders.sql +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/sample_data_model/ddl/stg_payments.sql +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/sample_data_model/ddl/stg_products.sql +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/sample_data_model/incremental/incr_fact_orders.sql +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/sample_data_model/incremental/incr_fact_payments.sql +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/sample_data_model/incremental/incr_pres_sales_summary.sql +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/sample_data_model/maintenance/delete_expired_customers.sql +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/sample_data_model/maintenance/update_product_status.sql +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/sample_data_model/presentation/load_pres_customer_360.sql +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/sample_data_model/presentation/load_pres_customer_cohort.sql +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/sample_data_model/presentation/load_pres_product_performance.sql +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/sample_data_model/presentation/load_pres_sales_summary.sql +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/sample_data_model/staging/load_stg_customers.sql +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/sample_data_model/staging/load_stg_orders.sql +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/sample_data_model/staging/load_stg_payments.sql +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/sample_data_model/staging/load_stg_products.sql +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/sqlglider.toml.example +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/src/sqlglider/__init__.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/src/sqlglider/catalog/__init__.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/src/sqlglider/catalog/base.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/src/sqlglider/catalog/databricks.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/src/sqlglider/catalog/registry.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/src/sqlglider/dissection/__init__.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/src/sqlglider/dissection/analyzer.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/src/sqlglider/dissection/formatters.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/src/sqlglider/dissection/models.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/src/sqlglider/global_models.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/src/sqlglider/graph/__init__.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/src/sqlglider/graph/builder.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/src/sqlglider/graph/formatters.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/src/sqlglider/graph/merge.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/src/sqlglider/graph/models.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/src/sqlglider/graph/query.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/src/sqlglider/graph/serialization.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/src/sqlglider/lineage/__init__.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/src/sqlglider/lineage/analyzer.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/src/sqlglider/lineage/formatters.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/src/sqlglider/schema/__init__.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/src/sqlglider/schema/extractor.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/src/sqlglider/templating/__init__.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/src/sqlglider/templating/base.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/src/sqlglider/templating/jinja.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/src/sqlglider/templating/registry.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/src/sqlglider/templating/variables.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/src/sqlglider/utils/__init__.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/src/sqlglider/utils/config.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/src/sqlglider/utils/file_utils.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/src/sqlglider/utils/schema.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/tests/__init__.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/tests/fixtures/multi_file_queries/analytics_pipeline.sql +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/tests/fixtures/multi_file_queries/analytics_pipeline_union_merge.sql +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/tests/fixtures/multi_file_queries/customers.sql +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/tests/fixtures/multi_file_queries/orders.sql +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/tests/fixtures/multi_file_queries/reports.sql +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/tests/fixtures/multi_file_queries/view_based_merge.sql +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/tests/fixtures/original_queries/test_cte.sql +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/tests/fixtures/original_queries/test_cte_query.sql +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/tests/fixtures/original_queries/test_cte_view_star.sql +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/tests/fixtures/original_queries/test_generated_column_query.sql +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/tests/fixtures/original_queries/test_multi.sql +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/tests/fixtures/original_queries/test_multi_query.sql +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/tests/fixtures/original_queries/test_single_query.sql +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/tests/fixtures/original_queries/test_subquery.sql +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/tests/fixtures/original_queries/test_tables.sql +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/tests/fixtures/original_queries/test_view.sql +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/tests/fixtures/original_queries/test_view_window_cte.sql +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/tests/fixtures/sample_manifest.csv +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/tests/sqlglider/__init__.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/tests/sqlglider/catalog/__init__.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/tests/sqlglider/catalog/test_base.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/tests/sqlglider/catalog/test_databricks.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/tests/sqlglider/catalog/test_registry.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/tests/sqlglider/dissection/__init__.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/tests/sqlglider/dissection/test_analyzer.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/tests/sqlglider/dissection/test_formatters.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/tests/sqlglider/dissection/test_models.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/tests/sqlglider/graph/__init__.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/tests/sqlglider/graph/test_builder.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/tests/sqlglider/graph/test_formatters.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/tests/sqlglider/graph/test_merge.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/tests/sqlglider/graph/test_models.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/tests/sqlglider/graph/test_query.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/tests/sqlglider/graph/test_serialization.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/tests/sqlglider/lineage/__init__.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/tests/sqlglider/lineage/test_analyzer.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/tests/sqlglider/lineage/test_formatters.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/tests/sqlglider/schema/__init__.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/tests/sqlglider/schema/test_extractor.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/tests/sqlglider/templating/__init__.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/tests/sqlglider/templating/test_base.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/tests/sqlglider/templating/test_jinja.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/tests/sqlglider/templating/test_registry.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/tests/sqlglider/templating/test_variables.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/tests/sqlglider/test_cli.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/tests/sqlglider/utils/__init__.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/tests/sqlglider/utils/test_config.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/tests/sqlglider/utils/test_file_utils.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/tests/sqlglider/utils/test_schema.py +0 -0
- {sql_glider-0.1.24 → sql_glider-0.1.26}/uv.lock +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sql-glider
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.26
|
|
4
4
|
Summary: SQL Utility Toolkit for better understanding, use, and governance of your queries in a native environment.
|
|
5
5
|
Project-URL: Homepage, https://github.com/rycowhi/sql-glider/
|
|
6
6
|
Project-URL: Repository, https://github.com/rycowhi/sql-glider/
|
|
@@ -258,7 +258,7 @@ sqlglider graph query graph.json --downstream orders.order_total -f dot
|
|
|
258
258
|
sqlglider graph query graph.json --upstream total_spent -f plotly
|
|
259
259
|
```
|
|
260
260
|
|
|
261
|
-
Query diagrams include color-coded nodes and a legend:
|
|
261
|
+
Query diagrams include color-coded nodes, edge labels showing the source SQL file, and a legend:
|
|
262
262
|
|
|
263
263
|
| Color | Meaning |
|
|
264
264
|
|--------|---------|
|
|
@@ -266,6 +266,8 @@ Query diagrams include color-coded nodes and a legend:
|
|
|
266
266
|
| Teal | Root node (no upstream dependencies) |
|
|
267
267
|
| Violet | Leaf node (no downstream consumers) |
|
|
268
268
|
|
|
269
|
+
Each edge in the diagram is labeled with the SQL filename that defines that relationship, making it easy to trace data flow back to the source code.
|
|
270
|
+
|
|
269
271
|
**Example:** Imagine a pipeline where a `revenue` report column draws from multiple sources through several transformation layers. Querying `--upstream revenue` would produce a diagram like this:
|
|
270
272
|
|
|
271
273
|
```mermaid
|
|
@@ -277,12 +279,12 @@ flowchart TD
|
|
|
277
279
|
staging_orders_tax_amount["staging_orders.tax_amount"]
|
|
278
280
|
mart_orders_total_usd["mart_orders.total_usd"]
|
|
279
281
|
revenue["revenue"]
|
|
280
|
-
raw_orders_amount
|
|
281
|
-
raw_orders_tax
|
|
282
|
-
staging_orders_subtotal
|
|
283
|
-
staging_orders_tax_amount
|
|
284
|
-
raw_exchange_rates_rate
|
|
285
|
-
mart_orders_total_usd
|
|
282
|
+
raw_orders_amount -->|staging_orders.sql| staging_orders_subtotal
|
|
283
|
+
raw_orders_tax -->|staging_orders.sql| staging_orders_tax_amount
|
|
284
|
+
staging_orders_subtotal -->|mart_orders.sql| mart_orders_total_usd
|
|
285
|
+
staging_orders_tax_amount -->|mart_orders.sql| mart_orders_total_usd
|
|
286
|
+
raw_exchange_rates_rate -->|mart_orders.sql| mart_orders_total_usd
|
|
287
|
+
mart_orders_total_usd -->|reports.sql| revenue
|
|
286
288
|
|
|
287
289
|
style revenue fill:#e6a843,stroke:#b8860b,stroke-width:3px
|
|
288
290
|
style raw_orders_amount fill:#4ecdc4,stroke:#2b9e96
|
|
@@ -299,7 +301,7 @@ flowchart TD
|
|
|
299
301
|
style legend_leaf fill:#c084fc,stroke:#7c3aed
|
|
300
302
|
```
|
|
301
303
|
|
|
302
|
-
The amber node is the column you queried (`revenue`), teal nodes are ultimate root sources with no further upstream dependencies (`raw_orders.amount`, `raw_orders.tax`, `raw_exchange_rates.rate`), and intermediate nodes (`staging_orders.*`, `mart_orders.*`) appear in the default style. The legend is included automatically.
|
|
304
|
+
The amber node is the column you queried (`revenue`), teal nodes are ultimate root sources with no further upstream dependencies (`raw_orders.amount`, `raw_orders.tax`, `raw_exchange_rates.rate`), and intermediate nodes (`staging_orders.*`, `mart_orders.*`) appear in the default style. Each edge is labeled with the SQL file that defines that relationship. The legend is included automatically.
|
|
303
305
|
|
|
304
306
|
### Mermaid Markdown Format
|
|
305
307
|
|
|
@@ -356,6 +358,10 @@ The Plotly output uses the same color scheme as Mermaid and DOT diagrams:
|
|
|
356
358
|
| Teal | Root node (no upstream dependencies) |
|
|
357
359
|
| Violet | Leaf node (no downstream consumers) |
|
|
358
360
|
|
|
361
|
+
See an example of a plot loaded into Dash below:
|
|
362
|
+
|
|
363
|
+

|
|
364
|
+
|
|
359
365
|
### Rendering Diagrams
|
|
360
366
|
|
|
361
367
|
**Mermaid:**
|
|
Binary file
|
|
@@ -33,13 +33,19 @@ def load_figure(source: str | Path | None = None) -> dict:
|
|
|
33
33
|
# Read from stdin
|
|
34
34
|
if sys.stdin.isatty():
|
|
35
35
|
print("Usage: python plotly_viewer.py <lineage.json>", file=sys.stderr)
|
|
36
|
-
print(
|
|
36
|
+
print(
|
|
37
|
+
" or: sqlglider graph visualize graph.json -f plotly | python plotly_viewer.py",
|
|
38
|
+
file=sys.stderr,
|
|
39
|
+
)
|
|
37
40
|
sys.exit(1)
|
|
38
41
|
content = sys.stdin.read()
|
|
39
42
|
if not content.strip():
|
|
40
43
|
print("Error: No input received from stdin", file=sys.stderr)
|
|
41
44
|
print("Note: On Windows, piping may not work reliably.", file=sys.stderr)
|
|
42
|
-
print(
|
|
45
|
+
print(
|
|
46
|
+
"Try: sqlglider graph query ... -f plotly -o output.json",
|
|
47
|
+
file=sys.stderr,
|
|
48
|
+
)
|
|
43
49
|
print("Then: python plotly_viewer.py output.json", file=sys.stderr)
|
|
44
50
|
sys.exit(1)
|
|
45
51
|
else:
|
|
@@ -55,7 +61,10 @@ def load_figure(source: str | Path | None = None) -> dict:
|
|
|
55
61
|
except UnicodeDecodeError:
|
|
56
62
|
continue
|
|
57
63
|
else:
|
|
58
|
-
print(
|
|
64
|
+
print(
|
|
65
|
+
"Error: Could not decode file with UTF-8 or UTF-16 encoding",
|
|
66
|
+
file=sys.stderr,
|
|
67
|
+
)
|
|
59
68
|
sys.exit(1)
|
|
60
69
|
|
|
61
70
|
try:
|