quickdbd-cli 0.3.5__tar.gz → 0.4.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.
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/PKG-INFO +6 -6
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/README.md +5 -5
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/pyproject.toml +1 -1
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/scripts/gen_thumbnails.py +21 -14
- quickdbd_cli-0.4.0/src/quickdbd_cli/__init__.py +1 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/src/quickdbd_cli/cli.py +24 -2
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/src/quickdbd_cli/share.py +16 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/test_gallery.py +1 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/test_home_hook.py +4 -1
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/test_share.py +49 -13
- quickdbd_cli-0.3.5/src/quickdbd_cli/__init__.py +0 -1
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/.gitignore +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/LICENSE +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/NOTICE +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/examples/quickdbd-sample.txt +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/examples/synthetic/finance.txt +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/examples/synthetic/hr.txt +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/examples/synthetic/inventory.txt +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/examples/synthetic/marketing.txt +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/examples/synthetic/qdbd.layout.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/examples/synthetic/sales.txt +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/scripts/build_gallery.py +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/scripts/gen_font_metrics.py +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/scripts/gen_schema.py +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/scripts/import_dbml_corpus.py +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/scripts/release.sh +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/src/quickdbd_cli/__main__.py +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/src/quickdbd_cli/agent.py +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/src/quickdbd_cli/assets/Inter-Bold.ttf +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/src/quickdbd_cli/assets/Inter-Bold.woff2 +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/src/quickdbd_cli/assets/Inter-LICENSE.txt +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/src/quickdbd_cli/assets/Inter-Regular.ttf +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/src/quickdbd_cli/assets/Inter-Regular.woff2 +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/src/quickdbd_cli/assets/editor.js +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/src/quickdbd_cli/assets/elk-LICENSE.md +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/src/quickdbd_cli/assets/elk.bundled.js +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/src/quickdbd_cli/assets/font-metrics.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/src/quickdbd_cli/assets/icon.svg +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/src/quickdbd_cli/assets/render.js +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/src/quickdbd_cli/assets/style.css +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/src/quickdbd_cli/assets/syntax-reference.md +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/src/quickdbd_cli/assets/viewer.js +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/src/quickdbd_cli/convert.py +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/src/quickdbd_cli/dbml.py +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/src/quickdbd_cli/dbt.py +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/src/quickdbd_cli/diff.py +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/src/quickdbd_cli/export.py +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/src/quickdbd_cli/html.py +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/src/quickdbd_cli/jsrt.py +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/src/quickdbd_cli/layout.py +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/src/quickdbd_cli/mcp.py +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/src/quickdbd_cli/measure.py +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/src/quickdbd_cli/model.py +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/src/quickdbd_cli/parser.py +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/src/quickdbd_cli/project.py +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/src/quickdbd_cli/serve.py +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/src/quickdbd_cli/tags.py +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/src/quickdbd_cli/targets.py +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml/team.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/LICENSE +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/README.md +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/binder/alias_of_duplicated_names.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/binder/alias_of_duplicated_names.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/binder/dep.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/binder/dep.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/binder/duplicate_columns.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/binder/duplicate_columns.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/binder/duplicate_enum_field.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/binder/duplicate_enum_field.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/binder/duplicate_name.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/binder/duplicate_name.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/binder/duplicate_names.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/binder/duplicate_names.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/binder/duplicate_table_partial_injections.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/binder/duplicate_table_partial_injections.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/binder/enum_as_default_column_value.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/binder/enum_as_default_column_value.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/binder/enum_name.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/binder/enum_name.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/binder/erroneous.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/binder/erroneous.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/binder/multiple_notes_in_table_group.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/binder/multiple_notes_in_table_group.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/binder/nonexisting_column_in_index.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/binder/nonexisting_column_in_index.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/binder/nonexisting_column_in_index_table_partial.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/binder/nonexisting_column_in_index_table_partial.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/binder/nonexisting_inline_ref_column_in_table.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/binder/nonexisting_inline_ref_column_in_table.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/binder/nonexisting_inline_ref_column_in_table_partial.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/binder/nonexisting_inline_ref_column_in_table_partial.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/binder/ref_validator.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/binder/ref_validator.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/binder/sticky_notes_validator.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/binder/sticky_notes_validator.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/binder/table_partial.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/binder/table_partial.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/binder/unknown_table_group_field.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/binder/unknown_table_group_field.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/array_type.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/array_type.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/checks.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/checks.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/circular_ref_1_inline_1_element.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/circular_ref_1_inline_1_element.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/circular_ref_2_elements.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/circular_ref_2_elements.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/circular_ref_2_inlines.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/circular_ref_2_inlines.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/column_caller_type.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/column_caller_type.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/comment.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/comment.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/composite_pk.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/composite_pk.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/default_tables.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/default_tables.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/dep.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/dep.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/dep_color.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/dep_color.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/dep_duplicate.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/dep_duplicate.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/dep_pipeline.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/dep_pipeline.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/enum_as_default_column_value.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/enum_as_default_column_value.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/enum_tables.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/enum_tables.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/erroneous.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/erroneous.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/general_schema.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/general_schema.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/header_color_tables.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/header_color_tables.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/index_table_partial.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/index_table_partial.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/index_tables.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/index_tables.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/metadata.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/metadata.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/metadata_errors.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/metadata_errors.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/multi_notes.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/multi_notes.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/multiline_string.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/multiline_string.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/negative_number.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/negative_number.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/note_normalize.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/note_normalize.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/note_normalize_with_top_empty_lines.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/note_normalize_with_top_empty_lines.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/old_undocumented_syntax.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/old_undocumented_syntax.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/primary_key.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/primary_key.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/project.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/project.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/ref_name_and_color_setting.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/ref_name_and_color_setting.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/ref_settings.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/ref_settings.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/referential_actions.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/referential_actions.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/self_referential_ref_in_tablepartial.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/self_referential_ref_in_tablepartial.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/sticky_notes.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/sticky_notes.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/table_element.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/table_element.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/table_group.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/table_group.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/table_group_element.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/table_group_element.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/table_group_settings.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/table_group_settings.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/table_partial.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/table_partial.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/table_reappear_tablegroup.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/table_reappear_tablegroup.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/table_settings.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/table_settings.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/tablepartial_causing_circular_ref.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/tablepartial_causing_circular_ref.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/two_inline_refs.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/interpreter/two_inline_refs.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/parser/call_expression.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/parser/call_expression.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/parser/element_in_simple_body.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/parser/element_in_simple_body.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/parser/erroneous_setting.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/parser/erroneous_setting.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/parser/expression.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/parser/expression.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/parser/last_invalid_number.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/parser/last_invalid_number.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/parser/list_expression.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/parser/list_expression.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/parser/trailing_comments.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/parser/trailing_comments.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/parser/tuple_expression.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/parser/tuple_expression.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/validator/checks.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/validator/checks.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/validator/complex_names.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/validator/complex_names.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/validator/dep.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/validator/dep.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/validator/enum.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/validator/enum.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/validator/invalid_args.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/validator/invalid_args.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/validator/public_schema.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/validator/public_schema.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/validator/redefined_note.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/validator/redefined_note.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/validator/ref_error_setting.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/validator/ref_error_setting.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/validator/ref_in_table.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/validator/ref_in_table.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/validator/schema_nested_tablegroup.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/validator/schema_nested_tablegroup.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/validator/table_group_settings.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/validator/table_group_settings.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/validator/table_partial_check.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/validator/table_partial_check.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/validator/table_partial_settings_general.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/validator/table_partial_settings_general.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/validator/table_settings_check.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/validator/table_settings_check.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/validator/table_settings_general.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/validator/table_settings_general.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/validator/wrong_sub_element_declarations.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/validator/wrong_sub_element_declarations.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/validator/wrong_table_partial_injection_syntax.dbml +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/validator/wrong_table_partial_injection_syntax.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/jaffle/LICENSE +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/jaffle/README.md +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/jaffle/catalog.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/jaffle/manifest.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/targets/cases.json +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/test_agent.py +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/test_convert.py +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/test_dbml.py +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/test_dbml_pipeline.py +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/test_dbt.py +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/test_diff.py +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/test_mcp.py +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/test_packaging.py +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/test_parser.py +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/test_path.py +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/test_pipeline.py +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/test_render.py +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/test_select.py +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/test_serve.py +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/test_tags.py +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/test_targets.py +0 -0
- {quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/test_viewer_contract.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: quickdbd-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.4.0
|
|
4
4
|
Summary: Compile QuickDBD-syntax schema files into interactive HTML ER diagrams, with no table limit.
|
|
5
5
|
Project-URL: Homepage, https://qdbd.dev/
|
|
6
6
|
Project-URL: Documentation, https://qdbd.dev/guide/
|
|
@@ -65,10 +65,10 @@ Description-Content-Type: text/markdown
|
|
|
65
65
|
</p>
|
|
66
66
|
|
|
67
67
|
<p align="center">
|
|
68
|
-
<a href="https://qdbd.dev/demo/adventureworks/#t=
|
|
68
|
+
<a href="https://qdbd.dev/demo/adventureworks-dw/#t=FactInternetSales"><img src="https://raw.githubusercontent.com/MarkPhamm/quickdbd-cli/main/docs/assets/img/hero.png" alt="The AdventureWorks DW star schema as a qdbd diagram, with the FactInternetSales table selected" width="760"></a>
|
|
69
69
|
</p>
|
|
70
70
|
<p align="center">
|
|
71
|
-
<em>AdventureWorks (
|
|
71
|
+
<em>AdventureWorks DW (28 tables), a star schema in five regions, built by qdbd. <a href="https://qdbd.dev/demo/adventureworks-dw/#t=FactInternetSales">Try it live →</a></em>
|
|
72
72
|
</p>
|
|
73
73
|
|
|
74
74
|
## What is qdbd?
|
|
@@ -169,7 +169,7 @@ In VS Code (or Cursor), the [extension](https://qdbd.dev/vscode/) does the same
|
|
|
169
169
|
```sh
|
|
170
170
|
qdbd build schema.txt -o schema.html # one self-contained page
|
|
171
171
|
qdbd export schema.txt -o schema.png # or .svg, .drawio
|
|
172
|
-
qdbd share schema.txt
|
|
172
|
+
QDBD_ALLOW_SHARE=1 qdbd share schema.txt # a link via a GitHub gist: off by default, see the disclaimer
|
|
173
173
|
```
|
|
174
174
|
|
|
175
175
|
## Run in CI
|
|
@@ -186,7 +186,7 @@ jobs:
|
|
|
186
186
|
permissions: { contents: read, pull-requests: write }
|
|
187
187
|
steps:
|
|
188
188
|
- uses: actions/checkout@v4
|
|
189
|
-
- uses: MarkPhamm/quickdbd-cli@v0.
|
|
189
|
+
- uses: MarkPhamm/quickdbd-cli@v0.4.0
|
|
190
190
|
with:
|
|
191
191
|
path: erd/ # schema file(s) or folder(s)
|
|
192
192
|
output: site/index.html
|
|
@@ -257,7 +257,7 @@ No. qdbd only borrows the text syntax.
|
|
|
257
257
|
No. It reads `.txt` / `.dbml` schema files or a dbt `manifest.json`. Nothing connects to a warehouse.
|
|
258
258
|
|
|
259
259
|
**Does my schema leave my machine?**
|
|
260
|
-
Only if you run `qdbd share`, which uploads the page to a GitHub gist in your account (secret by default), or connect an AI agent through `qdbd mcp`, whose answers go to your AI provider. `qdbd serve` loads its code editor from a CDN; the built pages load nothing.
|
|
260
|
+
Only if you turn sharing on (`QDBD_ALLOW_SHARE=1`, or `quickdbd.allowSharing` in VS Code) and run `qdbd share`, which uploads the page to a GitHub gist in your account (secret by default), publish it yourself (a tunnel, GitHub Pages), or connect an AI agent through `qdbd mcp`, whose answers go to your AI provider. `qdbd serve` loads its code editor from a CDN; the built pages load nothing.
|
|
261
261
|
|
|
262
262
|
**How big can a diagram get?**
|
|
263
263
|
The demos go up to 200 tables. Search, selectors, regions and collapsed views keep large diagrams workable; `--select` builds a page with just the part you need.
|
|
@@ -27,10 +27,10 @@
|
|
|
27
27
|
</p>
|
|
28
28
|
|
|
29
29
|
<p align="center">
|
|
30
|
-
<a href="https://qdbd.dev/demo/adventureworks/#t=
|
|
30
|
+
<a href="https://qdbd.dev/demo/adventureworks-dw/#t=FactInternetSales"><img src="https://raw.githubusercontent.com/MarkPhamm/quickdbd-cli/main/docs/assets/img/hero.png" alt="The AdventureWorks DW star schema as a qdbd diagram, with the FactInternetSales table selected" width="760"></a>
|
|
31
31
|
</p>
|
|
32
32
|
<p align="center">
|
|
33
|
-
<em>AdventureWorks (
|
|
33
|
+
<em>AdventureWorks DW (28 tables), a star schema in five regions, built by qdbd. <a href="https://qdbd.dev/demo/adventureworks-dw/#t=FactInternetSales">Try it live →</a></em>
|
|
34
34
|
</p>
|
|
35
35
|
|
|
36
36
|
## What is qdbd?
|
|
@@ -131,7 +131,7 @@ In VS Code (or Cursor), the [extension](https://qdbd.dev/vscode/) does the same
|
|
|
131
131
|
```sh
|
|
132
132
|
qdbd build schema.txt -o schema.html # one self-contained page
|
|
133
133
|
qdbd export schema.txt -o schema.png # or .svg, .drawio
|
|
134
|
-
qdbd share schema.txt
|
|
134
|
+
QDBD_ALLOW_SHARE=1 qdbd share schema.txt # a link via a GitHub gist: off by default, see the disclaimer
|
|
135
135
|
```
|
|
136
136
|
|
|
137
137
|
## Run in CI
|
|
@@ -148,7 +148,7 @@ jobs:
|
|
|
148
148
|
permissions: { contents: read, pull-requests: write }
|
|
149
149
|
steps:
|
|
150
150
|
- uses: actions/checkout@v4
|
|
151
|
-
- uses: MarkPhamm/quickdbd-cli@v0.
|
|
151
|
+
- uses: MarkPhamm/quickdbd-cli@v0.4.0
|
|
152
152
|
with:
|
|
153
153
|
path: erd/ # schema file(s) or folder(s)
|
|
154
154
|
output: site/index.html
|
|
@@ -219,7 +219,7 @@ No. qdbd only borrows the text syntax.
|
|
|
219
219
|
No. It reads `.txt` / `.dbml` schema files or a dbt `manifest.json`. Nothing connects to a warehouse.
|
|
220
220
|
|
|
221
221
|
**Does my schema leave my machine?**
|
|
222
|
-
Only if you run `qdbd share`, which uploads the page to a GitHub gist in your account (secret by default), or connect an AI agent through `qdbd mcp`, whose answers go to your AI provider. `qdbd serve` loads its code editor from a CDN; the built pages load nothing.
|
|
222
|
+
Only if you turn sharing on (`QDBD_ALLOW_SHARE=1`, or `quickdbd.allowSharing` in VS Code) and run `qdbd share`, which uploads the page to a GitHub gist in your account (secret by default), publish it yourself (a tunnel, GitHub Pages), or connect an AI agent through `qdbd mcp`, whose answers go to your AI provider. `qdbd serve` loads its code editor from a CDN; the built pages load nothing.
|
|
223
223
|
|
|
224
224
|
**How big can a diagram get?**
|
|
225
225
|
The demos go up to 200 tables. Search, selectors, regions and collapsed views keep large diagrams workable; `--select` builds a page with just the part you need.
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "quickdbd-cli"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.4.0"
|
|
8
8
|
description = "Compile QuickDBD-syntax schema files into interactive HTML ER diagrams, with no table limit."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "Apache-2.0"
|
|
@@ -30,25 +30,32 @@ PATH_SHOT = ("sakila", "t=payment&p=country")
|
|
|
30
30
|
# Hidden in the screenshot: the table list, toolbar, minimap and hint. The details panel and diff bar stay.
|
|
31
31
|
CLEAN = ".explorer, .bar, .minimap, .hint { display: none !important; }"
|
|
32
32
|
|
|
33
|
-
CARD = """<!doctype html><html><head><meta charset="utf-8"
|
|
33
|
+
CARD = """<!doctype html><html><head><meta charset="utf-8">
|
|
34
|
+
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Geist:wght@500;600&family=Geist+Mono&display=swap">
|
|
35
|
+
<style>{font}
|
|
34
36
|
* {{ box-sizing: border-box; margin: 0; }}
|
|
35
|
-
body {{ width: {w}px; height: {h}px; overflow: hidden; font-family: Inter, sans-serif; color: #
|
|
36
|
-
|
|
37
|
-
linear-gradient(
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
.
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
.
|
|
45
|
-
border:
|
|
37
|
+
body {{ width: {w}px; height: {h}px; overflow: hidden; font-family: Geist, Inter, sans-serif; color: #15181e;
|
|
38
|
+
position: relative; --a: rgba(21, 24, 30, .07); --b: rgba(21, 24, 30, .04); background: #f2f2ee;
|
|
39
|
+
background-image: linear-gradient(var(--a) 1px, #0000 1px), linear-gradient(90deg, var(--a) 1px, #0000 1px),
|
|
40
|
+
linear-gradient(var(--b) 1px, #0000 1px), linear-gradient(90deg, var(--b) 1px, #0000 1px);
|
|
41
|
+
background-size: 120px 120px, 120px 120px, 24px 24px, 24px 24px; background-position: -1px -1px; }}
|
|
42
|
+
.text {{ position: absolute; left: 56px; top: 60px; width: 360px; }}
|
|
43
|
+
.brand {{ display: flex; align-items: center; gap: 10px; font-weight: 600; font-size: 26px; letter-spacing: -.02em;
|
|
44
|
+
margin-bottom: 40px; }}
|
|
45
|
+
.brand svg {{ color: #2f5bea; }}
|
|
46
|
+
.brand span {{ font: 16px "Geist Mono", monospace; color: #646a75; border: 1px solid rgba(21, 24, 30, .24);
|
|
47
|
+
border-radius: 6px; padding: 3px 8px; margin-left: 4px; letter-spacing: 0; }}
|
|
48
|
+
h1 {{ font-size: 48px; line-height: 1.04; font-weight: 600; letter-spacing: -.04em; }}
|
|
49
|
+
p {{ margin-top: 22px; font-size: 21px; line-height: 1.5; color: #4a505b; }}
|
|
50
|
+
.shot {{ position: absolute; left: 460px; top: 56px; width: {sw}px; border-radius: 12px; overflow: hidden;
|
|
51
|
+
border: 1px solid rgba(21, 24, 30, .24); box-shadow: 0 18px 40px -18px rgba(21, 24, 30, .28); background: #fff; }}
|
|
46
52
|
.shot img {{ display: block; width: 100%; }}
|
|
47
53
|
</style></head><body>
|
|
48
54
|
<div class="text">
|
|
49
55
|
<div class="brand"><svg width="30" height="30" viewBox="0 0 24 24"><rect x="2" y="2.5" width="10" height="8" rx="2"
|
|
50
56
|
fill="currentColor"/><rect x="12" y="13.5" width="10" height="8" rx="2" fill="currentColor" opacity=".55"/><path
|
|
51
|
-
d="M7 10.5v3.5a3.5 3.5 0 0 0 3.5 3.5H12" stroke="currentColor" stroke-width="2" fill="none"/></svg>qdbd
|
|
57
|
+
d="M7 10.5v3.5a3.5 3.5 0 0 0 3.5 3.5H12" stroke="currentColor" stroke-width="2" fill="none"/></svg>qdbd
|
|
58
|
+
<span>demo</span></div>
|
|
52
59
|
<h1>{title}</h1>
|
|
53
60
|
<p>{description}</p>
|
|
54
61
|
</div>
|
|
@@ -88,7 +95,7 @@ def main(argv: list[str]) -> int:
|
|
|
88
95
|
img=img,
|
|
89
96
|
)
|
|
90
97
|
)
|
|
91
|
-
card.
|
|
98
|
+
card.evaluate("document.fonts.ready.then(() => true)") # Geist comes from Google Fonts
|
|
92
99
|
dst = THUMBS / f"{d.id}.png"
|
|
93
100
|
card.screenshot(path=str(dst))
|
|
94
101
|
print(f"Wrote {dst.relative_to(THUMBS.parents[3])}")
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.4.0"
|
|
@@ -158,10 +158,28 @@ def cmd_build(args) -> int:
|
|
|
158
158
|
def cmd_share(args) -> int:
|
|
159
159
|
from . import share
|
|
160
160
|
|
|
161
|
+
if not share.allowed():
|
|
162
|
+
print(
|
|
163
|
+
"error: sharing is off. qdbd share uploads the diagram (every table and column name) to a GitHub gist"
|
|
164
|
+
f" that anyone with the link can open. If your data policy allows that, set {share.ALLOW_ENV}=1"
|
|
165
|
+
" (doing so accepts https://qdbd.dev/sharing/#disclaimer).",
|
|
166
|
+
file=sys.stderr,
|
|
167
|
+
)
|
|
168
|
+
return 2
|
|
161
169
|
res = _built_page(args)
|
|
162
170
|
if isinstance(res, int):
|
|
163
171
|
return res
|
|
164
172
|
page, model = res
|
|
173
|
+
print(share.DISCLAIMER, file=sys.stderr)
|
|
174
|
+
if not args.yes:
|
|
175
|
+
if not sys.stdin.isatty():
|
|
176
|
+
print("error: no terminal to confirm in: add --yes to accept the disclaimer and share", file=sys.stderr)
|
|
177
|
+
return 2
|
|
178
|
+
kind = "public" if args.public else "secret"
|
|
179
|
+
print(f"Share {len(model['tables'])} tables as a {kind} gist? [y/N] ", end="", file=sys.stderr, flush=True)
|
|
180
|
+
if sys.stdin.readline().strip().lower() not in ("y", "yes"):
|
|
181
|
+
print("Not shared.", file=sys.stderr)
|
|
182
|
+
return 2
|
|
165
183
|
key = share.share_key(args.paths, selector_expr(args.select, args.exclude))
|
|
166
184
|
try:
|
|
167
185
|
r = share.publish(page, _title(_open(args)), key, public=args.public, new=args.new)
|
|
@@ -571,7 +589,10 @@ def build_parser() -> argparse.ArgumentParser:
|
|
|
571
589
|
sp.add_argument("--strict", action="store_true")
|
|
572
590
|
sp.set_defaults(func=cmd_build)
|
|
573
591
|
|
|
574
|
-
sp = sub.add_parser(
|
|
592
|
+
sp = sub.add_parser(
|
|
593
|
+
"share",
|
|
594
|
+
help="publish the diagram as a GitHub gist and print a link (off unless QDBD_ALLOW_SHARE=1; needs the gh CLI)",
|
|
595
|
+
)
|
|
575
596
|
paths(sp)
|
|
576
597
|
selectors(sp)
|
|
577
598
|
sp.add_argument(
|
|
@@ -582,6 +603,7 @@ def build_parser() -> argparse.ArgumentParser:
|
|
|
582
603
|
sp.add_argument("--strict", action="store_true")
|
|
583
604
|
sp.add_argument("--public", action="store_true", help="list the gist publicly (default: secret, link-only)")
|
|
584
605
|
sp.add_argument("--new", action="store_true", help="make a new gist instead of updating the last one")
|
|
606
|
+
sp.add_argument("-y", "--yes", action="store_true", help="accept the disclaimer without asking (for scripts)")
|
|
585
607
|
sp.set_defaults(func=cmd_share)
|
|
586
608
|
|
|
587
609
|
sp = sub.add_parser("export", help="write a PNG, SVG or draw.io file")
|
|
@@ -665,7 +687,7 @@ def build_parser() -> argparse.ArgumentParser:
|
|
|
665
687
|
sp.add_argument(
|
|
666
688
|
"--read-only",
|
|
667
689
|
action="store_true",
|
|
668
|
-
help="live view only: no editor, nothing saved;
|
|
690
|
+
help="live view only: no editor, nothing saved; viewers can't change anything",
|
|
669
691
|
)
|
|
670
692
|
sp.add_argument(
|
|
671
693
|
"--embed",
|
|
@@ -4,6 +4,10 @@ Uses the GitHub CLI (``gh api``), so it inherits the user's login. Gists are sec
|
|
|
4
4
|
``public``. The gist made for each input/selection is remembered in the user's cache directory, so
|
|
5
5
|
sharing again updates the same gist and the link stays the same. The VS Code extension does the same
|
|
6
6
|
without gh (vscode/src/gist.ts) and shares the cache: keep the two in step.
|
|
7
|
+
|
|
8
|
+
Off unless ``QDBD_ALLOW_SHARE`` is set: a gist puts the schema outside the organisation's control, which a
|
|
9
|
+
client's data agreements may not allow. The extension's own switch is the ``quickdbd.allowSharing`` setting.
|
|
10
|
+
Even then, every share shows ``DISCLAIMER`` and asks first; the extension's dialog (export.ts) says the same.
|
|
7
11
|
"""
|
|
8
12
|
|
|
9
13
|
from __future__ import annotations
|
|
@@ -15,11 +19,23 @@ import subprocess
|
|
|
15
19
|
from dataclasses import dataclass
|
|
16
20
|
from pathlib import Path
|
|
17
21
|
|
|
22
|
+
ALLOW_ENV = "QDBD_ALLOW_SHARE"
|
|
23
|
+
DISCLAIMER = """\
|
|
24
|
+
Before you share: this uploads the diagram (every table and column name, type, key, relationship
|
|
25
|
+
and comment) to a GitHub gist. Anyone with the link can open it, and copies can outlive the gist.
|
|
26
|
+
By sharing, you confirm that you have the right to publish this schema, that your organisation's
|
|
27
|
+
policies and any client agreements allow it, and that qdbd's authors are not liable for any
|
|
28
|
+
disclosure. Full disclaimer: https://qdbd.dev/sharing/#disclaimer"""
|
|
29
|
+
|
|
18
30
|
|
|
19
31
|
class ShareError(Exception):
|
|
20
32
|
pass
|
|
21
33
|
|
|
22
34
|
|
|
35
|
+
def allowed() -> bool:
|
|
36
|
+
return os.environ.get(ALLOW_ENV, "").strip().lower() in ("1", "true", "yes", "on")
|
|
37
|
+
|
|
38
|
+
|
|
23
39
|
@dataclass
|
|
24
40
|
class Shared:
|
|
25
41
|
link: str # gistpreview: renders the gist's HTML, keeps the #view part of the URL
|
|
@@ -96,6 +96,7 @@ def test_sample_databases_and_dbt_projects(built):
|
|
|
96
96
|
assert len(m["tables"]) == n and m["rels"], d
|
|
97
97
|
dw = _model(built / "adventureworks-dw" / "index.html")
|
|
98
98
|
assert {"dim", "fact"} <= {t["name"] for t in dw["tags"]} # coloured by the Dim/Fact name prefixes
|
|
99
|
+
assert dw["regions"] and len({t["group"] for t in dw["tables"]}) == 5 # one region per business process
|
|
99
100
|
aw = _model(built / "adventureworks" / "index.html")
|
|
100
101
|
assert aw["regions"] and any(t.get("doc") for t in aw["tables"]) # MS_Description -> tooltips
|
|
101
102
|
|
|
@@ -49,4 +49,7 @@ def test_build_tour(tmp_path):
|
|
|
49
49
|
assert page.exists()
|
|
50
50
|
text = page.read_text(encoding="utf-8")
|
|
51
51
|
model = json.loads(re.search(r'id="qdbd-data">(.*?)</script>', text, re.S).group(1))["model"]
|
|
52
|
-
assert len(model["tables"]) ==
|
|
52
|
+
assert len(model["tables"]) == 28 and model["regions"]
|
|
53
|
+
# the tables docs/javascripts/home-tour.js types, clicks and paths between
|
|
54
|
+
driven = {"FactInternetSales", "DimCustomer", "FactResellerSales", "DimProductCategory"}
|
|
55
|
+
assert driven <= {t["id"] for t in model["tables"]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"""`qdbd share`, with `gh api` faked (no network)."""
|
|
2
2
|
|
|
3
|
+
import io
|
|
3
4
|
import json
|
|
4
5
|
import subprocess
|
|
5
6
|
|
|
@@ -42,6 +43,7 @@ def gh(monkeypatch, tmp_path):
|
|
|
42
43
|
fake = FakeGh()
|
|
43
44
|
monkeypatch.setattr(share.subprocess, "run", fake)
|
|
44
45
|
monkeypatch.setenv("QDBD_CACHE_DIR", str(tmp_path / "cache"))
|
|
46
|
+
monkeypatch.setenv("QDBD_ALLOW_SHARE", "1")
|
|
45
47
|
return fake
|
|
46
48
|
|
|
47
49
|
|
|
@@ -53,8 +55,9 @@ def schema(tmp_path):
|
|
|
53
55
|
|
|
54
56
|
|
|
55
57
|
def test_share_creates_a_secret_gist_and_prints_links(gh, schema, capsys):
|
|
56
|
-
assert main(["share", str(schema)]) == 0
|
|
57
|
-
out = capsys.readouterr()
|
|
58
|
+
assert main(["share", "--yes", str(schema)]) == 0
|
|
59
|
+
out, err = capsys.readouterr()
|
|
60
|
+
assert "Before you share" in err and "https://qdbd.dev/sharing/#disclaimer" in err
|
|
58
61
|
method, endpoint, payload = gh.calls[0]
|
|
59
62
|
assert (method, endpoint, payload["public"]) == ("POST", "/gists", False)
|
|
60
63
|
assert list(payload["files"]) == ["shop.html"]
|
|
@@ -64,10 +67,43 @@ def test_share_creates_a_secret_gist_and_prints_links(gh, schema, capsys):
|
|
|
64
67
|
assert "https://gist.githack.com/me/g1/raw/shop.html" in out
|
|
65
68
|
|
|
66
69
|
|
|
70
|
+
@pytest.mark.parametrize("value", [None, "", "0", "false"])
|
|
71
|
+
def test_sharing_is_off_unless_allowed(gh, schema, capsys, monkeypatch, value):
|
|
72
|
+
if value is None:
|
|
73
|
+
monkeypatch.delenv("QDBD_ALLOW_SHARE")
|
|
74
|
+
else:
|
|
75
|
+
monkeypatch.setenv("QDBD_ALLOW_SHARE", value)
|
|
76
|
+
assert main(["share", "--yes", str(schema)]) == 2 # --yes accepts the disclaimer, not the switch
|
|
77
|
+
assert gh.calls == []
|
|
78
|
+
assert "set QDBD_ALLOW_SHARE=1" in capsys.readouterr().err
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
class Tty(io.StringIO):
|
|
82
|
+
def isatty(self):
|
|
83
|
+
return True
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
@pytest.mark.parametrize(("answer", "code", "uploads"), [("y\n", 0, 1), ("yes\n", 0, 1), ("n\n", 2, 0), ("\n", 2, 0)])
|
|
87
|
+
def test_asks_before_sharing(gh, schema, capsys, monkeypatch, answer, code, uploads):
|
|
88
|
+
monkeypatch.setattr("sys.stdin", Tty(answer))
|
|
89
|
+
assert main(["share", str(schema)]) == code
|
|
90
|
+
assert len(gh.calls) == uploads
|
|
91
|
+
err = capsys.readouterr().err
|
|
92
|
+
assert "Before you share" in err
|
|
93
|
+
assert "Share 2 tables as a secret gist? [y/N]" in err
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
def test_no_terminal_needs_yes(gh, schema, capsys, monkeypatch):
|
|
97
|
+
monkeypatch.setattr("sys.stdin", io.StringIO("y\n")) # piped input doesn't count as consent
|
|
98
|
+
assert main(["share", str(schema)]) == 2
|
|
99
|
+
assert gh.calls == []
|
|
100
|
+
assert "add --yes" in capsys.readouterr().err
|
|
101
|
+
|
|
102
|
+
|
|
67
103
|
def test_sharing_again_updates_the_same_gist(gh, schema, capsys):
|
|
68
|
-
main(["share", str(schema)])
|
|
104
|
+
main(["share", "--yes", str(schema)])
|
|
69
105
|
schema.write_text(SCHEMA + "\nProduct\n-\nId PK int\n")
|
|
70
|
-
assert main(["share", str(schema)]) == 0
|
|
106
|
+
assert main(["share", "--yes", str(schema)]) == 0
|
|
71
107
|
assert [c[0] for c in gh.calls] == ["POST", "PATCH"]
|
|
72
108
|
assert gh.calls[1][1] == "/gists/g1"
|
|
73
109
|
assert "Product" in gh.gists["g1"]["files"]["shop.html"]["content"]
|
|
@@ -75,37 +111,37 @@ def test_sharing_again_updates_the_same_gist(gh, schema, capsys):
|
|
|
75
111
|
|
|
76
112
|
|
|
77
113
|
def test_new_and_selection_make_separate_gists(gh, schema):
|
|
78
|
-
main(["share", str(schema)])
|
|
79
|
-
main(["share", str(schema), "--new"])
|
|
80
|
-
main(["share", str(schema), "-s", "Order+"])
|
|
114
|
+
main(["share", "--yes", str(schema)])
|
|
115
|
+
main(["share", "--yes", str(schema), "--new"])
|
|
116
|
+
main(["share", "--yes", str(schema), "-s", "Order+"])
|
|
81
117
|
assert [c[0] for c in gh.calls] == ["POST", "POST", "POST"]
|
|
82
|
-
main(["share", str(schema), "-s", "Order+"])
|
|
118
|
+
main(["share", "--yes", str(schema), "-s", "Order+"])
|
|
83
119
|
assert gh.calls[-1][:2] == ("PATCH", "/gists/g3")
|
|
84
120
|
|
|
85
121
|
|
|
86
122
|
def test_deleted_gist_is_recreated(gh, schema):
|
|
87
|
-
main(["share", str(schema)])
|
|
123
|
+
main(["share", "--yes", str(schema)])
|
|
88
124
|
gh.gists.clear()
|
|
89
|
-
assert main(["share", str(schema)]) == 0
|
|
125
|
+
assert main(["share", "--yes", str(schema)]) == 0
|
|
90
126
|
assert [c[0] for c in gh.calls] == ["POST", "PATCH", "POST"]
|
|
91
127
|
|
|
92
128
|
|
|
93
129
|
def test_public_flag(gh, schema, capsys):
|
|
94
|
-
main(["share", str(schema), "--public"])
|
|
130
|
+
main(["share", "--yes", str(schema), "--public"])
|
|
95
131
|
assert gh.calls[0][2]["public"] is True
|
|
96
132
|
assert "(public gist" in capsys.readouterr().out
|
|
97
133
|
|
|
98
134
|
|
|
99
135
|
def test_errors(gh, schema, capsys, monkeypatch):
|
|
100
136
|
gh.fail = "To get started with GitHub CLI, please run: gh auth login"
|
|
101
|
-
assert main(["share", str(schema)]) == 2
|
|
137
|
+
assert main(["share", "--yes", str(schema)]) == 2
|
|
102
138
|
assert "run gh auth login" in capsys.readouterr().err
|
|
103
139
|
|
|
104
140
|
def missing(*a, **k):
|
|
105
141
|
raise FileNotFoundError
|
|
106
142
|
|
|
107
143
|
monkeypatch.setattr(share.subprocess, "run", missing)
|
|
108
|
-
assert main(["share", str(schema)]) == 2
|
|
144
|
+
assert main(["share", "--yes", str(schema)]) == 2
|
|
109
145
|
assert "needs the GitHub CLI" in capsys.readouterr().err
|
|
110
146
|
|
|
111
147
|
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "0.3.5"
|
|
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
|
|
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
|
{quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/binder/duplicate_columns.dbml
RENAMED
|
File without changes
|
{quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/binder/duplicate_columns.json
RENAMED
|
File without changes
|
{quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/binder/duplicate_enum_field.dbml
RENAMED
|
File without changes
|
{quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/binder/duplicate_enum_field.json
RENAMED
|
File without changes
|
{quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/binder/duplicate_name.dbml
RENAMED
|
File without changes
|
{quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/binder/duplicate_name.json
RENAMED
|
File without changes
|
{quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/binder/duplicate_names.dbml
RENAMED
|
File without changes
|
{quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/binder/duplicate_names.json
RENAMED
|
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
|
{quickdbd_cli-0.3.5 → quickdbd_cli-0.4.0}/tests/fixtures/dbml-ref/binder/sticky_notes_validator.dbml
RENAMED
|
File without changes
|