dbt-bouncer 1.31.2rc3__tar.gz → 2.0.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.
- {dbt_bouncer-1.31.2rc3/src/dbt_bouncer.egg-info → dbt_bouncer-2.0.0}/PKG-INFO +15 -15
- {dbt_bouncer-1.31.2rc3 → dbt_bouncer-2.0.0}/README.md +3 -0
- {dbt_bouncer-1.31.2rc3 → dbt_bouncer-2.0.0}/pyproject.toml +13 -53
- {dbt_bouncer-1.31.2rc3 → dbt_bouncer-2.0.0}/src/dbt_bouncer/artifact_parsers/dbt_cloud/catalog_latest.py +21 -21
- dbt_bouncer-2.0.0/src/dbt_bouncer/artifact_parsers/dbt_cloud/manifest_latest.py +3895 -0
- {dbt_bouncer-1.31.2rc3 → dbt_bouncer-2.0.0}/src/dbt_bouncer/artifact_parsers/dbt_cloud/run_results_latest.py +22 -22
- {dbt_bouncer-1.31.2rc3 → dbt_bouncer-2.0.0}/src/dbt_bouncer/artifact_parsers/parsers_catalog.py +26 -24
- {dbt_bouncer-1.31.2rc3 → dbt_bouncer-2.0.0}/src/dbt_bouncer/artifact_parsers/parsers_common.py +57 -36
- {dbt_bouncer-1.31.2rc3 → dbt_bouncer-2.0.0}/src/dbt_bouncer/artifact_parsers/parsers_manifest.py +98 -69
- {dbt_bouncer-1.31.2rc3 → dbt_bouncer-2.0.0}/src/dbt_bouncer/artifact_parsers/parsers_run_results.py +32 -19
- {dbt_bouncer-1.31.2rc3 → dbt_bouncer-2.0.0}/src/dbt_bouncer/check_base.py +22 -11
- dbt_bouncer-2.0.0/src/dbt_bouncer/checks/catalog/check_catalog_sources.py +68 -0
- dbt_bouncer-2.0.0/src/dbt_bouncer/checks/catalog/check_columns.py +451 -0
- dbt_bouncer-2.0.0/src/dbt_bouncer/checks/common.py +28 -0
- dbt_bouncer-2.0.0/src/dbt_bouncer/checks/manifest/check_exposures.py +190 -0
- dbt_bouncer-2.0.0/src/dbt_bouncer/checks/manifest/check_lineage.py +177 -0
- dbt_bouncer-2.0.0/src/dbt_bouncer/checks/manifest/check_macros.py +390 -0
- {dbt_bouncer-1.31.2rc3 → dbt_bouncer-2.0.0}/src/dbt_bouncer/checks/manifest/check_metadata.py +28 -18
- dbt_bouncer-2.0.0/src/dbt_bouncer/checks/manifest/check_models.py +1941 -0
- dbt_bouncer-2.0.0/src/dbt_bouncer/checks/manifest/check_seeds.py +63 -0
- dbt_bouncer-2.0.0/src/dbt_bouncer/checks/manifest/check_semantic_models.py +66 -0
- dbt_bouncer-2.0.0/src/dbt_bouncer/checks/manifest/check_snapshots.py +122 -0
- dbt_bouncer-2.0.0/src/dbt_bouncer/checks/manifest/check_sources.py +512 -0
- dbt_bouncer-2.0.0/src/dbt_bouncer/checks/manifest/check_unit_tests.py +253 -0
- {dbt_bouncer-1.31.2rc3 → dbt_bouncer-2.0.0}/src/dbt_bouncer/checks/run_results/check_run_results.py +34 -20
- {dbt_bouncer-1.31.2rc3 → dbt_bouncer-2.0.0}/src/dbt_bouncer/config_file_parser.py +47 -28
- {dbt_bouncer-1.31.2rc3 → dbt_bouncer-2.0.0}/src/dbt_bouncer/config_file_validator.py +11 -8
- dbt_bouncer-2.0.0/src/dbt_bouncer/global_context.py +31 -0
- {dbt_bouncer-1.31.2rc3 → dbt_bouncer-2.0.0}/src/dbt_bouncer/main.py +128 -67
- {dbt_bouncer-1.31.2rc3 → dbt_bouncer-2.0.0}/src/dbt_bouncer/runner.py +61 -31
- {dbt_bouncer-1.31.2rc3 → dbt_bouncer-2.0.0}/src/dbt_bouncer/utils.py +146 -50
- {dbt_bouncer-1.31.2rc3 → dbt_bouncer-2.0.0}/src/dbt_bouncer/version.py +1 -1
- {dbt_bouncer-1.31.2rc3 → dbt_bouncer-2.0.0/src/dbt_bouncer.egg-info}/PKG-INFO +15 -15
- {dbt_bouncer-1.31.2rc3 → dbt_bouncer-2.0.0}/src/dbt_bouncer.egg-info/SOURCES.txt +2 -0
- {dbt_bouncer-1.31.2rc3 → dbt_bouncer-2.0.0}/src/dbt_bouncer.egg-info/requires.txt +9 -13
- dbt_bouncer-1.31.2rc3/src/dbt_bouncer/artifact_parsers/dbt_cloud/manifest_latest.py +0 -3895
- dbt_bouncer-1.31.2rc3/src/dbt_bouncer/checks/catalog/check_catalog_sources.py +0 -58
- dbt_bouncer-1.31.2rc3/src/dbt_bouncer/checks/catalog/check_columns.py +0 -381
- dbt_bouncer-1.31.2rc3/src/dbt_bouncer/checks/common.py +0 -7
- dbt_bouncer-1.31.2rc3/src/dbt_bouncer/checks/manifest/check_exposures.py +0 -163
- dbt_bouncer-1.31.2rc3/src/dbt_bouncer/checks/manifest/check_lineage.py +0 -148
- dbt_bouncer-1.31.2rc3/src/dbt_bouncer/checks/manifest/check_macros.py +0 -317
- dbt_bouncer-1.31.2rc3/src/dbt_bouncer/checks/manifest/check_models.py +0 -1595
- dbt_bouncer-1.31.2rc3/src/dbt_bouncer/checks/manifest/check_semantic_models.py +0 -58
- dbt_bouncer-1.31.2rc3/src/dbt_bouncer/checks/manifest/check_snapshots.py +0 -98
- dbt_bouncer-1.31.2rc3/src/dbt_bouncer/checks/manifest/check_sources.py +0 -403
- dbt_bouncer-1.31.2rc3/src/dbt_bouncer/checks/manifest/check_unit_tests.py +0 -210
- {dbt_bouncer-1.31.2rc3 → dbt_bouncer-2.0.0}/LICENSE +0 -0
- {dbt_bouncer-1.31.2rc3 → dbt_bouncer-2.0.0}/setup.cfg +0 -0
- {dbt_bouncer-1.31.2rc3 → dbt_bouncer-2.0.0}/src/dbt_bouncer/__init__.py +0 -0
- {dbt_bouncer-1.31.2rc3 → dbt_bouncer-2.0.0}/src/dbt_bouncer/logger.py +0 -0
- {dbt_bouncer-1.31.2rc3 → dbt_bouncer-2.0.0}/src/dbt_bouncer.egg-info/dependency_links.txt +0 -0
- {dbt_bouncer-1.31.2rc3 → dbt_bouncer-2.0.0}/src/dbt_bouncer.egg-info/entry_points.txt +0 -0
- {dbt_bouncer-1.31.2rc3 → dbt_bouncer-2.0.0}/src/dbt_bouncer.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dbt-bouncer
|
|
3
|
-
Version:
|
|
3
|
+
Version: 2.0.0
|
|
4
4
|
Summary: Configure and enforce conventions for your dbt project.
|
|
5
5
|
Author-email: Padraic Slattery <pgoslatara@gmail.com>
|
|
6
6
|
Maintainer-email: Padraic Slattery <pgoslatara@gmail.com>
|
|
@@ -13,43 +13,40 @@ Classifier: Programming Language :: Python :: 3 :: Only
|
|
|
13
13
|
Classifier: Programming Language :: Python :: 3.11
|
|
14
14
|
Classifier: Programming Language :: Python :: 3.12
|
|
15
15
|
Classifier: Programming Language :: Python :: 3.13
|
|
16
|
-
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
17
|
+
Requires-Python: <3.15,>=3.11
|
|
17
18
|
Description-Content-Type: text/markdown
|
|
18
19
|
License-File: LICENSE
|
|
19
|
-
Requires-Dist: click
|
|
20
|
+
Requires-Dist: click!=8.3.0,!=8.3.1,<9
|
|
20
21
|
Requires-Dist: dbt-artifacts-parser>=0.8
|
|
21
22
|
Requires-Dist: h11>=0.16.0
|
|
22
23
|
Requires-Dist: jellyfish<2,>=1
|
|
23
24
|
Requires-Dist: jinja2<4,>=3
|
|
24
25
|
Requires-Dist: jinja2-simple-tags<1
|
|
25
|
-
Requires-Dist: packaging<
|
|
26
|
+
Requires-Dist: packaging<26
|
|
26
27
|
Requires-Dist: progress
|
|
27
28
|
Requires-Dist: pydantic<3,>=2
|
|
29
|
+
Requires-Dist: pytest<=10
|
|
28
30
|
Requires-Dist: pyyaml<7
|
|
29
31
|
Requires-Dist: requests<3,>=2
|
|
30
32
|
Requires-Dist: tabulate<1
|
|
31
33
|
Requires-Dist: toml<1
|
|
32
34
|
Requires-Dist: semver<4
|
|
33
35
|
Provides-Extra: dev
|
|
34
|
-
Requires-Dist:
|
|
35
|
-
Requires-Dist:
|
|
36
|
-
Requires-Dist: dbt-core<2,>=1.10.0; extra == "dev"
|
|
36
|
+
Requires-Dist: bandit~=1.0; extra == "dev"
|
|
37
|
+
Requires-Dist: dbt-core<2,>=1.11.2; extra == "dev"
|
|
37
38
|
Requires-Dist: dbt-duckdb~=1.0; extra == "dev"
|
|
38
|
-
Requires-Dist:
|
|
39
|
-
Requires-Dist: mypy~=1.0; extra == "dev"
|
|
40
|
-
Requires-Dist: pre-commit<5,>=3; extra == "dev"
|
|
41
|
-
Requires-Dist: pytest<=10; extra == "dev"
|
|
39
|
+
Requires-Dist: prek<1,>=0.1; extra == "dev"
|
|
42
40
|
Requires-Dist: pytest-cov<8,>=5; extra == "dev"
|
|
43
41
|
Requires-Dist: pytest-xdist~=3.0; extra == "dev"
|
|
42
|
+
Requires-Dist: pyupgrade~=3.0; extra == "dev"
|
|
44
43
|
Requires-Dist: ruff~=0.0; extra == "dev"
|
|
45
44
|
Requires-Dist: shandy-sqlfmt[jinjafmt]~=0.0; extra == "dev"
|
|
46
|
-
Requires-Dist:
|
|
47
|
-
Requires-Dist: types-tabulate~=0.0; extra == "dev"
|
|
48
|
-
Requires-Dist: types-toml~=0.0; extra == "dev"
|
|
45
|
+
Requires-Dist: ty>=0.0.7; extra == "dev"
|
|
49
46
|
Provides-Extra: docs
|
|
50
47
|
Requires-Dist: mike~=2.0; extra == "docs"
|
|
51
48
|
Requires-Dist: mkdocs~=1.0; extra == "docs"
|
|
52
|
-
Requires-Dist: mkdocstrings-python<
|
|
49
|
+
Requires-Dist: mkdocstrings-python<3; extra == "docs"
|
|
53
50
|
Requires-Dist: mkdocs-click~=0.0; extra == "docs"
|
|
54
51
|
Requires-Dist: mkdocs-git-revision-date-localized-plugin~=1.0; extra == "docs"
|
|
55
52
|
Requires-Dist: mkdocs-material~=9.0; extra == "docs"
|
|
@@ -75,6 +72,9 @@ Dynamic: license-file
|
|
|
75
72
|
<a>
|
|
76
73
|
<img src="https://img.shields.io/badge/License-MIT-yellow.svg">
|
|
77
74
|
</a>
|
|
75
|
+
<a>
|
|
76
|
+
<img alt="security: bandit" href="https://github.com/PyCQA/bandit" src="https://img.shields.io/badge/security-bandit-yellow.svg">
|
|
77
|
+
</a>
|
|
78
78
|
<a>
|
|
79
79
|
<img src="https://img.shields.io/github/last-commit/godatadriven/dbt-bouncer/main">
|
|
80
80
|
</a>
|
|
@@ -17,6 +17,9 @@
|
|
|
17
17
|
<a>
|
|
18
18
|
<img src="https://img.shields.io/badge/License-MIT-yellow.svg">
|
|
19
19
|
</a>
|
|
20
|
+
<a>
|
|
21
|
+
<img alt="security: bandit" href="https://github.com/PyCQA/bandit" src="https://img.shields.io/badge/security-bandit-yellow.svg">
|
|
22
|
+
</a>
|
|
20
23
|
<a>
|
|
21
24
|
<img src="https://img.shields.io/github/last-commit/godatadriven/dbt-bouncer/main">
|
|
22
25
|
</a>
|
|
@@ -7,17 +7,19 @@ classifiers = [
|
|
|
7
7
|
"Programming Language :: Python :: 3.11",
|
|
8
8
|
"Programming Language :: Python :: 3.12",
|
|
9
9
|
"Programming Language :: Python :: 3.13",
|
|
10
|
+
"Programming Language :: Python :: 3.14",
|
|
10
11
|
]
|
|
11
12
|
dependencies =[
|
|
12
|
-
"click (
|
|
13
|
+
"click (!=8.3.0,!=8.3.1,<9)", # Due to this issue: https://github.com/pallets/click/issues/3110
|
|
13
14
|
"dbt-artifacts-parser (>=0.8)",
|
|
14
15
|
"h11 (>=0.16.0)", # To fix security warning
|
|
15
16
|
"jellyfish (>=1,<2)",
|
|
16
17
|
"jinja2 (>=3,<4)",
|
|
17
18
|
"jinja2-simple-tags (<1)",
|
|
18
|
-
"packaging (<
|
|
19
|
+
"packaging (<26)",
|
|
19
20
|
"progress",
|
|
20
21
|
"pydantic (>=2,<3)",
|
|
22
|
+
"pytest<=10",
|
|
21
23
|
"pyyaml (<7)",
|
|
22
24
|
"requests (>=2,<3)",
|
|
23
25
|
"tabulate (<1)",
|
|
@@ -35,31 +37,26 @@ license ="MIT"
|
|
|
35
37
|
maintainers = [{name="Padraic Slattery",email="pgoslatara@gmail.com"}]
|
|
36
38
|
name = "dbt-bouncer"
|
|
37
39
|
readme = "README.md"
|
|
38
|
-
requires-python = ">=3.11,<3.
|
|
39
|
-
version = "
|
|
40
|
+
requires-python = ">=3.11,<3.15"
|
|
41
|
+
version = "2.0.0"
|
|
40
42
|
|
|
41
43
|
[project.optional-dependencies]
|
|
42
44
|
dev = [
|
|
43
|
-
"
|
|
44
|
-
"
|
|
45
|
-
"dbt-core>=1.10.0,<2",
|
|
45
|
+
"bandit~=1.0",
|
|
46
|
+
"dbt-core>=1.11.2,<2",
|
|
46
47
|
"dbt-duckdb~=1.0",
|
|
47
|
-
"
|
|
48
|
-
"mypy~=1.0",
|
|
49
|
-
"pre-commit>=3,<5",
|
|
50
|
-
"pytest<=10",
|
|
48
|
+
"prek>=0.1,<1",
|
|
51
49
|
"pytest-cov>=5,<8",
|
|
52
50
|
"pytest-xdist~=3.0",
|
|
51
|
+
"pyupgrade~=3.0",
|
|
53
52
|
"ruff~=0.0",
|
|
54
53
|
"shandy-sqlfmt[jinjafmt]~=0.0",
|
|
55
|
-
"
|
|
56
|
-
"types-tabulate~=0.0",
|
|
57
|
-
"types-toml~=0.0"
|
|
54
|
+
"ty>=0.0.7"
|
|
58
55
|
]
|
|
59
56
|
docs = [
|
|
60
57
|
"mike~=2.0",
|
|
61
58
|
"mkdocs~=1.0",
|
|
62
|
-
"mkdocstrings-python<
|
|
59
|
+
"mkdocstrings-python<3",
|
|
63
60
|
"mkdocs-click~=0.0",
|
|
64
61
|
"mkdocs-git-revision-date-localized-plugin~=1.0",
|
|
65
62
|
"mkdocs-material~=9.0",
|
|
@@ -72,25 +69,6 @@ dbt-bouncer = "dbt_bouncer.main:cli"
|
|
|
72
69
|
[project.urls]
|
|
73
70
|
repository = "https://github.com/godatadriven/dbt-bouncer"
|
|
74
71
|
|
|
75
|
-
[tool.black]
|
|
76
|
-
line-length = 99
|
|
77
|
-
include = '/project$|\.pyi?$'
|
|
78
|
-
exclude = '''
|
|
79
|
-
/(
|
|
80
|
-
\.git
|
|
81
|
-
| \.hg
|
|
82
|
-
| \.eggs
|
|
83
|
-
| \.mypy_cache
|
|
84
|
-
| \.tox
|
|
85
|
-
| \.venv
|
|
86
|
-
| \.vscode
|
|
87
|
-
| _build
|
|
88
|
-
| buck-out
|
|
89
|
-
| build
|
|
90
|
-
| dist
|
|
91
|
-
)/
|
|
92
|
-
'''
|
|
93
|
-
|
|
94
72
|
[tool.coverage.report]
|
|
95
73
|
exclude_lines = [
|
|
96
74
|
"if TYPE_CHECKING:",
|
|
@@ -107,24 +85,6 @@ name = "check_model_names"
|
|
|
107
85
|
include = "^staging"
|
|
108
86
|
model_name_pattern = "^stg_"
|
|
109
87
|
|
|
110
|
-
[tool.isort]
|
|
111
|
-
profile = "black"
|
|
112
|
-
|
|
113
|
-
[tool.mypy]
|
|
114
|
-
follow_imports = "silent"
|
|
115
|
-
warn_redundant_casts = true
|
|
116
|
-
warn_unused_ignores = true
|
|
117
|
-
disallow_any_generics = true
|
|
118
|
-
check_untyped_defs = true
|
|
119
|
-
no_implicit_reexport = true
|
|
120
|
-
plugins = [
|
|
121
|
-
"pydantic.mypy"
|
|
122
|
-
]
|
|
123
|
-
|
|
124
|
-
[[tool.mypy.overrides]]
|
|
125
|
-
ignore_missing_imports = true
|
|
126
|
-
module = "dbt_artifacts_parser.*"
|
|
127
|
-
|
|
128
88
|
[tool.ruff]
|
|
129
89
|
exclude = [
|
|
130
90
|
".bzr",
|
|
@@ -157,7 +117,7 @@ exclude = [
|
|
|
157
117
|
]
|
|
158
118
|
line-length = 88
|
|
159
119
|
indent-width = 4
|
|
160
|
-
target-version = "
|
|
120
|
+
target-version = "py311"
|
|
161
121
|
|
|
162
122
|
[tool.ruff.lint]
|
|
163
123
|
ignore = ["COM812", "D100", "D203", "D213", "D406", "D407", "D409", "E501", "G004", "LOG015", "S101"]
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
from __future__ import annotations
|
|
5
5
|
|
|
6
|
-
from typing import Any
|
|
6
|
+
from typing import Any
|
|
7
7
|
|
|
8
8
|
from pydantic import ConfigDict, Field
|
|
9
9
|
|
|
@@ -14,11 +14,11 @@ class Metadata(BaseParserModel):
|
|
|
14
14
|
model_config = ConfigDict(
|
|
15
15
|
extra='allow',
|
|
16
16
|
)
|
|
17
|
-
dbt_schema_version:
|
|
18
|
-
dbt_version:
|
|
19
|
-
generated_at:
|
|
20
|
-
invocation_id:
|
|
21
|
-
env:
|
|
17
|
+
dbt_schema_version: str | None = None
|
|
18
|
+
dbt_version: str | None = '1.9.0b2'
|
|
19
|
+
generated_at: str | None = None
|
|
20
|
+
invocation_id: str | None = None
|
|
21
|
+
env: dict[str, str] | None = None
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
class Metadata1(BaseParserModel):
|
|
@@ -28,9 +28,9 @@ class Metadata1(BaseParserModel):
|
|
|
28
28
|
type: str
|
|
29
29
|
schema_: str = Field(..., alias='schema')
|
|
30
30
|
name: str
|
|
31
|
-
database:
|
|
32
|
-
comment:
|
|
33
|
-
owner:
|
|
31
|
+
database: str | None = None
|
|
32
|
+
comment: str | None = None
|
|
33
|
+
owner: str | None = None
|
|
34
34
|
|
|
35
35
|
|
|
36
36
|
class Columns(BaseParserModel):
|
|
@@ -40,7 +40,7 @@ class Columns(BaseParserModel):
|
|
|
40
40
|
type: str
|
|
41
41
|
index: int
|
|
42
42
|
name: str
|
|
43
|
-
comment:
|
|
43
|
+
comment: str | None = None
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
class Stats(BaseParserModel):
|
|
@@ -49,9 +49,9 @@ class Stats(BaseParserModel):
|
|
|
49
49
|
)
|
|
50
50
|
id: str
|
|
51
51
|
label: str
|
|
52
|
-
value:
|
|
52
|
+
value: bool | str | float | None = None
|
|
53
53
|
include: bool
|
|
54
|
-
description:
|
|
54
|
+
description: str | None = None
|
|
55
55
|
|
|
56
56
|
|
|
57
57
|
class Nodes(BaseParserModel):
|
|
@@ -59,9 +59,9 @@ class Nodes(BaseParserModel):
|
|
|
59
59
|
extra='allow',
|
|
60
60
|
)
|
|
61
61
|
metadata: Metadata1 = Field(..., title='TableMetadata')
|
|
62
|
-
columns:
|
|
63
|
-
stats:
|
|
64
|
-
unique_id:
|
|
62
|
+
columns: dict[str, Columns]
|
|
63
|
+
stats: dict[str, Stats]
|
|
64
|
+
unique_id: str | None = None
|
|
65
65
|
|
|
66
66
|
|
|
67
67
|
class Sources(BaseParserModel):
|
|
@@ -69,9 +69,9 @@ class Sources(BaseParserModel):
|
|
|
69
69
|
extra='allow',
|
|
70
70
|
)
|
|
71
71
|
metadata: Metadata1 = Field(..., title='TableMetadata')
|
|
72
|
-
columns:
|
|
73
|
-
stats:
|
|
74
|
-
unique_id:
|
|
72
|
+
columns: dict[str, Columns]
|
|
73
|
+
stats: dict[str, Stats]
|
|
74
|
+
unique_id: str | None = None
|
|
75
75
|
|
|
76
76
|
|
|
77
77
|
class CatalogLatest(BaseParserModel):
|
|
@@ -79,7 +79,7 @@ class CatalogLatest(BaseParserModel):
|
|
|
79
79
|
extra='allow',
|
|
80
80
|
)
|
|
81
81
|
metadata: Metadata = Field(..., title='CatalogMetadata')
|
|
82
|
-
nodes:
|
|
83
|
-
sources:
|
|
84
|
-
errors:
|
|
82
|
+
nodes: dict[str, Nodes]
|
|
83
|
+
sources: dict[str, Sources]
|
|
84
|
+
errors: list[str] | None = None
|
|
85
85
|
field_compile_results: Any = Field(None, alias='_compile_results')
|