sqlquality 0.4.0__tar.gz → 0.4.1__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.
- {sqlquality-0.4.0 → sqlquality-0.4.1}/PKG-INFO +2 -2
- {sqlquality-0.4.0 → sqlquality-0.4.1}/src/sqlquality/__init__.py +1 -1
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/test_workload_redaction.py +8 -8
- {sqlquality-0.4.0 → sqlquality-0.4.1}/.gitignore +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/.pre-commit-hooks.yaml +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/LICENSE +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/README.md +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/pyproject.toml +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/src/sqlquality/adapters/__init__.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/src/sqlquality/adapters/base.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/src/sqlquality/adapters/postgres.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/src/sqlquality/adapters/redshift.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/src/sqlquality/antipatterns.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/src/sqlquality/changeset.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/src/sqlquality/cli.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/src/sqlquality/complexity.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/src/sqlquality/config.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/src/sqlquality/dbtproject.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/src/sqlquality/delta.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/src/sqlquality/dialects.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/src/sqlquality/gate.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/src/sqlquality/keys.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/src/sqlquality/linter.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/src/sqlquality/llm.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/src/sqlquality/models.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/src/sqlquality/py.typed +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/src/sqlquality/report.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/src/sqlquality/sqlast.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/src/sqlquality/verify.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/src/sqlquality/workload/__init__.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/src/sqlquality/workload/aggregate.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/src/sqlquality/workload/base.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/src/sqlquality/workload/connection.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/src/sqlquality/workload/dbt.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/src/sqlquality/workload/extract.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/src/sqlquality/workload/fingerprint.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/src/sqlquality/workload/postgres.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/src/sqlquality/workload/profiles.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/src/sqlquality/workload/redshift.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/src/sqlquality/workload/secrets.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/src/sqlquality/workload/session.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/fixtures/manifest_v12.json +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/fixtures/verify/disappeared.after.json +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/fixtures/verify/disappeared.before.json +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/fixtures/verify/improved.after.json +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/fixtures/verify/improved.before.json +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/fixtures/verify/limit_truncated.after.json +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/fixtures/verify/limit_truncated.before.json +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/fixtures/verify/not_applied.after.json +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/fixtures/verify/not_applied.before.json +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/fixtures/verify/regenerate.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/fixtures/verify/regressed.after.json +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/fixtures/verify/regressed.before.json +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/fixtures/verify/unchanged_nested.after.json +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/fixtures/verify/unchanged_nested.before.json +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/integration/__init__.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/integration/conftest.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/integration/docker-compose.yml +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/integration/test_advise_live.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/integration/test_introspection_live.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/integration/test_redshift_connect_live.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/integration/test_redshift_introspection_bindable_live.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/integration/test_verify_degraded_after_live.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/integration/test_verify_headline_live.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/integration/test_verify_live.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/integration/test_verify_redaction_live.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/test_adapters_postgres.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/test_adapters_redshift.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/test_advise_cli.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/test_advise_physical_state_wiring.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/test_antipatterns.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/test_changeset.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/test_check_gate.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/test_ci_integration_job.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/test_cli.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/test_complexity.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/test_config.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/test_dbtproject.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/test_delta.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/test_dialects.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/test_gate.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/test_integration_fixture.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/test_keys.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/test_lint_cli.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/test_linter.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/test_llm.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/test_llm_anthropic.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/test_models.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/test_perf_cli.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/test_perf_suggest.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/test_precommit_hooks.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/test_report.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/test_report_markdown.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/test_sqlast.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/test_verify.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/test_verify_cli.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/test_verify_goldens.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/test_workload_aggregate.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/test_workload_connection.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/test_workload_dbt.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/test_workload_extract.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/test_workload_fingerprint.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/test_workload_postgres.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/test_workload_redshift.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/test_workload_redshift_rules.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/test_workload_rules.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/test_workload_secrets.py +0 -0
- {sqlquality-0.4.0 → sqlquality-0.4.1}/tests/test_workload_session.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
2
|
Name: sqlquality
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.1
|
|
4
4
|
Summary: Measure dbt model performance and complexity, and gate changes on the delta.
|
|
5
5
|
Project-URL: Homepage, https://github.com/hanslemm/sqlquality
|
|
6
6
|
Project-URL: Issues, https://github.com/hanslemm/sqlquality/issues
|
|
@@ -16,7 +16,7 @@ runner = CliRunner()
|
|
|
16
16
|
#: Distinctive strings that must never appear downstream.
|
|
17
17
|
#:
|
|
18
18
|
#: Be honest about which of these currently discriminate. Measured by disabling
|
|
19
|
-
#: `redact_tree` and sweeping every surface: only `
|
|
19
|
+
#: `redact_tree` and sweeping every surface: only `someone@example.com` leaks, because it
|
|
20
20
|
#: is the only one reaching ADV005's evidence — the single proposal type that copies query
|
|
21
21
|
#: text into output. The other three enter via HOT_QUERY, whose proposals carry column
|
|
22
22
|
#: names, roles and counts but never `stat.sql`, so they cannot leak today whatever
|
|
@@ -25,15 +25,15 @@ runner = CliRunner()
|
|
|
25
25
|
#: They stay in the list deliberately, as regression insurance against a future proposal
|
|
26
26
|
#: type that widens what evidence carries. But they are future-proofing, not live
|
|
27
27
|
#: trip-wires, and a reader should not mistake four passing checks for four proofs.
|
|
28
|
-
SECRETS = ("
|
|
28
|
+
SECRETS = ("ticket-4711", "someone@example.com", "DE89370400440532013000", "2001-02-03")
|
|
29
29
|
|
|
30
30
|
HOT_QUERY = (
|
|
31
31
|
"select id, note from orders "
|
|
32
32
|
"where status = 'shipped' "
|
|
33
|
-
"and customer_email = '
|
|
34
|
-
"and reference = '
|
|
33
|
+
"and customer_email = 'someone@example.com' "
|
|
34
|
+
"and reference = 'ticket-4711' "
|
|
35
35
|
"and iban = 'DE89370400440532013000' "
|
|
36
|
-
"and created_at > '
|
|
36
|
+
"and created_at > '2001-02-03' "
|
|
37
37
|
"order by created_at desc"
|
|
38
38
|
)
|
|
39
39
|
|
|
@@ -57,8 +57,8 @@ HOT_QUERY = (
|
|
|
57
57
|
#: `--keep-literals` test below is the canary that will tell you: it asserts a secret *is*
|
|
58
58
|
#: retained with the opt-in, which can only hold if some output surface actually carries
|
|
59
59
|
#: query text. If that test starts failing, this scenario has gone vacuous.
|
|
60
|
-
LIKE_QUERY = "select note from orders where note like '%
|
|
61
|
-
STAR_QUERY = "select * from wide_events where actor_email = '
|
|
60
|
+
LIKE_QUERY = "select note from orders where note like '%someone@example.com%'"
|
|
61
|
+
STAR_QUERY = "select * from wide_events where actor_email = 'someone@example.com'"
|
|
62
62
|
|
|
63
63
|
COLUMNS = [
|
|
64
64
|
("public", "orders", "id", "integer"),
|
|
@@ -182,4 +182,4 @@ def test_keep_literals_is_the_only_way_to_retain_values(stubbed):
|
|
|
182
182
|
payload = json.loads(result.stdout)
|
|
183
183
|
assert payload["redacted"] is False
|
|
184
184
|
# With the opt-in, values are retained — proving the default was doing real work.
|
|
185
|
-
assert "
|
|
185
|
+
assert "someone@example.com" in json.dumps(payload)
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sqlquality-0.4.0 → sqlquality-0.4.1}/tests/integration/test_redshift_introspection_bindable_live.py
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
|
|
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
|