dbt-bouncer 1.31.0__tar.gz → 1.31.2rc1__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.0 → dbt_bouncer-1.31.2rc1}/PKG-INFO +47 -24
- {dbt_bouncer-1.31.0 → dbt_bouncer-1.31.2rc1}/pyproject.toml +35 -44
- dbt_bouncer-1.31.2rc1/setup.cfg +4 -0
- {dbt_bouncer-1.31.0 → dbt_bouncer-1.31.2rc1}/src/dbt_bouncer/checks/manifest/check_exposures.py +2 -2
- {dbt_bouncer-1.31.0 → dbt_bouncer-1.31.2rc1}/src/dbt_bouncer/version.py +1 -1
- dbt_bouncer-1.31.2rc1/src/dbt_bouncer.egg-info/PKG-INFO +171 -0
- dbt_bouncer-1.31.2rc1/src/dbt_bouncer.egg-info/SOURCES.txt +38 -0
- dbt_bouncer-1.31.2rc1/src/dbt_bouncer.egg-info/dependency_links.txt +1 -0
- dbt_bouncer-1.31.2rc1/src/dbt_bouncer.egg-info/entry_points.txt +2 -0
- dbt_bouncer-1.31.2rc1/src/dbt_bouncer.egg-info/requires.txt +40 -0
- dbt_bouncer-1.31.2rc1/src/dbt_bouncer.egg-info/top_level.txt +1 -0
- dbt_bouncer-1.31.0/src/dbt_bouncer/artifact_parsers/dbt_cloud/README.md +0 -3
- {dbt_bouncer-1.31.0 → dbt_bouncer-1.31.2rc1}/LICENSE +0 -0
- {dbt_bouncer-1.31.0 → dbt_bouncer-1.31.2rc1}/README.md +0 -0
- {dbt_bouncer-1.31.0 → dbt_bouncer-1.31.2rc1}/src/dbt_bouncer/__init__.py +0 -0
- {dbt_bouncer-1.31.0 → dbt_bouncer-1.31.2rc1}/src/dbt_bouncer/artifact_parsers/dbt_cloud/catalog_latest.py +0 -0
- {dbt_bouncer-1.31.0 → dbt_bouncer-1.31.2rc1}/src/dbt_bouncer/artifact_parsers/dbt_cloud/manifest_latest.py +0 -0
- {dbt_bouncer-1.31.0 → dbt_bouncer-1.31.2rc1}/src/dbt_bouncer/artifact_parsers/dbt_cloud/run_results_latest.py +0 -0
- {dbt_bouncer-1.31.0 → dbt_bouncer-1.31.2rc1}/src/dbt_bouncer/artifact_parsers/parsers_catalog.py +0 -0
- {dbt_bouncer-1.31.0 → dbt_bouncer-1.31.2rc1}/src/dbt_bouncer/artifact_parsers/parsers_common.py +0 -0
- {dbt_bouncer-1.31.0 → dbt_bouncer-1.31.2rc1}/src/dbt_bouncer/artifact_parsers/parsers_manifest.py +0 -0
- {dbt_bouncer-1.31.0 → dbt_bouncer-1.31.2rc1}/src/dbt_bouncer/artifact_parsers/parsers_run_results.py +0 -0
- {dbt_bouncer-1.31.0 → dbt_bouncer-1.31.2rc1}/src/dbt_bouncer/check_base.py +0 -0
- {dbt_bouncer-1.31.0 → dbt_bouncer-1.31.2rc1}/src/dbt_bouncer/checks/catalog/check_catalog_sources.py +0 -0
- {dbt_bouncer-1.31.0 → dbt_bouncer-1.31.2rc1}/src/dbt_bouncer/checks/catalog/check_columns.py +0 -0
- {dbt_bouncer-1.31.0 → dbt_bouncer-1.31.2rc1}/src/dbt_bouncer/checks/common.py +0 -0
- {dbt_bouncer-1.31.0 → dbt_bouncer-1.31.2rc1}/src/dbt_bouncer/checks/manifest/check_lineage.py +0 -0
- {dbt_bouncer-1.31.0 → dbt_bouncer-1.31.2rc1}/src/dbt_bouncer/checks/manifest/check_macros.py +0 -0
- {dbt_bouncer-1.31.0 → dbt_bouncer-1.31.2rc1}/src/dbt_bouncer/checks/manifest/check_metadata.py +0 -0
- {dbt_bouncer-1.31.0 → dbt_bouncer-1.31.2rc1}/src/dbt_bouncer/checks/manifest/check_models.py +0 -0
- {dbt_bouncer-1.31.0 → dbt_bouncer-1.31.2rc1}/src/dbt_bouncer/checks/manifest/check_semantic_models.py +0 -0
- {dbt_bouncer-1.31.0 → dbt_bouncer-1.31.2rc1}/src/dbt_bouncer/checks/manifest/check_snapshots.py +0 -0
- {dbt_bouncer-1.31.0 → dbt_bouncer-1.31.2rc1}/src/dbt_bouncer/checks/manifest/check_sources.py +0 -0
- {dbt_bouncer-1.31.0 → dbt_bouncer-1.31.2rc1}/src/dbt_bouncer/checks/manifest/check_unit_tests.py +0 -0
- {dbt_bouncer-1.31.0 → dbt_bouncer-1.31.2rc1}/src/dbt_bouncer/checks/run_results/check_run_results.py +0 -0
- {dbt_bouncer-1.31.0 → dbt_bouncer-1.31.2rc1}/src/dbt_bouncer/config_file_parser.py +0 -0
- {dbt_bouncer-1.31.0 → dbt_bouncer-1.31.2rc1}/src/dbt_bouncer/config_file_validator.py +0 -0
- {dbt_bouncer-1.31.0 → dbt_bouncer-1.31.2rc1}/src/dbt_bouncer/logger.py +0 -0
- {dbt_bouncer-1.31.0 → dbt_bouncer-1.31.2rc1}/src/dbt_bouncer/main.py +0 -0
- {dbt_bouncer-1.31.0 → dbt_bouncer-1.31.2rc1}/src/dbt_bouncer/runner.py +0 -0
- {dbt_bouncer-1.31.0 → dbt_bouncer-1.31.2rc1}/src/dbt_bouncer/utils.py +0 -0
|
@@ -1,36 +1,60 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: dbt-bouncer
|
|
3
|
-
Version: 1.31.
|
|
3
|
+
Version: 1.31.2rc1
|
|
4
4
|
Summary: Configure and enforce conventions for your dbt project.
|
|
5
|
-
|
|
5
|
+
Author-email: Padraic Slattery <pgoslatara@gmail.com>
|
|
6
|
+
Maintainer-email: Padraic Slattery <pgoslatara@gmail.com>
|
|
7
|
+
License-Expression: MIT
|
|
8
|
+
Project-URL: repository, https://github.com/godatadriven/dbt-bouncer
|
|
6
9
|
Keywords: python,cli,dbt,CI/CD
|
|
7
|
-
Author: Padraic Slattery
|
|
8
|
-
Author-email: pgoslatara@gmail.com
|
|
9
|
-
Maintainer: Padraic Slattery
|
|
10
|
-
Maintainer-email: pgoslatara@gmail.com
|
|
11
|
-
Requires-Python: >=3.11,<3.14
|
|
12
10
|
Classifier: Programming Language :: Python
|
|
13
11
|
Classifier: Programming Language :: Python :: 3
|
|
14
12
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
15
13
|
Classifier: Programming Language :: Python :: 3.11
|
|
16
14
|
Classifier: Programming Language :: Python :: 3.12
|
|
17
15
|
Classifier: Programming Language :: Python :: 3.13
|
|
18
|
-
Requires-
|
|
19
|
-
Requires-Dist: dbt-artifacts-parser (>=0.8)
|
|
20
|
-
Requires-Dist: h11 (>=0.16.0)
|
|
21
|
-
Requires-Dist: jellyfish (>=1,<2)
|
|
22
|
-
Requires-Dist: jinja2 (>=3,<4)
|
|
23
|
-
Requires-Dist: jinja2-simple-tags (<1)
|
|
24
|
-
Requires-Dist: packaging (<25)
|
|
25
|
-
Requires-Dist: poetry (>=2.0.1,<3.0.0)
|
|
26
|
-
Requires-Dist: progress
|
|
27
|
-
Requires-Dist: pydantic (>=2,<3)
|
|
28
|
-
Requires-Dist: pyyaml (<7)
|
|
29
|
-
Requires-Dist: requests (>=2,<3)
|
|
30
|
-
Requires-Dist: semver (<4)
|
|
31
|
-
Requires-Dist: tabulate (<1)
|
|
32
|
-
Requires-Dist: toml (<1)
|
|
16
|
+
Requires-Python: <3.14,>=3.11
|
|
33
17
|
Description-Content-Type: text/markdown
|
|
18
|
+
License-File: LICENSE
|
|
19
|
+
Requires-Dist: click<9
|
|
20
|
+
Requires-Dist: dbt-artifacts-parser>=0.8
|
|
21
|
+
Requires-Dist: h11>=0.16.0
|
|
22
|
+
Requires-Dist: jellyfish<2,>=1
|
|
23
|
+
Requires-Dist: jinja2<4,>=3
|
|
24
|
+
Requires-Dist: jinja2-simple-tags<1
|
|
25
|
+
Requires-Dist: packaging<25
|
|
26
|
+
Requires-Dist: progress
|
|
27
|
+
Requires-Dist: pydantic<3,>=2
|
|
28
|
+
Requires-Dist: pyyaml<7
|
|
29
|
+
Requires-Dist: requests<3,>=2
|
|
30
|
+
Requires-Dist: tabulate<1
|
|
31
|
+
Requires-Dist: toml<1
|
|
32
|
+
Requires-Dist: semver<4
|
|
33
|
+
Provides-Extra: dev
|
|
34
|
+
Requires-Dist: autoflake~=2.0; extra == "dev"
|
|
35
|
+
Requires-Dist: black~=25.0; extra == "dev"
|
|
36
|
+
Requires-Dist: dbt-core<2,>=1.10.0; extra == "dev"
|
|
37
|
+
Requires-Dist: dbt-duckdb~=1.0; extra == "dev"
|
|
38
|
+
Requires-Dist: isort~=7.0; extra == "dev"
|
|
39
|
+
Requires-Dist: mypy~=1.0; extra == "dev"
|
|
40
|
+
Requires-Dist: pre-commit<5,>=3; extra == "dev"
|
|
41
|
+
Requires-Dist: pytest<=10; extra == "dev"
|
|
42
|
+
Requires-Dist: pytest-cov<8,>=5; extra == "dev"
|
|
43
|
+
Requires-Dist: pytest-xdist~=3.0; extra == "dev"
|
|
44
|
+
Requires-Dist: ruff~=0.0; extra == "dev"
|
|
45
|
+
Requires-Dist: shandy-sqlfmt[jinjafmt]~=0.0; extra == "dev"
|
|
46
|
+
Requires-Dist: types-PyYaml~=6.0; extra == "dev"
|
|
47
|
+
Requires-Dist: types-tabulate~=0.0; extra == "dev"
|
|
48
|
+
Requires-Dist: types-toml~=0.0; extra == "dev"
|
|
49
|
+
Provides-Extra: docs
|
|
50
|
+
Requires-Dist: mike~=2.0; extra == "docs"
|
|
51
|
+
Requires-Dist: mkdocs~=1.0; extra == "docs"
|
|
52
|
+
Requires-Dist: mkdocstrings-python<2; extra == "docs"
|
|
53
|
+
Requires-Dist: mkdocs-click~=0.0; extra == "docs"
|
|
54
|
+
Requires-Dist: mkdocs-git-revision-date-localized-plugin~=1.0; extra == "docs"
|
|
55
|
+
Requires-Dist: mkdocs-material~=9.0; extra == "docs"
|
|
56
|
+
Requires-Dist: pymdown-extensions~=10.0; extra == "docs"
|
|
57
|
+
Dynamic: license-file
|
|
34
58
|
|
|
35
59
|
<p align="center">
|
|
36
60
|
<img src="https://github.com/godatadriven/dbt-bouncer/raw/main/docs/assets/logo.svg" alt="dbt-bouncer logo" width="500"/>
|
|
@@ -145,4 +169,3 @@ All documentation can be found on `dbt-bouncer` [documentation website](https://
|
|
|
145
169
|
## Code of Conduct
|
|
146
170
|
|
|
147
171
|
Everyone interacting in `dbt-bouncer`'s codebase, issue trackers, chat rooms, and mailing lists is expected to follow the [Code of Conduct](./CODE_OF_CONDUCT.md).
|
|
148
|
-
|
|
@@ -22,8 +22,7 @@ dependencies =[
|
|
|
22
22
|
"requests (>=2,<3)",
|
|
23
23
|
"tabulate (<1)",
|
|
24
24
|
"toml (<1)",
|
|
25
|
-
"semver (<4)"
|
|
26
|
-
"poetry (>=2.0.1,<3.0.0)"
|
|
25
|
+
"semver (<4)"
|
|
27
26
|
]
|
|
28
27
|
description = "Configure and enforce conventions for your dbt project."
|
|
29
28
|
keywords = [
|
|
@@ -36,13 +35,43 @@ license ="MIT"
|
|
|
36
35
|
maintainers = [{name="Padraic Slattery",email="pgoslatara@gmail.com"}]
|
|
37
36
|
name = "dbt-bouncer"
|
|
38
37
|
readme = "README.md"
|
|
39
|
-
repository = "https://github.com/godatadriven/dbt-bouncer"
|
|
40
38
|
requires-python = ">=3.11,<3.14"
|
|
41
|
-
version = "1.31.
|
|
39
|
+
version = "1.31.2rc1"
|
|
40
|
+
|
|
41
|
+
[project.optional-dependencies]
|
|
42
|
+
dev = [
|
|
43
|
+
"autoflake~=2.0",
|
|
44
|
+
"black~=25.0",
|
|
45
|
+
"dbt-core>=1.10.0,<2",
|
|
46
|
+
"dbt-duckdb~=1.0",
|
|
47
|
+
"isort~=7.0",
|
|
48
|
+
"mypy~=1.0",
|
|
49
|
+
"pre-commit>=3,<5",
|
|
50
|
+
"pytest<=10",
|
|
51
|
+
"pytest-cov>=5,<8",
|
|
52
|
+
"pytest-xdist~=3.0",
|
|
53
|
+
"ruff~=0.0",
|
|
54
|
+
"shandy-sqlfmt[jinjafmt]~=0.0",
|
|
55
|
+
"types-PyYaml~=6.0",
|
|
56
|
+
"types-tabulate~=0.0",
|
|
57
|
+
"types-toml~=0.0"
|
|
58
|
+
]
|
|
59
|
+
docs = [
|
|
60
|
+
"mike~=2.0",
|
|
61
|
+
"mkdocs~=1.0",
|
|
62
|
+
"mkdocstrings-python<2",
|
|
63
|
+
"mkdocs-click~=0.0",
|
|
64
|
+
"mkdocs-git-revision-date-localized-plugin~=1.0",
|
|
65
|
+
"mkdocs-material~=9.0",
|
|
66
|
+
"pymdown-extensions~=10.0"
|
|
67
|
+
]
|
|
42
68
|
|
|
43
69
|
[project.scripts]
|
|
44
70
|
dbt-bouncer = "dbt_bouncer.main:cli"
|
|
45
71
|
|
|
72
|
+
[project.urls]
|
|
73
|
+
repository = "https://github.com/godatadriven/dbt-bouncer"
|
|
74
|
+
|
|
46
75
|
[tool.black]
|
|
47
76
|
line-length = 99
|
|
48
77
|
include = '/project$|\.pyi?$'
|
|
@@ -96,43 +125,6 @@ plugins = [
|
|
|
96
125
|
ignore_missing_imports = true
|
|
97
126
|
module = "dbt_artifacts_parser.*"
|
|
98
127
|
|
|
99
|
-
[tool.poetry]
|
|
100
|
-
packages = [
|
|
101
|
-
{include = "dbt_bouncer", from = "src"},
|
|
102
|
-
]
|
|
103
|
-
requires-poetry = ">=2.0.0"
|
|
104
|
-
|
|
105
|
-
[tool.poetry.group.dev.dependencies]
|
|
106
|
-
autoflake = "^2"
|
|
107
|
-
black = "^25"
|
|
108
|
-
dbt-core = ">=1.10.0,<2"
|
|
109
|
-
dbt-duckdb = "^1"
|
|
110
|
-
isort = "^7"
|
|
111
|
-
mypy = "^1"
|
|
112
|
-
pex = "^2"
|
|
113
|
-
pre-commit = ">=3,<5"
|
|
114
|
-
pytest = "<10"
|
|
115
|
-
pytest-cov = ">=5,<8"
|
|
116
|
-
pytest-xdist = "^3"
|
|
117
|
-
ruff = "^0"
|
|
118
|
-
sh = "^2"
|
|
119
|
-
"shandy-sqlfmt" = {version = "^0", extras=["shandy-sqlfmt[jinjafmt]"]}
|
|
120
|
-
types-PyYaml = "^6"
|
|
121
|
-
types-tabulate = "^0"
|
|
122
|
-
types-toml = "^0"
|
|
123
|
-
|
|
124
|
-
[tool.poetry.group.docs.dependencies]
|
|
125
|
-
mike = "^2"
|
|
126
|
-
mkdocs = "^1"
|
|
127
|
-
mkdocstrings = {extras = ["python"], version = "^0"}
|
|
128
|
-
mkdocs-click = "^0"
|
|
129
|
-
mkdocs-git-revision-date-localized-plugin = "^1"
|
|
130
|
-
mkdocs-material = "^9"
|
|
131
|
-
pymdown-extensions = {extras = ["details"], version = "^10"}
|
|
132
|
-
|
|
133
|
-
[tool.poetry_bumpversion.file."./src/dbt_bouncer/version.py"]
|
|
134
|
-
[tool.poetry_bumpversion.file."action.yml"]
|
|
135
|
-
|
|
136
128
|
[tool.ruff]
|
|
137
129
|
exclude = [
|
|
138
130
|
".bzr",
|
|
@@ -187,6 +179,5 @@ line-ending = "auto"
|
|
|
187
179
|
quote-style = "double"
|
|
188
180
|
skip-magic-trailing-comma = false
|
|
189
181
|
|
|
190
|
-
[
|
|
191
|
-
|
|
192
|
-
build-backend = "poetry.core.masonry.api"
|
|
182
|
+
[tool.uv]
|
|
183
|
+
package = true
|
{dbt_bouncer-1.31.0 → dbt_bouncer-1.31.2rc1}/src/dbt_bouncer/checks/manifest/check_exposures.py
RENAMED
|
@@ -18,8 +18,8 @@ class CheckExposureOnModel(BaseCheck):
|
|
|
18
18
|
"""Exposures should depend on a model.
|
|
19
19
|
|
|
20
20
|
Parameters:
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
maximum_number_of_models (Optional[int]): The maximum number of models an exposure can depend on, defaults to 100.
|
|
22
|
+
minimum_number_of_models (Optional[int]): The minimum number of models an exposure can depend on, defaults to 1.
|
|
23
23
|
|
|
24
24
|
Receives:
|
|
25
25
|
exposure (DbtBouncerExposureBase): The DbtBouncerExposureBase object to check.
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: dbt-bouncer
|
|
3
|
+
Version: 1.31.2rc1
|
|
4
|
+
Summary: Configure and enforce conventions for your dbt project.
|
|
5
|
+
Author-email: Padraic Slattery <pgoslatara@gmail.com>
|
|
6
|
+
Maintainer-email: Padraic Slattery <pgoslatara@gmail.com>
|
|
7
|
+
License-Expression: MIT
|
|
8
|
+
Project-URL: repository, https://github.com/godatadriven/dbt-bouncer
|
|
9
|
+
Keywords: python,cli,dbt,CI/CD
|
|
10
|
+
Classifier: Programming Language :: Python
|
|
11
|
+
Classifier: Programming Language :: Python :: 3
|
|
12
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
16
|
+
Requires-Python: <3.14,>=3.11
|
|
17
|
+
Description-Content-Type: text/markdown
|
|
18
|
+
License-File: LICENSE
|
|
19
|
+
Requires-Dist: click<9
|
|
20
|
+
Requires-Dist: dbt-artifacts-parser>=0.8
|
|
21
|
+
Requires-Dist: h11>=0.16.0
|
|
22
|
+
Requires-Dist: jellyfish<2,>=1
|
|
23
|
+
Requires-Dist: jinja2<4,>=3
|
|
24
|
+
Requires-Dist: jinja2-simple-tags<1
|
|
25
|
+
Requires-Dist: packaging<25
|
|
26
|
+
Requires-Dist: progress
|
|
27
|
+
Requires-Dist: pydantic<3,>=2
|
|
28
|
+
Requires-Dist: pyyaml<7
|
|
29
|
+
Requires-Dist: requests<3,>=2
|
|
30
|
+
Requires-Dist: tabulate<1
|
|
31
|
+
Requires-Dist: toml<1
|
|
32
|
+
Requires-Dist: semver<4
|
|
33
|
+
Provides-Extra: dev
|
|
34
|
+
Requires-Dist: autoflake~=2.0; extra == "dev"
|
|
35
|
+
Requires-Dist: black~=25.0; extra == "dev"
|
|
36
|
+
Requires-Dist: dbt-core<2,>=1.10.0; extra == "dev"
|
|
37
|
+
Requires-Dist: dbt-duckdb~=1.0; extra == "dev"
|
|
38
|
+
Requires-Dist: isort~=7.0; extra == "dev"
|
|
39
|
+
Requires-Dist: mypy~=1.0; extra == "dev"
|
|
40
|
+
Requires-Dist: pre-commit<5,>=3; extra == "dev"
|
|
41
|
+
Requires-Dist: pytest<=10; extra == "dev"
|
|
42
|
+
Requires-Dist: pytest-cov<8,>=5; extra == "dev"
|
|
43
|
+
Requires-Dist: pytest-xdist~=3.0; extra == "dev"
|
|
44
|
+
Requires-Dist: ruff~=0.0; extra == "dev"
|
|
45
|
+
Requires-Dist: shandy-sqlfmt[jinjafmt]~=0.0; extra == "dev"
|
|
46
|
+
Requires-Dist: types-PyYaml~=6.0; extra == "dev"
|
|
47
|
+
Requires-Dist: types-tabulate~=0.0; extra == "dev"
|
|
48
|
+
Requires-Dist: types-toml~=0.0; extra == "dev"
|
|
49
|
+
Provides-Extra: docs
|
|
50
|
+
Requires-Dist: mike~=2.0; extra == "docs"
|
|
51
|
+
Requires-Dist: mkdocs~=1.0; extra == "docs"
|
|
52
|
+
Requires-Dist: mkdocstrings-python<2; extra == "docs"
|
|
53
|
+
Requires-Dist: mkdocs-click~=0.0; extra == "docs"
|
|
54
|
+
Requires-Dist: mkdocs-git-revision-date-localized-plugin~=1.0; extra == "docs"
|
|
55
|
+
Requires-Dist: mkdocs-material~=9.0; extra == "docs"
|
|
56
|
+
Requires-Dist: pymdown-extensions~=10.0; extra == "docs"
|
|
57
|
+
Dynamic: license-file
|
|
58
|
+
|
|
59
|
+
<p align="center">
|
|
60
|
+
<img src="https://github.com/godatadriven/dbt-bouncer/raw/main/docs/assets/logo.svg" alt="dbt-bouncer logo" width="500"/>
|
|
61
|
+
</p>
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
<h1 align="center">
|
|
65
|
+
dbt-bouncer
|
|
66
|
+
</h1>
|
|
67
|
+
<h2 align="center">
|
|
68
|
+
Configure and enforce conventions for your dbt project.
|
|
69
|
+
</h2>
|
|
70
|
+
|
|
71
|
+
<div align="center">
|
|
72
|
+
<a>
|
|
73
|
+
<img src="https://img.shields.io/github/release/godatadriven/dbt-bouncer.svg?logo=github">
|
|
74
|
+
</a>
|
|
75
|
+
<a>
|
|
76
|
+
<img src="https://img.shields.io/badge/License-MIT-yellow.svg">
|
|
77
|
+
</a>
|
|
78
|
+
<a>
|
|
79
|
+
<img src="https://img.shields.io/github/last-commit/godatadriven/dbt-bouncer/main">
|
|
80
|
+
</a>
|
|
81
|
+
<a>
|
|
82
|
+
<img src="https://img.shields.io/github/commits-since/godatadriven/dbt-bouncer/latest">
|
|
83
|
+
</a>
|
|
84
|
+
</div>
|
|
85
|
+
|
|
86
|
+
<div align="center">
|
|
87
|
+
<a>
|
|
88
|
+
<img alt="dbt-core" src="https://img.shields.io/badge/dbt--core%20-%3E%3D1.7-333?logo=dbt">
|
|
89
|
+
</a>
|
|
90
|
+
<a>
|
|
91
|
+
<img alt="dbt Cloud Supported" src="https://img.shields.io/badge/dbt%20Cloud%20-Supported-ff694a?logo=dbt">
|
|
92
|
+
</a>
|
|
93
|
+
<a>
|
|
94
|
+
<img alt="Docker Supported" src="https://img.shields.io/badge/Docker%20-Supported-0db7ed?logo=docker">
|
|
95
|
+
</a>
|
|
96
|
+
<a>
|
|
97
|
+
<img alt="GitHub Supported" src="https://img.shields.io/badge/GitHub%20-Supported-333?logo=github">
|
|
98
|
+
</a>
|
|
99
|
+
</div>
|
|
100
|
+
|
|
101
|
+
<div align="center">
|
|
102
|
+
<a>
|
|
103
|
+
<img src="https://github.com/godatadriven/dbt-bouncer/actions/workflows/merge_pipeline.yml/badge.svg">
|
|
104
|
+
</a>
|
|
105
|
+
<a>
|
|
106
|
+
<img src="https://github.com/godatadriven/dbt-bouncer/actions/workflows/post_release_pipeline.yml/badge.svg">
|
|
107
|
+
</a>
|
|
108
|
+
<a>
|
|
109
|
+
<img src="https://img.shields.io/badge/style-ruff-41B5BE?style=flat">
|
|
110
|
+
</a>
|
|
111
|
+
<a>
|
|
112
|
+
<img src="https://www.aschey.tech/tokei/github/godatadriven/dbt-bouncer?category=code">
|
|
113
|
+
</a>
|
|
114
|
+
</div>
|
|
115
|
+
<br/>
|
|
116
|
+
|
|
117
|
+
## Documentation
|
|
118
|
+
|
|
119
|
+
All documentation can be found on `dbt-bouncer` [documentation website](https://godatadriven.github.io/dbt-bouncer/).
|
|
120
|
+
|
|
121
|
+
### TLDR
|
|
122
|
+
|
|
123
|
+
1. Install `dbt-bouncer`:
|
|
124
|
+
|
|
125
|
+
```shell
|
|
126
|
+
pip install dbt-bouncer
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
1. `dbt-bouncer` requires a `manifest.json` file. If not already present, run:
|
|
130
|
+
|
|
131
|
+
```shell
|
|
132
|
+
dbt parse
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
1. Create a `dbt-bouncer.yml` config file:
|
|
136
|
+
|
|
137
|
+
```yml
|
|
138
|
+
manifest_checks:
|
|
139
|
+
- name: check_model_directories
|
|
140
|
+
include: ^models
|
|
141
|
+
permitted_sub_directories:
|
|
142
|
+
- intermediate
|
|
143
|
+
- marts
|
|
144
|
+
- staging
|
|
145
|
+
- name: check_model_names
|
|
146
|
+
include: ^models/staging
|
|
147
|
+
model_name_pattern: ^stg_
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
1. Run `dbt-bouncer`:
|
|
151
|
+
|
|
152
|
+
```
|
|
153
|
+
$ dbt-bouncer
|
|
154
|
+
|
|
155
|
+
[...]
|
|
156
|
+
Running checks... |################################| 20/20
|
|
157
|
+
Done. SUCCESS=19 WARN=0 ERROR=1
|
|
158
|
+
Failed checks:
|
|
159
|
+
| Check name | Severity | Failure message |
|
|
160
|
+
|--------------------------|----------|---------------------------------------------------------------------------------------|
|
|
161
|
+
| check_model_directories: | error | AssertionError: `model` is located in `utilities`, this is not a valid sub-directory. |
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
## Reporting bugs and contributing code
|
|
165
|
+
|
|
166
|
+
- Want to report a bug or request a feature? Let us know and open [an issue](https://github.com/godatadriven/dbt-bouncer/issues/new/choose).
|
|
167
|
+
- Want to help us build `dbt-bouncer`? Check out the [Contributing Guide](https://github.com/godatadriven/dbt-bouncer/blob/HEAD/docs/CONTRIBUTING.md).
|
|
168
|
+
|
|
169
|
+
## Code of Conduct
|
|
170
|
+
|
|
171
|
+
Everyone interacting in `dbt-bouncer`'s codebase, issue trackers, chat rooms, and mailing lists is expected to follow the [Code of Conduct](./CODE_OF_CONDUCT.md).
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
LICENSE
|
|
2
|
+
README.md
|
|
3
|
+
pyproject.toml
|
|
4
|
+
src/dbt_bouncer/__init__.py
|
|
5
|
+
src/dbt_bouncer/check_base.py
|
|
6
|
+
src/dbt_bouncer/config_file_parser.py
|
|
7
|
+
src/dbt_bouncer/config_file_validator.py
|
|
8
|
+
src/dbt_bouncer/logger.py
|
|
9
|
+
src/dbt_bouncer/main.py
|
|
10
|
+
src/dbt_bouncer/runner.py
|
|
11
|
+
src/dbt_bouncer/utils.py
|
|
12
|
+
src/dbt_bouncer/version.py
|
|
13
|
+
src/dbt_bouncer.egg-info/PKG-INFO
|
|
14
|
+
src/dbt_bouncer.egg-info/SOURCES.txt
|
|
15
|
+
src/dbt_bouncer.egg-info/dependency_links.txt
|
|
16
|
+
src/dbt_bouncer.egg-info/entry_points.txt
|
|
17
|
+
src/dbt_bouncer.egg-info/requires.txt
|
|
18
|
+
src/dbt_bouncer.egg-info/top_level.txt
|
|
19
|
+
src/dbt_bouncer/artifact_parsers/parsers_catalog.py
|
|
20
|
+
src/dbt_bouncer/artifact_parsers/parsers_common.py
|
|
21
|
+
src/dbt_bouncer/artifact_parsers/parsers_manifest.py
|
|
22
|
+
src/dbt_bouncer/artifact_parsers/parsers_run_results.py
|
|
23
|
+
src/dbt_bouncer/artifact_parsers/dbt_cloud/catalog_latest.py
|
|
24
|
+
src/dbt_bouncer/artifact_parsers/dbt_cloud/manifest_latest.py
|
|
25
|
+
src/dbt_bouncer/artifact_parsers/dbt_cloud/run_results_latest.py
|
|
26
|
+
src/dbt_bouncer/checks/common.py
|
|
27
|
+
src/dbt_bouncer/checks/catalog/check_catalog_sources.py
|
|
28
|
+
src/dbt_bouncer/checks/catalog/check_columns.py
|
|
29
|
+
src/dbt_bouncer/checks/manifest/check_exposures.py
|
|
30
|
+
src/dbt_bouncer/checks/manifest/check_lineage.py
|
|
31
|
+
src/dbt_bouncer/checks/manifest/check_macros.py
|
|
32
|
+
src/dbt_bouncer/checks/manifest/check_metadata.py
|
|
33
|
+
src/dbt_bouncer/checks/manifest/check_models.py
|
|
34
|
+
src/dbt_bouncer/checks/manifest/check_semantic_models.py
|
|
35
|
+
src/dbt_bouncer/checks/manifest/check_snapshots.py
|
|
36
|
+
src/dbt_bouncer/checks/manifest/check_sources.py
|
|
37
|
+
src/dbt_bouncer/checks/manifest/check_unit_tests.py
|
|
38
|
+
src/dbt_bouncer/checks/run_results/check_run_results.py
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
click<9
|
|
2
|
+
dbt-artifacts-parser>=0.8
|
|
3
|
+
h11>=0.16.0
|
|
4
|
+
jellyfish<2,>=1
|
|
5
|
+
jinja2<4,>=3
|
|
6
|
+
jinja2-simple-tags<1
|
|
7
|
+
packaging<25
|
|
8
|
+
progress
|
|
9
|
+
pydantic<3,>=2
|
|
10
|
+
pyyaml<7
|
|
11
|
+
requests<3,>=2
|
|
12
|
+
tabulate<1
|
|
13
|
+
toml<1
|
|
14
|
+
semver<4
|
|
15
|
+
|
|
16
|
+
[dev]
|
|
17
|
+
autoflake~=2.0
|
|
18
|
+
black~=25.0
|
|
19
|
+
dbt-core<2,>=1.10.0
|
|
20
|
+
dbt-duckdb~=1.0
|
|
21
|
+
isort~=7.0
|
|
22
|
+
mypy~=1.0
|
|
23
|
+
pre-commit<5,>=3
|
|
24
|
+
pytest<=10
|
|
25
|
+
pytest-cov<8,>=5
|
|
26
|
+
pytest-xdist~=3.0
|
|
27
|
+
ruff~=0.0
|
|
28
|
+
shandy-sqlfmt[jinjafmt]~=0.0
|
|
29
|
+
types-PyYaml~=6.0
|
|
30
|
+
types-tabulate~=0.0
|
|
31
|
+
types-toml~=0.0
|
|
32
|
+
|
|
33
|
+
[docs]
|
|
34
|
+
mike~=2.0
|
|
35
|
+
mkdocs~=1.0
|
|
36
|
+
mkdocstrings-python<2
|
|
37
|
+
mkdocs-click~=0.0
|
|
38
|
+
mkdocs-git-revision-date-localized-plugin~=1.0
|
|
39
|
+
mkdocs-material~=9.0
|
|
40
|
+
pymdown-extensions~=10.0
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
dbt_bouncer
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
dbt Cloud now supports a "versionless" mode. Unfortunately `dbt-artifacts-parser` does not support any modifications to the schema od dbt artifacts using this mode, see [here](https://github.com/yu-iskw/dbt-artifacts-parser/pull/112#issuecomment-2360298424) for more info.
|
|
2
|
-
|
|
3
|
-
The purpose of this directory is to extend `dbt-artifacts-parser` to support dbt Cloud versionless mode by modifying the expected schema of dbt artifacts.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dbt_bouncer-1.31.0 → dbt_bouncer-1.31.2rc1}/src/dbt_bouncer/artifact_parsers/parsers_catalog.py
RENAMED
|
File without changes
|
{dbt_bouncer-1.31.0 → dbt_bouncer-1.31.2rc1}/src/dbt_bouncer/artifact_parsers/parsers_common.py
RENAMED
|
File without changes
|
{dbt_bouncer-1.31.0 → dbt_bouncer-1.31.2rc1}/src/dbt_bouncer/artifact_parsers/parsers_manifest.py
RENAMED
|
File without changes
|
{dbt_bouncer-1.31.0 → dbt_bouncer-1.31.2rc1}/src/dbt_bouncer/artifact_parsers/parsers_run_results.py
RENAMED
|
File without changes
|
|
File without changes
|
{dbt_bouncer-1.31.0 → dbt_bouncer-1.31.2rc1}/src/dbt_bouncer/checks/catalog/check_catalog_sources.py
RENAMED
|
File without changes
|
{dbt_bouncer-1.31.0 → dbt_bouncer-1.31.2rc1}/src/dbt_bouncer/checks/catalog/check_columns.py
RENAMED
|
File without changes
|
|
File without changes
|
{dbt_bouncer-1.31.0 → dbt_bouncer-1.31.2rc1}/src/dbt_bouncer/checks/manifest/check_lineage.py
RENAMED
|
File without changes
|
{dbt_bouncer-1.31.0 → dbt_bouncer-1.31.2rc1}/src/dbt_bouncer/checks/manifest/check_macros.py
RENAMED
|
File without changes
|
{dbt_bouncer-1.31.0 → dbt_bouncer-1.31.2rc1}/src/dbt_bouncer/checks/manifest/check_metadata.py
RENAMED
|
File without changes
|
{dbt_bouncer-1.31.0 → dbt_bouncer-1.31.2rc1}/src/dbt_bouncer/checks/manifest/check_models.py
RENAMED
|
File without changes
|
|
File without changes
|
{dbt_bouncer-1.31.0 → dbt_bouncer-1.31.2rc1}/src/dbt_bouncer/checks/manifest/check_snapshots.py
RENAMED
|
File without changes
|
{dbt_bouncer-1.31.0 → dbt_bouncer-1.31.2rc1}/src/dbt_bouncer/checks/manifest/check_sources.py
RENAMED
|
File without changes
|
{dbt_bouncer-1.31.0 → dbt_bouncer-1.31.2rc1}/src/dbt_bouncer/checks/manifest/check_unit_tests.py
RENAMED
|
File without changes
|
{dbt_bouncer-1.31.0 → dbt_bouncer-1.31.2rc1}/src/dbt_bouncer/checks/run_results/check_run_results.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|