mirror of
https://github.com/dbt-labs/dbt-core
synced 2025-12-19 13:51:27 +00:00
Compare commits
14 Commits
test-sqlpa
...
adding-sem
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2da925aa25 | ||
|
|
43e24c5ae6 | ||
|
|
89d111a5f6 | ||
|
|
e1b5e68904 | ||
|
|
065ab2ebc2 | ||
|
|
20c95a4993 | ||
|
|
c40b488cb4 | ||
|
|
585e7c59e8 | ||
|
|
7077c47551 | ||
|
|
f789b2535a | ||
|
|
2bfc6917e2 | ||
|
|
d74ae19523 | ||
|
|
1c7c23ac73 | ||
|
|
86e8722cd8 |
@@ -1,5 +1,5 @@
|
|||||||
[bumpversion]
|
[bumpversion]
|
||||||
current_version = 1.4.0b1
|
current_version = 1.5.0a1
|
||||||
parse = (?P<major>\d+)
|
parse = (?P<major>\d+)
|
||||||
\.(?P<minor>\d+)
|
\.(?P<minor>\d+)
|
||||||
\.(?P<patch>\d+)
|
\.(?P<patch>\d+)
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
For information on prior major and minor releases, see their changelogs:
|
For information on prior major and minor releases, see their changelogs:
|
||||||
|
|
||||||
|
|
||||||
|
* [1.4](https://github.com/dbt-labs/dbt-core/blob/1.4.latest/CHANGELOG.md)
|
||||||
* [1.3](https://github.com/dbt-labs/dbt-core/blob/1.3.latest/CHANGELOG.md)
|
* [1.3](https://github.com/dbt-labs/dbt-core/blob/1.3.latest/CHANGELOG.md)
|
||||||
* [1.2](https://github.com/dbt-labs/dbt-core/blob/1.2.latest/CHANGELOG.md)
|
* [1.2](https://github.com/dbt-labs/dbt-core/blob/1.2.latest/CHANGELOG.md)
|
||||||
* [1.1](https://github.com/dbt-labs/dbt-core/blob/1.1.latest/CHANGELOG.md)
|
* [1.1](https://github.com/dbt-labs/dbt-core/blob/1.1.latest/CHANGELOG.md)
|
||||||
|
|||||||
@@ -1,88 +0,0 @@
|
|||||||
## dbt-core 1.4.0-b1 - December 15, 2022
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
- Added favor-state flag to optionally favor state nodes even if unselected node exists ([#2968](https://github.com/dbt-labs/dbt-core/issues/2968))
|
|
||||||
- Update structured logging. Convert to using protobuf messages. Ensure events are enriched with node_info. ([#5610](https://github.com/dbt-labs/dbt-core/issues/5610))
|
|
||||||
- Friendlier error messages when packages.yml is malformed ([#5486](https://github.com/dbt-labs/dbt-core/issues/5486))
|
|
||||||
- Allow partitions in external tables to be supplied as a list ([#5929](https://github.com/dbt-labs/dbt-core/issues/5929))
|
|
||||||
- extend -f flag shorthand for seed command ([#5990](https://github.com/dbt-labs/dbt-core/issues/5990))
|
|
||||||
- This pulls the profile name from args when constructing a RuntimeConfig in lib.py, enabling the dbt-server to override the value that's in the dbt_project.yml ([#6201](https://github.com/dbt-labs/dbt-core/issues/6201))
|
|
||||||
- Adding tarball install method for packages. Allowing package tarball to be specified via url in the packages.yaml. ([#4205](https://github.com/dbt-labs/dbt-core/issues/4205))
|
|
||||||
- Added an md5 function to the base context ([#6246](https://github.com/dbt-labs/dbt-core/issues/6246))
|
|
||||||
- Exposures support metrics in lineage ([#6057](https://github.com/dbt-labs/dbt-core/issues/6057))
|
|
||||||
- Add support for Python 3.11 ([#6147](https://github.com/dbt-labs/dbt-core/issues/6147))
|
|
||||||
- incremental predicates ([#5680](https://github.com/dbt-labs/dbt-core/issues/5680))
|
|
||||||
|
|
||||||
### Fixes
|
|
||||||
|
|
||||||
- Account for disabled flags on models in schema files more completely ([#3992](https://github.com/dbt-labs/dbt-core/issues/3992))
|
|
||||||
- Add validation of enabled config for metrics, exposures and sources ([#6030](https://github.com/dbt-labs/dbt-core/issues/6030))
|
|
||||||
- check length of args of python model function before accessing it ([#6041](https://github.com/dbt-labs/dbt-core/issues/6041))
|
|
||||||
- Add functors to ensure event types with str-type attributes are initialized to spec, even when provided non-str type params. ([#5436](https://github.com/dbt-labs/dbt-core/issues/5436))
|
|
||||||
- Allow hooks to fail without halting execution flow ([#5625](https://github.com/dbt-labs/dbt-core/issues/5625))
|
|
||||||
- Clarify Error Message for how many models are allowed in a Python file ([#6245](https://github.com/dbt-labs/dbt-core/issues/6245))
|
|
||||||
- After this, will be possible to use default values for dbt.config.get ([#6309](https://github.com/dbt-labs/dbt-core/issues/6309))
|
|
||||||
- Use full path for writing manifest ([#6055](https://github.com/dbt-labs/dbt-core/issues/6055))
|
|
||||||
- [CT-1284] Change Python model default materialization to table ([#6345](https://github.com/dbt-labs/dbt-core/issues/6345))
|
|
||||||
- Repair a regression which prevented basic logging before the logging subsystem is completely configured. ([#6434](https://github.com/dbt-labs/dbt-core/issues/6434))
|
|
||||||
|
|
||||||
### Docs
|
|
||||||
|
|
||||||
- minor doc correction ([dbt-docs/#5791](https://github.com/dbt-labs/dbt-docs/issues/5791))
|
|
||||||
- Generate API docs for new CLI interface ([dbt-docs/#5528](https://github.com/dbt-labs/dbt-docs/issues/5528))
|
|
||||||
- ([dbt-docs/#5880](https://github.com/dbt-labs/dbt-docs/issues/5880))
|
|
||||||
- Fix rendering of sample code for metrics ([dbt-docs/#323](https://github.com/dbt-labs/dbt-docs/issues/323))
|
|
||||||
- Alphabetize `core/dbt/README.md` ([dbt-docs/#6368](https://github.com/dbt-labs/dbt-docs/issues/6368))
|
|
||||||
|
|
||||||
### Under the Hood
|
|
||||||
|
|
||||||
- Put black config in explicit config ([#5946](https://github.com/dbt-labs/dbt-core/issues/5946))
|
|
||||||
- Added flat_graph attribute the Manifest class's deepcopy() coverage ([#5809](https://github.com/dbt-labs/dbt-core/issues/5809))
|
|
||||||
- Add mypy configs so `mypy` passes from CLI ([#5983](https://github.com/dbt-labs/dbt-core/issues/5983))
|
|
||||||
- Exception message cleanup. ([#6023](https://github.com/dbt-labs/dbt-core/issues/6023))
|
|
||||||
- Add dmypy cache to gitignore ([#6028](https://github.com/dbt-labs/dbt-core/issues/6028))
|
|
||||||
- Provide useful errors when the value of 'materialized' is invalid ([#5229](https://github.com/dbt-labs/dbt-core/issues/5229))
|
|
||||||
- Clean up string formatting ([#6068](https://github.com/dbt-labs/dbt-core/issues/6068))
|
|
||||||
- Fixed extra whitespace in strings introduced by black. ([#1350](https://github.com/dbt-labs/dbt-core/issues/1350))
|
|
||||||
- Remove the 'root_path' field from most nodes ([#6171](https://github.com/dbt-labs/dbt-core/issues/6171))
|
|
||||||
- Combine certain logging events with different levels ([#6173](https://github.com/dbt-labs/dbt-core/issues/6173))
|
|
||||||
- Convert threading tests to pytest ([#5942](https://github.com/dbt-labs/dbt-core/issues/5942))
|
|
||||||
- Convert postgres index tests to pytest ([#5770](https://github.com/dbt-labs/dbt-core/issues/5770))
|
|
||||||
- Convert use color tests to pytest ([#5771](https://github.com/dbt-labs/dbt-core/issues/5771))
|
|
||||||
- Add github actions workflow to generate high level CLI API docs ([#5942](https://github.com/dbt-labs/dbt-core/issues/5942))
|
|
||||||
- Functionality-neutral refactor of event logging system to improve encapsulation and modularity. ([#6139](https://github.com/dbt-labs/dbt-core/issues/6139))
|
|
||||||
- Consolidate ParsedNode and CompiledNode classes ([#6383](https://github.com/dbt-labs/dbt-core/issues/6383))
|
|
||||||
- Prevent doc gen workflow from running on forks ([#6386](https://github.com/dbt-labs/dbt-core/issues/6386))
|
|
||||||
- Fix intermittent database connection failure in Windows CI test ([#6394](https://github.com/dbt-labs/dbt-core/issues/6394))
|
|
||||||
- Refactor and clean up manifest nodes ([#6426](https://github.com/dbt-labs/dbt-core/issues/6426))
|
|
||||||
- Restore important legacy logging behaviors, following refactor which removed them ([#6437](https://github.com/dbt-labs/dbt-core/issues/6437))
|
|
||||||
|
|
||||||
### Dependencies
|
|
||||||
|
|
||||||
- Update pathspec requirement from ~=0.9.0 to >=0.9,<0.11 in /core ([#5917](https://github.com/dbt-labs/dbt-core/pull/5917))
|
|
||||||
- Bump black from 22.8.0 to 22.10.0 ([#6019](https://github.com/dbt-labs/dbt-core/pull/6019))
|
|
||||||
- Bump mashumaro[msgpack] from 3.0.4 to 3.1.1 in /core ([#6108](https://github.com/dbt-labs/dbt-core/pull/6108))
|
|
||||||
- Update colorama requirement from <0.4.6,>=0.3.9 to >=0.3.9,<0.4.7 in /core ([#6144](https://github.com/dbt-labs/dbt-core/pull/6144))
|
|
||||||
- Bump mashumaro[msgpack] from 3.1.1 to 3.2 in /core ([#4904](https://github.com/dbt-labs/dbt-core/issues/4904))
|
|
||||||
|
|
||||||
### Contributors
|
|
||||||
- [@andy-clapson](https://github.com/andy-clapson) ([dbt-docs/#5791](https://github.com/dbt-labs/dbt-docs/issues/5791))
|
|
||||||
- [@chamini2](https://github.com/chamini2) ([#6041](https://github.com/dbt-labs/dbt-core/issues/6041))
|
|
||||||
- [@daniel-murray](https://github.com/daniel-murray) ([#2968](https://github.com/dbt-labs/dbt-core/issues/2968))
|
|
||||||
- [@dave-connors-3](https://github.com/dave-connors-3) ([#5990](https://github.com/dbt-labs/dbt-core/issues/5990))
|
|
||||||
- [@dbeatty10](https://github.com/dbeatty10) ([dbt-docs/#6368](https://github.com/dbt-labs/dbt-docs/issues/6368), [#6394](https://github.com/dbt-labs/dbt-core/issues/6394))
|
|
||||||
- [@devmessias](https://github.com/devmessias) ([#6309](https://github.com/dbt-labs/dbt-core/issues/6309))
|
|
||||||
- [@eve-johns](https://github.com/eve-johns) ([#6068](https://github.com/dbt-labs/dbt-core/issues/6068))
|
|
||||||
- [@haritamar](https://github.com/haritamar) ([#6246](https://github.com/dbt-labs/dbt-core/issues/6246))
|
|
||||||
- [@jared-rimmer](https://github.com/jared-rimmer) ([#5486](https://github.com/dbt-labs/dbt-core/issues/5486))
|
|
||||||
- [@josephberni](https://github.com/josephberni) ([#2968](https://github.com/dbt-labs/dbt-core/issues/2968))
|
|
||||||
- [@joshuataylor](https://github.com/joshuataylor) ([#6147](https://github.com/dbt-labs/dbt-core/issues/6147))
|
|
||||||
- [@justbldwn](https://github.com/justbldwn) ([#6245](https://github.com/dbt-labs/dbt-core/issues/6245))
|
|
||||||
- [@luke-bassett](https://github.com/luke-bassett) ([#1350](https://github.com/dbt-labs/dbt-core/issues/1350))
|
|
||||||
- [@max-sixty](https://github.com/max-sixty) ([#5946](https://github.com/dbt-labs/dbt-core/issues/5946), [#5983](https://github.com/dbt-labs/dbt-core/issues/5983), [#6028](https://github.com/dbt-labs/dbt-core/issues/6028))
|
|
||||||
- [@paulbenschmidt](https://github.com/paulbenschmidt) ([dbt-docs/#5880](https://github.com/dbt-labs/dbt-docs/issues/5880))
|
|
||||||
- [@pgoslatara](https://github.com/pgoslatara) ([#5929](https://github.com/dbt-labs/dbt-core/issues/5929))
|
|
||||||
- [@racheldaniel](https://github.com/racheldaniel) ([#6201](https://github.com/dbt-labs/dbt-core/issues/6201))
|
|
||||||
- [@timle2](https://github.com/timle2) ([#4205](https://github.com/dbt-labs/dbt-core/issues/4205))
|
|
||||||
- [@dave-connors-3](https://github.com/dave-connors-3) ([#5680](https://github.com/dbt-labs/dbt-core/issues/5680))
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: "Dependencies"
|
|
||||||
body: "Update pathspec requirement from ~=0.9.0 to >=0.9,<0.11 in /core"
|
|
||||||
time: 2022-09-23T00:06:46.00000Z
|
|
||||||
custom:
|
|
||||||
Author: dependabot[bot]
|
|
||||||
PR: "5917"
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: "Dependencies"
|
|
||||||
body: "Bump black from 22.8.0 to 22.10.0"
|
|
||||||
time: 2022-10-07T00:08:48.00000Z
|
|
||||||
custom:
|
|
||||||
Author: dependabot[bot]
|
|
||||||
PR: "6019"
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: "Dependencies"
|
|
||||||
body: "Bump mashumaro[msgpack] from 3.0.4 to 3.1.1 in /core"
|
|
||||||
time: 2022-10-20T00:07:53.00000Z
|
|
||||||
custom:
|
|
||||||
Author: dependabot[bot]
|
|
||||||
PR: "6108"
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: "Dependencies"
|
|
||||||
body: "Update colorama requirement from <0.4.6,>=0.3.9 to >=0.3.9,<0.4.7 in /core"
|
|
||||||
time: 2022-10-26T00:09:10.00000Z
|
|
||||||
custom:
|
|
||||||
Author: dependabot[bot]
|
|
||||||
PR: "6144"
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
kind: "Dependencies"
|
|
||||||
body: "Bump mashumaro[msgpack] from 3.1.1 to 3.2 in /core"
|
|
||||||
time: 2022-12-05T00:21:18.00000Z
|
|
||||||
custom:
|
|
||||||
Author: dependabot[bot]
|
|
||||||
Issue: 4904
|
|
||||||
PR: 6375
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: Docs
|
|
||||||
body: minor doc correction
|
|
||||||
time: 2022-09-08T15:41:57.689162-04:00
|
|
||||||
custom:
|
|
||||||
Author: andy-clapson
|
|
||||||
Issue: "5791"
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: Docs
|
|
||||||
body: Generate API docs for new CLI interface
|
|
||||||
time: 2022-10-07T09:06:56.446078-05:00
|
|
||||||
custom:
|
|
||||||
Author: stu-k
|
|
||||||
Issue: "5528"
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
kind: Docs
|
|
||||||
time: 2022-10-17T17:14:11.715348-05:00
|
|
||||||
custom:
|
|
||||||
Author: paulbenschmidt
|
|
||||||
Issue: "5880"
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: Docs
|
|
||||||
body: Fix rendering of sample code for metrics
|
|
||||||
time: 2022-11-16T15:57:43.204201+01:00
|
|
||||||
custom:
|
|
||||||
Author: jtcohen6
|
|
||||||
Issue: "323"
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: Docs
|
|
||||||
body: Alphabetize `core/dbt/README.md`
|
|
||||||
time: 2022-12-02T15:05:23.695333-07:00
|
|
||||||
custom:
|
|
||||||
Author: dbeatty10
|
|
||||||
Issue: "6368"
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
kind: Features
|
|
||||||
body: Added favor-state flag to optionally favor state nodes even if unselected node
|
|
||||||
exists
|
|
||||||
time: 2022-04-08T16:54:59.696564+01:00
|
|
||||||
custom:
|
|
||||||
Author: daniel-murray josephberni
|
|
||||||
Issue: "5016"
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: Features
|
|
||||||
body: Update structured logging. Convert to using protobuf messages. Ensure events are enriched with node_info.
|
|
||||||
time: 2022-08-17T15:48:57.225267-04:00
|
|
||||||
custom:
|
|
||||||
Author: gshank
|
|
||||||
Issue: "5610"
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
kind: Features
|
|
||||||
body: incremental predicates
|
|
||||||
time: 2022-08-23T08:57:27.640804-05:00
|
|
||||||
custom:
|
|
||||||
Author: dave-connors-3
|
|
||||||
Issue: "5680"
|
|
||||||
PR: "5702"
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: Features
|
|
||||||
body: Friendlier error messages when packages.yml is malformed
|
|
||||||
time: 2022-09-12T12:59:35.121188+01:00
|
|
||||||
custom:
|
|
||||||
Author: jared-rimmer
|
|
||||||
Issue: "5486"
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: Features
|
|
||||||
body: Allow partitions in external tables to be supplied as a list
|
|
||||||
time: 2022-09-25T21:16:51.051239654+02:00
|
|
||||||
custom:
|
|
||||||
Author: pgoslatara
|
|
||||||
Issue: "5929"
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: Features
|
|
||||||
body: extend -f flag shorthand for seed command
|
|
||||||
time: 2022-10-03T11:07:05.381632-05:00
|
|
||||||
custom:
|
|
||||||
Author: dave-connors-3
|
|
||||||
Issue: "5990"
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
kind: Features
|
|
||||||
body: This pulls the profile name from args when constructing a RuntimeConfig in lib.py,
|
|
||||||
enabling the dbt-server to override the value that's in the dbt_project.yml
|
|
||||||
time: 2022-11-02T15:00:03.000805-05:00
|
|
||||||
custom:
|
|
||||||
Author: racheldaniel
|
|
||||||
Issue: "6201"
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
kind: Features
|
|
||||||
body: Adding tarball install method for packages. Allowing package tarball to be specified
|
|
||||||
via url in the packages.yaml.
|
|
||||||
time: 2022-11-07T10:50:18.464545-05:00
|
|
||||||
custom:
|
|
||||||
Author: timle2
|
|
||||||
Issue: "4205"
|
|
||||||
PR: "4689"
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: Features
|
|
||||||
body: Added an md5 function to the base context
|
|
||||||
time: 2022-11-14T18:52:07.788593+02:00
|
|
||||||
custom:
|
|
||||||
Author: haritamar
|
|
||||||
Issue: "6246"
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: Features
|
|
||||||
body: Exposures support metrics in lineage
|
|
||||||
time: 2022-11-30T11:29:13.256034-05:00
|
|
||||||
custom:
|
|
||||||
Author: michelleark
|
|
||||||
Issue: "6057"
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
kind: Features
|
|
||||||
body: Add support for Python 3.11
|
|
||||||
time: 2022-12-06T15:07:04.753127+01:00
|
|
||||||
custom:
|
|
||||||
Author: joshuataylor MichelleArk jtcohen6
|
|
||||||
Issue: "6147"
|
|
||||||
PR: "6326"
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: Fixes
|
|
||||||
body: Account for disabled flags on models in schema files more completely
|
|
||||||
time: 2022-09-16T10:48:54.162273-05:00
|
|
||||||
custom:
|
|
||||||
Author: emmyoop
|
|
||||||
Issue: "3992"
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: Fixes
|
|
||||||
body: Add validation of enabled config for metrics, exposures and sources
|
|
||||||
time: 2022-10-10T11:32:18.752322-05:00
|
|
||||||
custom:
|
|
||||||
Author: emmyoop
|
|
||||||
Issue: "6030"
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: Fixes
|
|
||||||
body: check length of args of python model function before accessing it
|
|
||||||
time: 2022-10-11T16:07:15.464093-04:00
|
|
||||||
custom:
|
|
||||||
Author: chamini2
|
|
||||||
Issue: "6041"
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
kind: Fixes
|
|
||||||
body: Add functors to ensure event types with str-type attributes are initialized
|
|
||||||
to spec, even when provided non-str type params.
|
|
||||||
time: 2022-10-16T17:37:42.846683-07:00
|
|
||||||
custom:
|
|
||||||
Author: versusfacit
|
|
||||||
Issue: "5436"
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: Fixes
|
|
||||||
body: Allow hooks to fail without halting execution flow
|
|
||||||
time: 2022-11-07T09:53:14.340257-06:00
|
|
||||||
custom:
|
|
||||||
Author: ChenyuLInx
|
|
||||||
Issue: "5625"
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: Fixes
|
|
||||||
body: Clarify Error Message for how many models are allowed in a Python file
|
|
||||||
time: 2022-11-15T08:10:21.527884-05:00
|
|
||||||
custom:
|
|
||||||
Author: justbldwn
|
|
||||||
Issue: "6245"
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
kind: Fixes
|
|
||||||
body: After this, will be possible to use default values for dbt.config.get
|
|
||||||
time: 2022-11-24T16:34:19.039512764-03:00
|
|
||||||
custom:
|
|
||||||
Author: devmessias
|
|
||||||
Issue: "6309"
|
|
||||||
PR: "6317"
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: Fixes
|
|
||||||
body: Use full path for writing manifest
|
|
||||||
time: 2022-12-02T16:48:59.029519-05:00
|
|
||||||
custom:
|
|
||||||
Author: gshank
|
|
||||||
Issue: "6055"
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: Fixes
|
|
||||||
body: '[CT-1284] Change Python model default materialization to table'
|
|
||||||
time: 2022-12-13T11:26:20.550017-08:00
|
|
||||||
custom:
|
|
||||||
Author: aranke
|
|
||||||
Issue: "5989"
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
kind: Fixes
|
|
||||||
body: Repair a regression which prevented basic logging before the logging subsystem
|
|
||||||
is completely configured.
|
|
||||||
time: 2022-12-14T15:53:07.396512-05:00
|
|
||||||
custom:
|
|
||||||
Author: peterallenwebb
|
|
||||||
Issue: "6434"
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: Under the Hood
|
|
||||||
body: Put black config in explicit config
|
|
||||||
time: 2022-09-27T19:42:59.241433-07:00
|
|
||||||
custom:
|
|
||||||
Author: max-sixty
|
|
||||||
Issue: "5946"
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: Under the Hood
|
|
||||||
body: Added flat_graph attribute the Manifest class's deepcopy() coverage
|
|
||||||
time: 2022-09-29T13:44:06.275941-04:00
|
|
||||||
custom:
|
|
||||||
Author: peterallenwebb
|
|
||||||
Issue: "5809"
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: Under the Hood
|
|
||||||
body: Add mypy configs so `mypy` passes from CLI
|
|
||||||
time: 2022-10-05T12:03:10.061263-07:00
|
|
||||||
custom:
|
|
||||||
Author: max-sixty
|
|
||||||
Issue: "5983"
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: Under the Hood
|
|
||||||
body: Exception message cleanup.
|
|
||||||
time: 2022-10-07T09:46:27.682872-05:00
|
|
||||||
custom:
|
|
||||||
Author: emmyoop
|
|
||||||
Issue: "6023"
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: Under the Hood
|
|
||||||
body: Add dmypy cache to gitignore
|
|
||||||
time: 2022-10-07T14:00:44.227644-07:00
|
|
||||||
custom:
|
|
||||||
Author: max-sixty
|
|
||||||
Issue: "6028"
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: Under the Hood
|
|
||||||
body: Provide useful errors when the value of 'materialized' is invalid
|
|
||||||
time: 2022-10-13T18:19:12.167548-04:00
|
|
||||||
custom:
|
|
||||||
Author: peterallenwebb
|
|
||||||
Issue: "5229"
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: Under the Hood
|
|
||||||
body: Fixed extra whitespace in strings introduced by black.
|
|
||||||
time: 2022-10-17T15:15:11.499246-05:00
|
|
||||||
custom:
|
|
||||||
Author: luke-bassett
|
|
||||||
Issue: "1350"
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: Under the Hood
|
|
||||||
body: Clean up string formatting
|
|
||||||
time: 2022-10-17T15:58:44.676549-04:00
|
|
||||||
custom:
|
|
||||||
Author: eve-johns
|
|
||||||
Issue: "6068"
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: Under the Hood
|
|
||||||
body: Remove the 'root_path' field from most nodes
|
|
||||||
time: 2022-10-28T10:48:37.687886-04:00
|
|
||||||
custom:
|
|
||||||
Author: gshank
|
|
||||||
Issue: "6171"
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: Under the Hood
|
|
||||||
body: Combine certain logging events with different levels
|
|
||||||
time: 2022-10-28T11:03:44.887836-04:00
|
|
||||||
custom:
|
|
||||||
Author: gshank
|
|
||||||
Issue: "6173"
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: Under the Hood
|
|
||||||
body: Convert threading tests to pytest
|
|
||||||
time: 2022-11-08T07:45:50.589147-06:00
|
|
||||||
custom:
|
|
||||||
Author: stu-k
|
|
||||||
Issue: "5942"
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: Under the Hood
|
|
||||||
body: Convert postgres index tests to pytest
|
|
||||||
time: 2022-11-08T11:56:33.743042-06:00
|
|
||||||
custom:
|
|
||||||
Author: stu-k
|
|
||||||
Issue: "5770"
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: Under the Hood
|
|
||||||
body: Convert use color tests to pytest
|
|
||||||
time: 2022-11-08T13:31:04.788547-06:00
|
|
||||||
custom:
|
|
||||||
Author: stu-k
|
|
||||||
Issue: "5771"
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: Under the Hood
|
|
||||||
body: Add github actions workflow to generate high level CLI API docs
|
|
||||||
time: 2022-11-16T13:00:37.916202-06:00
|
|
||||||
custom:
|
|
||||||
Author: stu-k
|
|
||||||
Issue: "5942"
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
kind: Under the Hood
|
|
||||||
body: Functionality-neutral refactor of event logging system to improve encapsulation
|
|
||||||
and modularity.
|
|
||||||
time: 2022-11-18T14:57:17.792622-05:00
|
|
||||||
custom:
|
|
||||||
Author: peterallenwebb
|
|
||||||
Issue: "6139"
|
|
||||||
PR: "6291"
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
kind: Under the Hood
|
|
||||||
body: Consolidate ParsedNode and CompiledNode classes
|
|
||||||
time: 2022-12-05T16:49:48.563583-05:00
|
|
||||||
custom:
|
|
||||||
Author: gshank
|
|
||||||
Issue: "6383"
|
|
||||||
PR: "6384"
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
kind: Under the Hood
|
|
||||||
body: Prevent doc gen workflow from running on forks
|
|
||||||
time: 2022-12-06T09:40:15.301984-06:00
|
|
||||||
custom:
|
|
||||||
Author: stu-k
|
|
||||||
Issue: "6386"
|
|
||||||
PR: "6390"
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
kind: Under the Hood
|
|
||||||
body: Fix intermittent database connection failure in Windows CI test
|
|
||||||
time: 2022-12-06T11:30:53.166009-07:00
|
|
||||||
custom:
|
|
||||||
Author: MichelleArk dbeatty10
|
|
||||||
Issue: "6394"
|
|
||||||
PR: "6395"
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
kind: Under the Hood
|
|
||||||
body: Refactor and clean up manifest nodes
|
|
||||||
time: 2022-12-11T21:42:40.560074-05:00
|
|
||||||
custom:
|
|
||||||
Author: gshank
|
|
||||||
Issue: "6426"
|
|
||||||
PR: "6427"
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
kind: Under the Hood
|
|
||||||
body: Restore important legacy logging behaviors, following refactor which removed
|
|
||||||
them
|
|
||||||
time: 2022-12-13T21:41:06.815133-05:00
|
|
||||||
custom:
|
|
||||||
Author: peterallenwebb
|
|
||||||
Issue: "6437"
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
kind: Breaking Changes
|
|
||||||
body: Cleaned up exceptions to directly raise in code. Also updated the existing
|
|
||||||
exception to meet PEP guidelines.Removed use of all exception
|
|
||||||
functions in the code base and marked them all as deprecated to be removed next
|
|
||||||
minor release.
|
|
||||||
time: 2022-12-05T14:19:37.863032-06:00
|
|
||||||
custom:
|
|
||||||
Author: emmyoop
|
|
||||||
Issue: 6339 6393 6460
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: "Dependencies"
|
|
||||||
body: "Update agate requirement from <1.6.4,>=1.6 to >=1.6,<1.7.1 in /core"
|
|
||||||
time: 2023-01-04T00:03:06.00000Z
|
|
||||||
custom:
|
|
||||||
Author: dependabot[bot]
|
|
||||||
PR: 6506
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: Docs
|
|
||||||
body: Updated minor typos encountered when skipping profile setup
|
|
||||||
time: 2023-01-02T17:02:16.66596191-05:00
|
|
||||||
custom:
|
|
||||||
Author: nshuman1
|
|
||||||
Issue: 6529
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
kind: Features
|
|
||||||
body: Making timestamp optional for metrics
|
|
||||||
time: 2022-12-07T09:17:22.571877-06:00
|
|
||||||
custom:
|
|
||||||
Author: callum-mcdata
|
|
||||||
Issue: "6398"
|
|
||||||
PR: "9400"
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
kind: Features
|
|
||||||
body: The meta configuration field is now included in the node_info property of structured
|
|
||||||
logs.
|
|
||||||
time: 2022-12-30T10:48:20.486416-06:00
|
|
||||||
custom:
|
|
||||||
Author: tmastny
|
|
||||||
Issue: "6216"
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: Features
|
|
||||||
body: Adds buildable selection mode
|
|
||||||
time: 2023-01-02T09:13:35.663627-05:00
|
|
||||||
custom:
|
|
||||||
Author: agpapa
|
|
||||||
Issue: "6365"
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
kind: Features
|
|
||||||
body: '--warn-error-options: Treat warnings as errors for specific events, based on
|
|
||||||
user configuration'
|
|
||||||
time: 2023-01-04T18:10:03.203142-05:00
|
|
||||||
custom:
|
|
||||||
Author: MichelleArk
|
|
||||||
Issue: "6165"
|
|
||||||
6
.changes/unreleased/Features-20230118-134804.yaml
Normal file
6
.changes/unreleased/Features-20230118-134804.yaml
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
kind: Features
|
||||||
|
body: Adding the entity node
|
||||||
|
time: 2023-01-18T13:48:04.487817-06:00
|
||||||
|
custom:
|
||||||
|
Author: callum-mcdata
|
||||||
|
Issue: "6627"
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
kind: Fixes
|
|
||||||
body: fix missing f-strings, convert old .format() messages to f-strings for consistency
|
|
||||||
time: 2022-11-13T10:41:50.009727-05:00
|
|
||||||
custom:
|
|
||||||
Author: justbldwn
|
|
||||||
Issue: "6241"
|
|
||||||
PR: "6243"
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
kind: Fixes
|
|
||||||
body: Fix typo in util.py
|
|
||||||
time: 2022-11-17T22:03:20.4836855+09:00
|
|
||||||
custom:
|
|
||||||
Author: eltociear
|
|
||||||
Issue: "4904"
|
|
||||||
PR: "6037"
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
kind: Fixes
|
|
||||||
body: add pre-commit install to make dev script in Makefile
|
|
||||||
time: 2022-12-12T11:59:12.175136-05:00
|
|
||||||
custom:
|
|
||||||
Author: justbldwn
|
|
||||||
Issue: "6269"
|
|
||||||
PR: "6417"
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: Fixes
|
|
||||||
body: Late-rendering for `pre_` and `post_hook`s in `dbt_project.yml`
|
|
||||||
time: 2022-12-13T09:26:55.11397-07:00
|
|
||||||
custom:
|
|
||||||
Author: dbeatty10
|
|
||||||
Issue: "6411"
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: Fixes
|
|
||||||
body: '[CT-1591] Don''t parse empty Python files'
|
|
||||||
time: 2022-12-13T11:39:15.818464-08:00
|
|
||||||
custom:
|
|
||||||
Author: aranke
|
|
||||||
Issue: "6345"
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: Fixes
|
|
||||||
body: fix docs generate --defer by adding defer_to_manifest to before_run
|
|
||||||
time: 2022-12-26T01:02:11.630614+01:00
|
|
||||||
custom:
|
|
||||||
Author: mivanicova
|
|
||||||
Issue: "6488"
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: Fixes
|
|
||||||
body: Bug when partial parsing with an empty schema file
|
|
||||||
time: 2023-01-01T22:34:05.97322-05:00
|
|
||||||
custom:
|
|
||||||
Author: gshank
|
|
||||||
Issue: "4850"
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
kind: Fixes
|
|
||||||
body: Fix DBT_FAVOR_STATE env var
|
|
||||||
time: 2023-01-04T14:10:47.637495-08:00
|
|
||||||
custom:
|
|
||||||
Author: NiallRees
|
|
||||||
Issue: "5859"
|
|
||||||
PR: "6392"
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
kind: Fixes
|
|
||||||
body: Restore historical behavior of certain disabled test messages, so that they
|
|
||||||
are at the less obtrusive debug level, rather than the warning level.
|
|
||||||
time: 2023-01-09T16:12:54.064875-05:00
|
|
||||||
custom:
|
|
||||||
Author: peterallenwebb
|
|
||||||
Issue: "6501"
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
kind: Fixes
|
|
||||||
body: Bump mashumuro version to get regression fix and add unit test to verify that
|
|
||||||
fix.
|
|
||||||
time: 2023-01-10T12:41:32.339631-05:00
|
|
||||||
custom:
|
|
||||||
Author: peterallenwebb
|
|
||||||
Issue: "6428"
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: Under the Hood
|
|
||||||
body: Treat dense text blobs as binary for `git grep`
|
|
||||||
time: 2022-12-19T19:34:35.890275-07:00
|
|
||||||
custom:
|
|
||||||
Author: dbeatty10
|
|
||||||
Issue: "6294"
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: Under the Hood
|
|
||||||
body: Prune partial parsing logging events
|
|
||||||
time: 2022-12-21T12:19:04.7402-05:00
|
|
||||||
custom:
|
|
||||||
Author: gshank
|
|
||||||
Issue: "6313"
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: Under the Hood
|
|
||||||
body: Updating the deprecation warning in the metric attributes renamed event
|
|
||||||
time: 2023-01-04T15:52:57.916398-06:00
|
|
||||||
custom:
|
|
||||||
Author: callum-mcdata
|
|
||||||
Issue: "6507"
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: Under the Hood
|
|
||||||
body: '[CT-1693] Port severity test to Pytest'
|
|
||||||
time: 2023-01-06T11:28:55.800547-08:00
|
|
||||||
custom:
|
|
||||||
Author: aranke
|
|
||||||
Issue: "6466"
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: Under the Hood
|
|
||||||
body: '[CT-1694] Deprecate event tracking tests'
|
|
||||||
time: 2023-01-06T11:44:12.210821-08:00
|
|
||||||
custom:
|
|
||||||
Author: aranke
|
|
||||||
Issue: "6467"
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: Under the Hood
|
|
||||||
body: Reorganize structured logging events to have two top keys
|
|
||||||
time: 2023-01-09T09:59:07.842187-05:00
|
|
||||||
custom:
|
|
||||||
Author: gshank
|
|
||||||
Issue: "6311"
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: Under the Hood
|
|
||||||
body: Combine some logging events
|
|
||||||
time: 2023-01-10T11:42:33.580756-05:00
|
|
||||||
custom:
|
|
||||||
Author: gshank
|
|
||||||
Issue: 1716 1717 1719
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: Under the Hood
|
|
||||||
body: Check length of escaped strings in the adapter test
|
|
||||||
time: 2023-01-10T14:56:48.044198-07:00
|
|
||||||
custom:
|
|
||||||
Author: dbeatty10
|
|
||||||
Issue: "6566"
|
|
||||||
6
.changes/unreleased/Under the Hood-20230113-132513.yaml
Normal file
6
.changes/unreleased/Under the Hood-20230113-132513.yaml
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
kind: Under the Hood
|
||||||
|
body: Fix use of ConnectionReused logging event
|
||||||
|
time: 2023-01-13T13:25:13.023168-05:00
|
||||||
|
custom:
|
||||||
|
Author: gshank
|
||||||
|
Issue: "6168"
|
||||||
6
.changes/unreleased/Under the Hood-20230117-111737.yaml
Normal file
6
.changes/unreleased/Under the Hood-20230117-111737.yaml
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
kind: Under the Hood
|
||||||
|
body: Update deprecated github action command
|
||||||
|
time: 2023-01-17T11:17:37.046095-06:00
|
||||||
|
custom:
|
||||||
|
Author: davidbloss
|
||||||
|
Issue: "6153"
|
||||||
2
.flake8
2
.flake8
@@ -9,4 +9,4 @@ ignore =
|
|||||||
E203 # makes Flake8 work like black
|
E203 # makes Flake8 work like black
|
||||||
E741
|
E741
|
||||||
E501 # long line checking is done in black
|
E501 # long line checking is done in black
|
||||||
exclude = test
|
exclude = test/
|
||||||
|
|||||||
20
.github/_README.md
vendored
20
.github/_README.md
vendored
@@ -63,12 +63,12 @@ permissions:
|
|||||||
contents: read
|
contents: read
|
||||||
pull-requests: write
|
pull-requests: write
|
||||||
```
|
```
|
||||||
|
|
||||||
### Secrets
|
### Secrets
|
||||||
- When to use a [Personal Access Token (PAT)](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token) vs the [GITHUB_TOKEN](https://docs.github.com/en/actions/security-guides/automatic-token-authentication) generated for the action?
|
- When to use a [Personal Access Token (PAT)](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token) vs the [GITHUB_TOKEN](https://docs.github.com/en/actions/security-guides/automatic-token-authentication) generated for the action?
|
||||||
|
|
||||||
The `GITHUB_TOKEN` is used by default. In most cases it is sufficient for what you need.
|
The `GITHUB_TOKEN` is used by default. In most cases it is sufficient for what you need.
|
||||||
|
|
||||||
If you expect the workflow to result in a commit to that should retrigger workflows, you will need to use a Personal Access Token for the bot to commit the file. When using the GITHUB_TOKEN, the resulting commit will not trigger another GitHub Actions Workflow run. This is due to limitations set by GitHub. See [the docs](https://docs.github.com/en/actions/security-guides/automatic-token-authentication#using-the-github_token-in-a-workflow) for a more detailed explanation.
|
If you expect the workflow to result in a commit to that should retrigger workflows, you will need to use a Personal Access Token for the bot to commit the file. When using the GITHUB_TOKEN, the resulting commit will not trigger another GitHub Actions Workflow run. This is due to limitations set by GitHub. See [the docs](https://docs.github.com/en/actions/security-guides/automatic-token-authentication#using-the-github_token-in-a-workflow) for a more detailed explanation.
|
||||||
|
|
||||||
For example, we must use a PAT in our workflow to commit a new changelog yaml file for bot PRs. Once the file has been committed to the branch, it should retrigger the check to validate that a changelog exists on the PR. Otherwise, it would stay in a failed state since the check would never retrigger.
|
For example, we must use a PAT in our workflow to commit a new changelog yaml file for bot PRs. Once the file has been committed to the branch, it should retrigger the check to validate that a changelog exists on the PR. Otherwise, it would stay in a failed state since the check would never retrigger.
|
||||||
@@ -105,7 +105,7 @@ Some triggers of note that we use:
|
|||||||
|
|
||||||
```
|
```
|
||||||
# **what?**
|
# **what?**
|
||||||
# Describe what the action does.
|
# Describe what the action does.
|
||||||
|
|
||||||
# **why?**
|
# **why?**
|
||||||
# Why does this action exist?
|
# Why does this action exist?
|
||||||
@@ -138,7 +138,7 @@ Some triggers of note that we use:
|
|||||||
id: fp
|
id: fp
|
||||||
run: |
|
run: |
|
||||||
FILEPATH=.changes/unreleased/Dependencies-${{ steps.filename_time.outputs.time }}.yaml
|
FILEPATH=.changes/unreleased/Dependencies-${{ steps.filename_time.outputs.time }}.yaml
|
||||||
echo "::set-output name=FILEPATH::$FILEPATH"
|
echo "FILEPATH=$FILEPATH" >> $GITHUB_OUTPUT
|
||||||
```
|
```
|
||||||
|
|
||||||
- Print out all variables you will reference as the first step of a job. This allows for easier debugging. The first job should log all inputs. Subsequent jobs should reference outputs of other jobs, if present.
|
- Print out all variables you will reference as the first step of a job. This allows for easier debugging. The first job should log all inputs. Subsequent jobs should reference outputs of other jobs, if present.
|
||||||
@@ -158,14 +158,14 @@ Some triggers of note that we use:
|
|||||||
echo "The build_script_path: ${{ inputs.build_script_path }}"
|
echo "The build_script_path: ${{ inputs.build_script_path }}"
|
||||||
echo "The s3_bucket_name: ${{ inputs.s3_bucket_name }}"
|
echo "The s3_bucket_name: ${{ inputs.s3_bucket_name }}"
|
||||||
echo "The package_test_command: ${{ inputs.package_test_command }}"
|
echo "The package_test_command: ${{ inputs.package_test_command }}"
|
||||||
|
|
||||||
# collect all the variables that need to be used in subsequent jobs
|
# collect all the variables that need to be used in subsequent jobs
|
||||||
- name: Set Variables
|
- name: Set Variables
|
||||||
id: variables
|
id: variables
|
||||||
run: |
|
run: |
|
||||||
echo "::set-output name=important_path::'performance/runner/Cargo.toml'"
|
echo "important_path='performance/runner/Cargo.toml'" >> $GITHUB_OUTPUT
|
||||||
echo "::set-output name=release_id::${{github.event.inputs.release_id}}"
|
echo "release_id=${{github.event.inputs.release_id}}" >> $GITHUB_OUTPUT
|
||||||
echo "::set-output name=open_prs::${{github.event.inputs.open_prs}}"
|
echo "open_prs=${{github.event.inputs.open_prs}}" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
job2:
|
job2:
|
||||||
needs: [job1]
|
needs: [job1]
|
||||||
@@ -190,7 +190,7 @@ ___
|
|||||||
### Actions from the Marketplace
|
### Actions from the Marketplace
|
||||||
- Don’t use external actions for things that can easily be accomplished manually.
|
- Don’t use external actions for things that can easily be accomplished manually.
|
||||||
- Always read through what an external action does before using it! Often an action in the GitHub Actions Marketplace can be replaced with a few lines in bash. This is much more maintainable (and won’t change under us) and clear as to what’s actually happening. It also prevents any
|
- Always read through what an external action does before using it! Often an action in the GitHub Actions Marketplace can be replaced with a few lines in bash. This is much more maintainable (and won’t change under us) and clear as to what’s actually happening. It also prevents any
|
||||||
- Pin actions _we don't control_ to tags.
|
- Pin actions _we don't control_ to tags.
|
||||||
|
|
||||||
### Connecting to AWS
|
### Connecting to AWS
|
||||||
- Authenticate with the aws managed workflow
|
- Authenticate with the aws managed workflow
|
||||||
@@ -208,7 +208,7 @@ ___
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- name: Copy Artifacts from S3 via CLI
|
- name: Copy Artifacts from S3 via CLI
|
||||||
run: aws s3 cp ${{ env.s3_bucket }} . --recursive
|
run: aws s3 cp ${{ env.s3_bucket }} . --recursive
|
||||||
```
|
```
|
||||||
|
|
||||||
### Testing
|
### Testing
|
||||||
|
|||||||
17
.github/actions/latest-wrangler/main.py
vendored
17
.github/actions/latest-wrangler/main.py
vendored
@@ -28,11 +28,12 @@ if __name__ == "__main__":
|
|||||||
if package_request.status_code == 404:
|
if package_request.status_code == 404:
|
||||||
if halt_on_missing:
|
if halt_on_missing:
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
else:
|
# everything is the latest if the package doesn't exist
|
||||||
# everything is the latest if the package doesn't exist
|
github_output = os.environ.get("GITHUB_OUTPUT")
|
||||||
print(f"::set-output name=latest::{True}")
|
with open(github_output, "at", encoding="utf-8") as gh_output:
|
||||||
print(f"::set-output name=minor_latest::{True}")
|
gh_output.write("latest=True")
|
||||||
sys.exit(0)
|
gh_output.write("minor_latest=True")
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
# TODO: verify package meta is "correct"
|
# TODO: verify package meta is "correct"
|
||||||
# https://github.com/dbt-labs/dbt-core/issues/4640
|
# https://github.com/dbt-labs/dbt-core/issues/4640
|
||||||
@@ -91,5 +92,7 @@ if __name__ == "__main__":
|
|||||||
latest = is_latest(pre_rel, new_version, current_latest)
|
latest = is_latest(pre_rel, new_version, current_latest)
|
||||||
minor_latest = is_latest(pre_rel, new_version, current_minor_latest)
|
minor_latest = is_latest(pre_rel, new_version, current_minor_latest)
|
||||||
|
|
||||||
print(f"::set-output name=latest::{latest}")
|
github_output = os.environ.get("GITHUB_OUTPUT")
|
||||||
print(f"::set-output name=minor_latest::{minor_latest}")
|
with open(github_output, "at", encoding="utf-8") as gh_output:
|
||||||
|
gh_output.write(f"latest={latest}")
|
||||||
|
gh_output.write(f"minor_latest={minor_latest}")
|
||||||
|
|||||||
8
.github/workflows/main.yml
vendored
8
.github/workflows/main.yml
vendored
@@ -101,7 +101,9 @@ jobs:
|
|||||||
- name: Get current date
|
- name: Get current date
|
||||||
if: always()
|
if: always()
|
||||||
id: date
|
id: date
|
||||||
run: echo "::set-output name=date::$(date +'%Y-%m-%dT%H_%M_%S')" #no colons allowed for artifacts
|
run: |
|
||||||
|
CURRENT_DATE=$(date +'%Y-%m-%dT%H_%M_%S') # no colons allowed for artifacts
|
||||||
|
echo "date=$CURRENT_DATE" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v2
|
- uses: actions/upload-artifact@v2
|
||||||
if: always()
|
if: always()
|
||||||
@@ -168,7 +170,9 @@ jobs:
|
|||||||
- name: Get current date
|
- name: Get current date
|
||||||
if: always()
|
if: always()
|
||||||
id: date
|
id: date
|
||||||
run: echo "::set-output name=date::$(date +'%Y_%m_%dT%H_%M_%S')" #no colons allowed for artifacts
|
run: |
|
||||||
|
CURRENT_DATE=$(date +'%Y-%m-%dT%H_%M_%S') # no colons allowed for artifacts
|
||||||
|
echo "date=$CURRENT_DATE" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v2
|
- uses: actions/upload-artifact@v2
|
||||||
if: always()
|
if: always()
|
||||||
|
|||||||
12
.github/workflows/release-docker.yml
vendored
12
.github/workflows/release-docker.yml
vendored
@@ -41,9 +41,9 @@ jobs:
|
|||||||
id: version
|
id: version
|
||||||
run: |
|
run: |
|
||||||
IFS="." read -r MAJOR MINOR PATCH <<< ${{ github.event.inputs.version_number }}
|
IFS="." read -r MAJOR MINOR PATCH <<< ${{ github.event.inputs.version_number }}
|
||||||
echo "::set-output name=major::$MAJOR"
|
echo "major=$MAJOR" >> $GITHUB_OUTPUT
|
||||||
echo "::set-output name=minor::$MINOR"
|
echo "minor=$MINOR" >> $GITHUB_OUTPUT
|
||||||
echo "::set-output name=patch::$PATCH"
|
echo "patch=$PATCH" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- name: Is pkg 'latest'
|
- name: Is pkg 'latest'
|
||||||
id: latest
|
id: latest
|
||||||
@@ -70,8 +70,10 @@ jobs:
|
|||||||
- name: Get docker build arg
|
- name: Get docker build arg
|
||||||
id: build_arg
|
id: build_arg
|
||||||
run: |
|
run: |
|
||||||
echo "::set-output name=build_arg_name::"$(echo ${{ github.event.inputs.package }} | sed 's/\-/_/g')
|
BUILD_ARG_NAME=$(echo ${{ github.event.inputs.package }} | sed 's/\-/_/g')
|
||||||
echo "::set-output name=build_arg_value::"$(echo ${{ github.event.inputs.package }} | sed 's/postgres/core/g')
|
BUILD_ARG_VALUE=$(echo ${{ github.event.inputs.package }} | sed 's/postgres/core/g')
|
||||||
|
echo "build_arg_name=$BUILD_ARG_NAME" >> $GITHUB_OUTPUT
|
||||||
|
echo "build_arg_value=$BUILD_ARG_VALUE" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- name: Log in to the GHCR
|
- name: Log in to the GHCR
|
||||||
uses: docker/login-action@v1
|
uses: docker/login-action@v1
|
||||||
|
|||||||
2
.github/workflows/release.yml
vendored
2
.github/workflows/release.yml
vendored
@@ -165,7 +165,7 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
IS_PRERELEASE: ${{ contains(github.event.inputs.version_number, 'rc') || contains(github.event.inputs.version_number, 'b') }}
|
IS_PRERELEASE: ${{ contains(github.event.inputs.version_number, 'rc') || contains(github.event.inputs.version_number, 'b') }}
|
||||||
run: |
|
run: |
|
||||||
echo ::set-output name=isPrerelease::$IS_PRERELEASE
|
echo "isPrerelease=$IS_PRERELEASE" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- name: Creating GitHub Release
|
- name: Creating GitHub Release
|
||||||
uses: softprops/action-gh-release@v1
|
uses: softprops/action-gh-release@v1
|
||||||
|
|||||||
2
.github/workflows/version-bump.yml
vendored
2
.github/workflows/version-bump.yml
vendored
@@ -65,7 +65,7 @@ jobs:
|
|||||||
- name: Set branch value
|
- name: Set branch value
|
||||||
id: variables
|
id: variables
|
||||||
run: |
|
run: |
|
||||||
echo "::set-output name=BRANCH_NAME::prep-release/${{ github.event.inputs.version_number }}_$GITHUB_RUN_ID"
|
echo "BRANCH_NAME=prep-release/${{ github.event.inputs.version_number }}_$GITHUB_RUN_ID" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- name: Create PR branch
|
- name: Create PR branch
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
91
CHANGELOG.md
91
CHANGELOG.md
@@ -5,101 +5,12 @@
|
|||||||
- "Breaking changes" listed under a version may require action from end users or external maintainers when upgrading to that version.
|
- "Breaking changes" listed under a version may require action from end users or external maintainers when upgrading to that version.
|
||||||
- Do not edit this file directly. This file is auto-generated using [changie](https://github.com/miniscruff/changie). For details on how to document a change, see [the contributing guide](https://github.com/dbt-labs/dbt-core/blob/main/CONTRIBUTING.md#adding-changelog-entry)
|
- Do not edit this file directly. This file is auto-generated using [changie](https://github.com/miniscruff/changie). For details on how to document a change, see [the contributing guide](https://github.com/dbt-labs/dbt-core/blob/main/CONTRIBUTING.md#adding-changelog-entry)
|
||||||
|
|
||||||
## dbt-core 1.4.0-b1 - December 15, 2022
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
- Added favor-state flag to optionally favor state nodes even if unselected node exists ([#2968](https://github.com/dbt-labs/dbt-core/issues/2968))
|
|
||||||
- Update structured logging. Convert to using protobuf messages. Ensure events are enriched with node_info. ([#5610](https://github.com/dbt-labs/dbt-core/issues/5610))
|
|
||||||
- Friendlier error messages when packages.yml is malformed ([#5486](https://github.com/dbt-labs/dbt-core/issues/5486))
|
|
||||||
- Allow partitions in external tables to be supplied as a list ([#5929](https://github.com/dbt-labs/dbt-core/issues/5929))
|
|
||||||
- extend -f flag shorthand for seed command ([#5990](https://github.com/dbt-labs/dbt-core/issues/5990))
|
|
||||||
- This pulls the profile name from args when constructing a RuntimeConfig in lib.py, enabling the dbt-server to override the value that's in the dbt_project.yml ([#6201](https://github.com/dbt-labs/dbt-core/issues/6201))
|
|
||||||
- Adding tarball install method for packages. Allowing package tarball to be specified via url in the packages.yaml. ([#4205](https://github.com/dbt-labs/dbt-core/issues/4205))
|
|
||||||
- Added an md5 function to the base context ([#6246](https://github.com/dbt-labs/dbt-core/issues/6246))
|
|
||||||
- Exposures support metrics in lineage ([#6057](https://github.com/dbt-labs/dbt-core/issues/6057))
|
|
||||||
- Add support for Python 3.11 ([#6147](https://github.com/dbt-labs/dbt-core/issues/6147))
|
|
||||||
- incremental predicates ([#5680](https://github.com/dbt-labs/dbt-core/issues/5680))
|
|
||||||
|
|
||||||
### Fixes
|
|
||||||
|
|
||||||
- Account for disabled flags on models in schema files more completely ([#3992](https://github.com/dbt-labs/dbt-core/issues/3992))
|
|
||||||
- Add validation of enabled config for metrics, exposures and sources ([#6030](https://github.com/dbt-labs/dbt-core/issues/6030))
|
|
||||||
- check length of args of python model function before accessing it ([#6041](https://github.com/dbt-labs/dbt-core/issues/6041))
|
|
||||||
- Add functors to ensure event types with str-type attributes are initialized to spec, even when provided non-str type params. ([#5436](https://github.com/dbt-labs/dbt-core/issues/5436))
|
|
||||||
- Allow hooks to fail without halting execution flow ([#5625](https://github.com/dbt-labs/dbt-core/issues/5625))
|
|
||||||
- Clarify Error Message for how many models are allowed in a Python file ([#6245](https://github.com/dbt-labs/dbt-core/issues/6245))
|
|
||||||
- After this, will be possible to use default values for dbt.config.get ([#6309](https://github.com/dbt-labs/dbt-core/issues/6309))
|
|
||||||
- Use full path for writing manifest ([#6055](https://github.com/dbt-labs/dbt-core/issues/6055))
|
|
||||||
- [CT-1284] Change Python model default materialization to table ([#6345](https://github.com/dbt-labs/dbt-core/issues/6345))
|
|
||||||
- Repair a regression which prevented basic logging before the logging subsystem is completely configured. ([#6434](https://github.com/dbt-labs/dbt-core/issues/6434))
|
|
||||||
|
|
||||||
### Docs
|
|
||||||
|
|
||||||
- minor doc correction ([dbt-docs/#5791](https://github.com/dbt-labs/dbt-docs/issues/5791))
|
|
||||||
- Generate API docs for new CLI interface ([dbt-docs/#5528](https://github.com/dbt-labs/dbt-docs/issues/5528))
|
|
||||||
- ([dbt-docs/#5880](https://github.com/dbt-labs/dbt-docs/issues/5880))
|
|
||||||
- Fix rendering of sample code for metrics ([dbt-docs/#323](https://github.com/dbt-labs/dbt-docs/issues/323))
|
|
||||||
- Alphabetize `core/dbt/README.md` ([dbt-docs/#6368](https://github.com/dbt-labs/dbt-docs/issues/6368))
|
|
||||||
|
|
||||||
### Under the Hood
|
|
||||||
|
|
||||||
- Put black config in explicit config ([#5946](https://github.com/dbt-labs/dbt-core/issues/5946))
|
|
||||||
- Added flat_graph attribute the Manifest class's deepcopy() coverage ([#5809](https://github.com/dbt-labs/dbt-core/issues/5809))
|
|
||||||
- Add mypy configs so `mypy` passes from CLI ([#5983](https://github.com/dbt-labs/dbt-core/issues/5983))
|
|
||||||
- Exception message cleanup. ([#6023](https://github.com/dbt-labs/dbt-core/issues/6023))
|
|
||||||
- Add dmypy cache to gitignore ([#6028](https://github.com/dbt-labs/dbt-core/issues/6028))
|
|
||||||
- Provide useful errors when the value of 'materialized' is invalid ([#5229](https://github.com/dbt-labs/dbt-core/issues/5229))
|
|
||||||
- Clean up string formatting ([#6068](https://github.com/dbt-labs/dbt-core/issues/6068))
|
|
||||||
- Fixed extra whitespace in strings introduced by black. ([#1350](https://github.com/dbt-labs/dbt-core/issues/1350))
|
|
||||||
- Remove the 'root_path' field from most nodes ([#6171](https://github.com/dbt-labs/dbt-core/issues/6171))
|
|
||||||
- Combine certain logging events with different levels ([#6173](https://github.com/dbt-labs/dbt-core/issues/6173))
|
|
||||||
- Convert threading tests to pytest ([#5942](https://github.com/dbt-labs/dbt-core/issues/5942))
|
|
||||||
- Convert postgres index tests to pytest ([#5770](https://github.com/dbt-labs/dbt-core/issues/5770))
|
|
||||||
- Convert use color tests to pytest ([#5771](https://github.com/dbt-labs/dbt-core/issues/5771))
|
|
||||||
- Add github actions workflow to generate high level CLI API docs ([#5942](https://github.com/dbt-labs/dbt-core/issues/5942))
|
|
||||||
- Functionality-neutral refactor of event logging system to improve encapsulation and modularity. ([#6139](https://github.com/dbt-labs/dbt-core/issues/6139))
|
|
||||||
- Consolidate ParsedNode and CompiledNode classes ([#6383](https://github.com/dbt-labs/dbt-core/issues/6383))
|
|
||||||
- Prevent doc gen workflow from running on forks ([#6386](https://github.com/dbt-labs/dbt-core/issues/6386))
|
|
||||||
- Fix intermittent database connection failure in Windows CI test ([#6394](https://github.com/dbt-labs/dbt-core/issues/6394))
|
|
||||||
- Refactor and clean up manifest nodes ([#6426](https://github.com/dbt-labs/dbt-core/issues/6426))
|
|
||||||
- Restore important legacy logging behaviors, following refactor which removed them ([#6437](https://github.com/dbt-labs/dbt-core/issues/6437))
|
|
||||||
|
|
||||||
### Dependencies
|
|
||||||
|
|
||||||
- Update pathspec requirement from ~=0.9.0 to >=0.9,<0.11 in /core ([#5917](https://github.com/dbt-labs/dbt-core/pull/5917))
|
|
||||||
- Bump black from 22.8.0 to 22.10.0 ([#6019](https://github.com/dbt-labs/dbt-core/pull/6019))
|
|
||||||
- Bump mashumaro[msgpack] from 3.0.4 to 3.1.1 in /core ([#6108](https://github.com/dbt-labs/dbt-core/pull/6108))
|
|
||||||
- Update colorama requirement from <0.4.6,>=0.3.9 to >=0.3.9,<0.4.7 in /core ([#6144](https://github.com/dbt-labs/dbt-core/pull/6144))
|
|
||||||
- Bump mashumaro[msgpack] from 3.1.1 to 3.2 in /core ([#4904](https://github.com/dbt-labs/dbt-core/issues/4904))
|
|
||||||
|
|
||||||
### Contributors
|
|
||||||
- [@andy-clapson](https://github.com/andy-clapson) ([dbt-docs/#5791](https://github.com/dbt-labs/dbt-docs/issues/5791))
|
|
||||||
- [@chamini2](https://github.com/chamini2) ([#6041](https://github.com/dbt-labs/dbt-core/issues/6041))
|
|
||||||
- [@daniel-murray](https://github.com/daniel-murray) ([#2968](https://github.com/dbt-labs/dbt-core/issues/2968))
|
|
||||||
- [@dave-connors-3](https://github.com/dave-connors-3) ([#5990](https://github.com/dbt-labs/dbt-core/issues/5990))
|
|
||||||
- [@dbeatty10](https://github.com/dbeatty10) ([dbt-docs/#6368](https://github.com/dbt-labs/dbt-docs/issues/6368), [#6394](https://github.com/dbt-labs/dbt-core/issues/6394))
|
|
||||||
- [@devmessias](https://github.com/devmessias) ([#6309](https://github.com/dbt-labs/dbt-core/issues/6309))
|
|
||||||
- [@eve-johns](https://github.com/eve-johns) ([#6068](https://github.com/dbt-labs/dbt-core/issues/6068))
|
|
||||||
- [@haritamar](https://github.com/haritamar) ([#6246](https://github.com/dbt-labs/dbt-core/issues/6246))
|
|
||||||
- [@jared-rimmer](https://github.com/jared-rimmer) ([#5486](https://github.com/dbt-labs/dbt-core/issues/5486))
|
|
||||||
- [@josephberni](https://github.com/josephberni) ([#2968](https://github.com/dbt-labs/dbt-core/issues/2968))
|
|
||||||
- [@joshuataylor](https://github.com/joshuataylor) ([#6147](https://github.com/dbt-labs/dbt-core/issues/6147))
|
|
||||||
- [@justbldwn](https://github.com/justbldwn) ([#6245](https://github.com/dbt-labs/dbt-core/issues/6245))
|
|
||||||
- [@luke-bassett](https://github.com/luke-bassett) ([#1350](https://github.com/dbt-labs/dbt-core/issues/1350))
|
|
||||||
- [@max-sixty](https://github.com/max-sixty) ([#5946](https://github.com/dbt-labs/dbt-core/issues/5946), [#5983](https://github.com/dbt-labs/dbt-core/issues/5983), [#6028](https://github.com/dbt-labs/dbt-core/issues/6028))
|
|
||||||
- [@paulbenschmidt](https://github.com/paulbenschmidt) ([dbt-docs/#5880](https://github.com/dbt-labs/dbt-docs/issues/5880))
|
|
||||||
- [@pgoslatara](https://github.com/pgoslatara) ([#5929](https://github.com/dbt-labs/dbt-core/issues/5929))
|
|
||||||
- [@racheldaniel](https://github.com/racheldaniel) ([#6201](https://github.com/dbt-labs/dbt-core/issues/6201))
|
|
||||||
- [@timle2](https://github.com/timle2) ([#4205](https://github.com/dbt-labs/dbt-core/issues/4205))
|
|
||||||
- [@dave-connors-3](https://github.com/dave-connors-3) ([#5680](https://github.com/dbt-labs/dbt-core/issues/5680))
|
|
||||||
|
|
||||||
|
|
||||||
## Previous Releases
|
## Previous Releases
|
||||||
|
|
||||||
For information on prior major and minor releases, see their changelogs:
|
For information on prior major and minor releases, see their changelogs:
|
||||||
|
|
||||||
|
|
||||||
|
* [1.4](https://github.com/dbt-labs/dbt-core/blob/1.4.latest/CHANGELOG.md)
|
||||||
* [1.3](https://github.com/dbt-labs/dbt-core/blob/1.3.latest/CHANGELOG.md)
|
* [1.3](https://github.com/dbt-labs/dbt-core/blob/1.3.latest/CHANGELOG.md)
|
||||||
* [1.2](https://github.com/dbt-labs/dbt-core/blob/1.2.latest/CHANGELOG.md)
|
* [1.2](https://github.com/dbt-labs/dbt-core/blob/1.2.latest/CHANGELOG.md)
|
||||||
* [1.1](https://github.com/dbt-labs/dbt-core/blob/1.1.latest/CHANGELOG.md)
|
* [1.1](https://github.com/dbt-labs/dbt-core/blob/1.1.latest/CHANGELOG.md)
|
||||||
|
|||||||
@@ -142,44 +142,44 @@ class BaseConnectionManager(metaclass=abc.ABCMeta):
|
|||||||
)
|
)
|
||||||
|
|
||||||
def set_connection_name(self, name: Optional[str] = None) -> Connection:
|
def set_connection_name(self, name: Optional[str] = None) -> Connection:
|
||||||
conn_name: str
|
"""Called by 'acquire_connection' in BaseAdapter, which is called by
|
||||||
if name is None:
|
'connection_named', called by 'connection_for(node)'.
|
||||||
# if a name isn't specified, we'll re-use a single handle
|
Creates a connection for this thread if one doesn't already
|
||||||
# named 'master'
|
exist, and will rename an existing connection."""
|
||||||
conn_name = "master"
|
|
||||||
else:
|
|
||||||
if not isinstance(name, str):
|
|
||||||
raise dbt.exceptions.CompilerException(
|
|
||||||
f"For connection name, got {name} - not a string!"
|
|
||||||
)
|
|
||||||
assert isinstance(name, str)
|
|
||||||
conn_name = name
|
|
||||||
|
|
||||||
|
conn_name: str = "master" if name is None else name
|
||||||
|
|
||||||
|
# Get a connection for this thread
|
||||||
conn = self.get_if_exists()
|
conn = self.get_if_exists()
|
||||||
|
|
||||||
|
if conn and conn.name == conn_name and conn.state == "open":
|
||||||
|
# Found a connection and nothing to do, so just return it
|
||||||
|
return conn
|
||||||
|
|
||||||
if conn is None:
|
if conn is None:
|
||||||
|
# Create a new connection
|
||||||
conn = Connection(
|
conn = Connection(
|
||||||
type=Identifier(self.TYPE),
|
type=Identifier(self.TYPE),
|
||||||
name=None,
|
name=conn_name,
|
||||||
state=ConnectionState.INIT,
|
state=ConnectionState.INIT,
|
||||||
transaction_open=False,
|
transaction_open=False,
|
||||||
handle=None,
|
handle=None,
|
||||||
credentials=self.profile.credentials,
|
credentials=self.profile.credentials,
|
||||||
)
|
)
|
||||||
self.set_thread_connection(conn)
|
|
||||||
|
|
||||||
if conn.name == conn_name and conn.state == "open":
|
|
||||||
return conn
|
|
||||||
|
|
||||||
fire_event(
|
|
||||||
NewConnection(conn_name=conn_name, conn_type=self.TYPE, node_info=get_node_info())
|
|
||||||
)
|
|
||||||
|
|
||||||
if conn.state == "open":
|
|
||||||
fire_event(ConnectionReused(conn_name=conn_name))
|
|
||||||
else:
|
|
||||||
conn.handle = LazyHandle(self.open)
|
conn.handle = LazyHandle(self.open)
|
||||||
|
# Add the connection to thread_connections for this thread
|
||||||
|
self.set_thread_connection(conn)
|
||||||
|
fire_event(
|
||||||
|
NewConnection(conn_name=conn_name, conn_type=self.TYPE, node_info=get_node_info())
|
||||||
|
)
|
||||||
|
else: # existing connection either wasn't open or didn't have the right name
|
||||||
|
if conn.state != "open":
|
||||||
|
conn.handle = LazyHandle(self.open)
|
||||||
|
if conn.name != conn_name:
|
||||||
|
orig_conn_name: str = conn.name or ""
|
||||||
|
conn.name = conn_name
|
||||||
|
fire_event(ConnectionReused(orig_conn_name=orig_conn_name, conn_name=conn_name))
|
||||||
|
|
||||||
conn.name = conn_name
|
|
||||||
return conn
|
return conn
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
|||||||
@@ -48,6 +48,7 @@ def print_compile_stats(stats):
|
|||||||
NodeType.Source: "source",
|
NodeType.Source: "source",
|
||||||
NodeType.Exposure: "exposure",
|
NodeType.Exposure: "exposure",
|
||||||
NodeType.Metric: "metric",
|
NodeType.Metric: "metric",
|
||||||
|
NodeType.Entity: "entity",
|
||||||
}
|
}
|
||||||
|
|
||||||
results = {k: 0 for k in names.keys()}
|
results = {k: 0 for k in names.keys()}
|
||||||
@@ -83,6 +84,8 @@ def _generate_stats(manifest: Manifest):
|
|||||||
stats[exposure.resource_type] += 1
|
stats[exposure.resource_type] += 1
|
||||||
for metric in manifest.metrics.values():
|
for metric in manifest.metrics.values():
|
||||||
stats[metric.resource_type] += 1
|
stats[metric.resource_type] += 1
|
||||||
|
for entity in manifest.entities.values():
|
||||||
|
stats[entity.resource_type] += 1
|
||||||
for macro in manifest.macros.values():
|
for macro in manifest.macros.values():
|
||||||
stats[macro.resource_type] += 1
|
stats[macro.resource_type] += 1
|
||||||
return stats
|
return stats
|
||||||
@@ -398,6 +401,8 @@ class Compiler:
|
|||||||
linker.dependency(node.unique_id, (manifest.sources[dependency].unique_id))
|
linker.dependency(node.unique_id, (manifest.sources[dependency].unique_id))
|
||||||
elif dependency in manifest.metrics:
|
elif dependency in manifest.metrics:
|
||||||
linker.dependency(node.unique_id, (manifest.metrics[dependency].unique_id))
|
linker.dependency(node.unique_id, (manifest.metrics[dependency].unique_id))
|
||||||
|
elif dependency in manifest.entities:
|
||||||
|
linker.dependency(node.unique_id, (manifest.entities[dependency].unique_id))
|
||||||
else:
|
else:
|
||||||
raise GraphDependencyNotFoundError(node, dependency)
|
raise GraphDependencyNotFoundError(node, dependency)
|
||||||
|
|
||||||
@@ -410,6 +415,8 @@ class Compiler:
|
|||||||
self.link_node(linker, exposure, manifest)
|
self.link_node(linker, exposure, manifest)
|
||||||
for metric in manifest.metrics.values():
|
for metric in manifest.metrics.values():
|
||||||
self.link_node(linker, metric, manifest)
|
self.link_node(linker, metric, manifest)
|
||||||
|
for entity in manifest.entities.values():
|
||||||
|
self.link_node(linker, entity, manifest)
|
||||||
|
|
||||||
cycle = linker.find_cycles()
|
cycle = linker.find_cycles()
|
||||||
|
|
||||||
|
|||||||
@@ -381,6 +381,7 @@ class PartialProject(RenderComponents):
|
|||||||
sources: Dict[str, Any]
|
sources: Dict[str, Any]
|
||||||
tests: Dict[str, Any]
|
tests: Dict[str, Any]
|
||||||
metrics: Dict[str, Any]
|
metrics: Dict[str, Any]
|
||||||
|
entities: Dict[str, Any]
|
||||||
exposures: Dict[str, Any]
|
exposures: Dict[str, Any]
|
||||||
vars_value: VarProvider
|
vars_value: VarProvider
|
||||||
|
|
||||||
@@ -391,6 +392,7 @@ class PartialProject(RenderComponents):
|
|||||||
sources = cfg.sources
|
sources = cfg.sources
|
||||||
tests = cfg.tests
|
tests = cfg.tests
|
||||||
metrics = cfg.metrics
|
metrics = cfg.metrics
|
||||||
|
entities = cfg.entities
|
||||||
exposures = cfg.exposures
|
exposures = cfg.exposures
|
||||||
if cfg.vars is None:
|
if cfg.vars is None:
|
||||||
vars_dict: Dict[str, Any] = {}
|
vars_dict: Dict[str, Any] = {}
|
||||||
@@ -446,6 +448,7 @@ class PartialProject(RenderComponents):
|
|||||||
sources=sources,
|
sources=sources,
|
||||||
tests=tests,
|
tests=tests,
|
||||||
metrics=metrics,
|
metrics=metrics,
|
||||||
|
entities=entities,
|
||||||
exposures=exposures,
|
exposures=exposures,
|
||||||
vars=vars_value,
|
vars=vars_value,
|
||||||
config_version=cfg.config_version,
|
config_version=cfg.config_version,
|
||||||
@@ -550,6 +553,7 @@ class Project:
|
|||||||
sources: Dict[str, Any]
|
sources: Dict[str, Any]
|
||||||
tests: Dict[str, Any]
|
tests: Dict[str, Any]
|
||||||
metrics: Dict[str, Any]
|
metrics: Dict[str, Any]
|
||||||
|
entities: Dict[str, Any]
|
||||||
exposures: Dict[str, Any]
|
exposures: Dict[str, Any]
|
||||||
vars: VarProvider
|
vars: VarProvider
|
||||||
dbt_version: List[VersionSpecifier]
|
dbt_version: List[VersionSpecifier]
|
||||||
@@ -624,6 +628,7 @@ class Project:
|
|||||||
"sources": self.sources,
|
"sources": self.sources,
|
||||||
"tests": self.tests,
|
"tests": self.tests,
|
||||||
"metrics": self.metrics,
|
"metrics": self.metrics,
|
||||||
|
"entities": self.entities,
|
||||||
"exposures": self.exposures,
|
"exposures": self.exposures,
|
||||||
"vars": self.vars.to_dict(),
|
"vars": self.vars.to_dict(),
|
||||||
"require-dbt-version": [v.to_version_string() for v in self.dbt_version],
|
"require-dbt-version": [v.to_version_string() for v in self.dbt_version],
|
||||||
|
|||||||
@@ -117,6 +117,7 @@ class RuntimeConfig(Project, Profile, AdapterRequiredConfig):
|
|||||||
sources=project.sources,
|
sources=project.sources,
|
||||||
tests=project.tests,
|
tests=project.tests,
|
||||||
metrics=project.metrics,
|
metrics=project.metrics,
|
||||||
|
entities=project.entities,
|
||||||
exposures=project.exposures,
|
exposures=project.exposures,
|
||||||
vars=project.vars,
|
vars=project.vars,
|
||||||
config_version=project.config_version,
|
config_version=project.config_version,
|
||||||
@@ -312,6 +313,7 @@ class RuntimeConfig(Project, Profile, AdapterRequiredConfig):
|
|||||||
"sources": self._get_config_paths(self.sources),
|
"sources": self._get_config_paths(self.sources),
|
||||||
"tests": self._get_config_paths(self.tests),
|
"tests": self._get_config_paths(self.tests),
|
||||||
"metrics": self._get_config_paths(self.metrics),
|
"metrics": self._get_config_paths(self.metrics),
|
||||||
|
"entities": self._get_config_paths(self.entities),
|
||||||
"exposures": self._get_config_paths(self.exposures),
|
"exposures": self._get_config_paths(self.exposures),
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -500,6 +502,7 @@ class UnsetProfileConfig(RuntimeConfig):
|
|||||||
"sources": self.sources,
|
"sources": self.sources,
|
||||||
"tests": self.tests,
|
"tests": self.tests,
|
||||||
"metrics": self.metrics,
|
"metrics": self.metrics,
|
||||||
|
"entities": self.entities,
|
||||||
"exposures": self.exposures,
|
"exposures": self.exposures,
|
||||||
"vars": self.vars.to_dict(),
|
"vars": self.vars.to_dict(),
|
||||||
"require-dbt-version": [v.to_version_string() for v in self.dbt_version],
|
"require-dbt-version": [v.to_version_string() for v in self.dbt_version],
|
||||||
@@ -562,6 +565,7 @@ class UnsetProfileConfig(RuntimeConfig):
|
|||||||
sources=project.sources,
|
sources=project.sources,
|
||||||
tests=project.tests,
|
tests=project.tests,
|
||||||
metrics=project.metrics,
|
metrics=project.metrics,
|
||||||
|
entities=project.entities,
|
||||||
exposures=project.exposures,
|
exposures=project.exposures,
|
||||||
vars=project.vars,
|
vars=project.vars,
|
||||||
config_version=project.config_version,
|
config_version=project.config_version,
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ from dbt.config import Profile, Project, read_user_config
|
|||||||
from dbt.config.renderer import DbtProjectYamlRenderer, ProfileRenderer
|
from dbt.config.renderer import DbtProjectYamlRenderer, ProfileRenderer
|
||||||
from dbt.events.functions import fire_event
|
from dbt.events.functions import fire_event
|
||||||
from dbt.events.types import InvalidOptionYAML
|
from dbt.events.types import InvalidOptionYAML
|
||||||
from dbt.exceptions import DbtValidationError, OptionNotYamlDict
|
from dbt.exceptions import DbtValidationError, OptionNotYamlDictError
|
||||||
|
|
||||||
|
|
||||||
def parse_cli_vars(var_string: str) -> Dict[str, Any]:
|
def parse_cli_vars(var_string: str) -> Dict[str, Any]:
|
||||||
@@ -23,7 +23,7 @@ def parse_cli_yaml_string(var_string: str, cli_option_name: str) -> Dict[str, An
|
|||||||
if var_type is dict:
|
if var_type is dict:
|
||||||
return cli_vars
|
return cli_vars
|
||||||
else:
|
else:
|
||||||
raise OptionNotYamlDict(var_type, cli_option_name)
|
raise OptionNotYamlDictError(var_type, cli_option_name)
|
||||||
except DbtValidationError:
|
except DbtValidationError:
|
||||||
fire_event(InvalidOptionYAML(option_name=cli_option_name))
|
fire_event(InvalidOptionYAML(option_name=cli_option_name))
|
||||||
raise
|
raise
|
||||||
|
|||||||
@@ -45,6 +45,8 @@ class UnrenderedConfig(ConfigSource):
|
|||||||
model_configs = unrendered.get("tests")
|
model_configs = unrendered.get("tests")
|
||||||
elif resource_type == NodeType.Metric:
|
elif resource_type == NodeType.Metric:
|
||||||
model_configs = unrendered.get("metrics")
|
model_configs = unrendered.get("metrics")
|
||||||
|
elif resource_type == NodeType.Entity:
|
||||||
|
model_configs = unrendered.get("entities")
|
||||||
elif resource_type == NodeType.Exposure:
|
elif resource_type == NodeType.Exposure:
|
||||||
model_configs = unrendered.get("exposures")
|
model_configs = unrendered.get("exposures")
|
||||||
else:
|
else:
|
||||||
@@ -70,6 +72,8 @@ class RenderedConfig(ConfigSource):
|
|||||||
model_configs = self.project.tests
|
model_configs = self.project.tests
|
||||||
elif resource_type == NodeType.Metric:
|
elif resource_type == NodeType.Metric:
|
||||||
model_configs = self.project.metrics
|
model_configs = self.project.metrics
|
||||||
|
elif resource_type == NodeType.Entity:
|
||||||
|
model_configs = self.project.entities
|
||||||
elif resource_type == NodeType.Exposure:
|
elif resource_type == NodeType.Exposure:
|
||||||
model_configs = self.project.exposures
|
model_configs = self.project.exposures
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ from dbt.contracts.graph.nodes import (
|
|||||||
Macro,
|
Macro,
|
||||||
Exposure,
|
Exposure,
|
||||||
Metric,
|
Metric,
|
||||||
|
Entity,
|
||||||
SeedNode,
|
SeedNode,
|
||||||
SourceDefinition,
|
SourceDefinition,
|
||||||
Resource,
|
Resource,
|
||||||
@@ -1504,6 +1505,44 @@ def generate_parse_metrics(
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class EntityRefResolver(BaseResolver):
|
||||||
|
def __call__(self, *args) -> str:
|
||||||
|
package = None
|
||||||
|
if len(args) == 1:
|
||||||
|
name = args[0]
|
||||||
|
elif len(args) == 2:
|
||||||
|
package, name = args
|
||||||
|
else:
|
||||||
|
raise RefArgsError(node=self.model, args=args)
|
||||||
|
self.validate_args(name, package)
|
||||||
|
self.model.refs.append(list(args))
|
||||||
|
return ""
|
||||||
|
|
||||||
|
def validate_args(self, name, package):
|
||||||
|
if not isinstance(name, str):
|
||||||
|
raise ParsingError(
|
||||||
|
f"In the entity associated with {self.model.original_file_path} "
|
||||||
|
"the name argument to ref() must be a string"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def generate_parse_entities(
|
||||||
|
entity: Entity,
|
||||||
|
config: RuntimeConfig,
|
||||||
|
manifest: Manifest,
|
||||||
|
package_name: str,
|
||||||
|
) -> Dict[str, Any]:
|
||||||
|
project = config.load_dependencies()[package_name]
|
||||||
|
return {
|
||||||
|
"ref": EntityRefResolver(
|
||||||
|
None,
|
||||||
|
entity,
|
||||||
|
project,
|
||||||
|
manifest,
|
||||||
|
),
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
# This class is currently used by the schema parser in order
|
# This class is currently used by the schema parser in order
|
||||||
# to limit the number of macros in the context by using
|
# to limit the number of macros in the context by using
|
||||||
# the TestMacroNamespace
|
# the TestMacroNamespace
|
||||||
|
|||||||
@@ -227,6 +227,7 @@ class SchemaSourceFile(BaseSourceFile):
|
|||||||
sources: List[str] = field(default_factory=list)
|
sources: List[str] = field(default_factory=list)
|
||||||
exposures: List[str] = field(default_factory=list)
|
exposures: List[str] = field(default_factory=list)
|
||||||
metrics: List[str] = field(default_factory=list)
|
metrics: List[str] = field(default_factory=list)
|
||||||
|
entities: List[str] = field(default_factory=list)
|
||||||
# node patches contain models, seeds, snapshots, analyses
|
# node patches contain models, seeds, snapshots, analyses
|
||||||
ndp: List[str] = field(default_factory=list)
|
ndp: List[str] = field(default_factory=list)
|
||||||
# any macro patches in this file by macro unique_id.
|
# any macro patches in this file by macro unique_id.
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ from dbt.contracts.graph.nodes import (
|
|||||||
GenericTestNode,
|
GenericTestNode,
|
||||||
Exposure,
|
Exposure,
|
||||||
Metric,
|
Metric,
|
||||||
|
Entity,
|
||||||
UnpatchedSourceDefinition,
|
UnpatchedSourceDefinition,
|
||||||
ManifestNode,
|
ManifestNode,
|
||||||
GraphMemberNode,
|
GraphMemberNode,
|
||||||
@@ -212,6 +213,39 @@ class MetricLookup(dbtClassMixin):
|
|||||||
return manifest.metrics[unique_id]
|
return manifest.metrics[unique_id]
|
||||||
|
|
||||||
|
|
||||||
|
class EntityLookup(dbtClassMixin):
|
||||||
|
def __init__(self, manifest: "Manifest"):
|
||||||
|
self.storage: Dict[str, Dict[PackageName, UniqueID]] = {}
|
||||||
|
self.populate(manifest)
|
||||||
|
|
||||||
|
def get_unique_id(self, search_name, package: Optional[PackageName]):
|
||||||
|
return find_unique_id_for_package(self.storage, search_name, package)
|
||||||
|
|
||||||
|
def find(self, search_name, package: Optional[PackageName], manifest: "Manifest"):
|
||||||
|
unique_id = self.get_unique_id(search_name, package)
|
||||||
|
if unique_id is not None:
|
||||||
|
return self.perform_lookup(unique_id, manifest)
|
||||||
|
return None
|
||||||
|
|
||||||
|
def add_entity(self, entity: Entity):
|
||||||
|
if entity.search_name not in self.storage:
|
||||||
|
self.storage[entity.search_name] = {}
|
||||||
|
|
||||||
|
self.storage[entity.search_name][entity.package_name] = entity.unique_id
|
||||||
|
|
||||||
|
def populate(self, manifest):
|
||||||
|
for entity in manifest.entities.values():
|
||||||
|
if hasattr(entity, "name"):
|
||||||
|
self.add_entity(entity)
|
||||||
|
|
||||||
|
def perform_lookup(self, unique_id: UniqueID, manifest: "Manifest") -> Entity:
|
||||||
|
if unique_id not in manifest.entities:
|
||||||
|
raise dbt.exceptions.DbtInternalError(
|
||||||
|
f"Entity {unique_id} found in cache but not found in manifest"
|
||||||
|
)
|
||||||
|
return manifest.entities[unique_id]
|
||||||
|
|
||||||
|
|
||||||
# This handles both models/seeds/snapshots and sources/metrics/exposures
|
# This handles both models/seeds/snapshots and sources/metrics/exposures
|
||||||
class DisabledLookup(dbtClassMixin):
|
class DisabledLookup(dbtClassMixin):
|
||||||
def __init__(self, manifest: "Manifest"):
|
def __init__(self, manifest: "Manifest"):
|
||||||
@@ -456,6 +490,9 @@ class Disabled(Generic[D]):
|
|||||||
MaybeMetricNode = Optional[Union[Metric, Disabled[Metric]]]
|
MaybeMetricNode = Optional[Union[Metric, Disabled[Metric]]]
|
||||||
|
|
||||||
|
|
||||||
|
MaybeEntityNode = Optional[Union[Entity, Disabled[Entity]]]
|
||||||
|
|
||||||
|
|
||||||
MaybeDocumentation = Optional[Documentation]
|
MaybeDocumentation = Optional[Documentation]
|
||||||
|
|
||||||
|
|
||||||
@@ -599,6 +636,7 @@ class Manifest(MacroMethods, DataClassMessagePackMixin, dbtClassMixin):
|
|||||||
docs: MutableMapping[str, Documentation] = field(default_factory=dict)
|
docs: MutableMapping[str, Documentation] = field(default_factory=dict)
|
||||||
exposures: MutableMapping[str, Exposure] = field(default_factory=dict)
|
exposures: MutableMapping[str, Exposure] = field(default_factory=dict)
|
||||||
metrics: MutableMapping[str, Metric] = field(default_factory=dict)
|
metrics: MutableMapping[str, Metric] = field(default_factory=dict)
|
||||||
|
entities: MutableMapping[str, Entity] = field(default_factory=dict)
|
||||||
selectors: MutableMapping[str, Any] = field(default_factory=dict)
|
selectors: MutableMapping[str, Any] = field(default_factory=dict)
|
||||||
files: MutableMapping[str, AnySourceFile] = field(default_factory=dict)
|
files: MutableMapping[str, AnySourceFile] = field(default_factory=dict)
|
||||||
metadata: ManifestMetadata = field(default_factory=ManifestMetadata)
|
metadata: ManifestMetadata = field(default_factory=ManifestMetadata)
|
||||||
@@ -620,6 +658,9 @@ class Manifest(MacroMethods, DataClassMessagePackMixin, dbtClassMixin):
|
|||||||
_metric_lookup: Optional[MetricLookup] = field(
|
_metric_lookup: Optional[MetricLookup] = field(
|
||||||
default=None, metadata={"serialize": lambda x: None, "deserialize": lambda x: None}
|
default=None, metadata={"serialize": lambda x: None, "deserialize": lambda x: None}
|
||||||
)
|
)
|
||||||
|
_entity_lookup: Optional[EntityLookup] = field(
|
||||||
|
default=None, metadata={"serialize": lambda x: None, "deserialize": lambda x: None}
|
||||||
|
)
|
||||||
_disabled_lookup: Optional[DisabledLookup] = field(
|
_disabled_lookup: Optional[DisabledLookup] = field(
|
||||||
default=None, metadata={"serialize": lambda x: None, "deserialize": lambda x: None}
|
default=None, metadata={"serialize": lambda x: None, "deserialize": lambda x: None}
|
||||||
)
|
)
|
||||||
@@ -670,6 +711,9 @@ class Manifest(MacroMethods, DataClassMessagePackMixin, dbtClassMixin):
|
|||||||
def update_metric(self, new_metric: Metric):
|
def update_metric(self, new_metric: Metric):
|
||||||
_update_into(self.metrics, new_metric)
|
_update_into(self.metrics, new_metric)
|
||||||
|
|
||||||
|
def update_entity(self, new_entity: Entity):
|
||||||
|
_update_into(self.entities, new_entity)
|
||||||
|
|
||||||
def update_node(self, new_node: ManifestNode):
|
def update_node(self, new_node: ManifestNode):
|
||||||
_update_into(self.nodes, new_node)
|
_update_into(self.nodes, new_node)
|
||||||
|
|
||||||
@@ -685,6 +729,7 @@ class Manifest(MacroMethods, DataClassMessagePackMixin, dbtClassMixin):
|
|||||||
self.flat_graph = {
|
self.flat_graph = {
|
||||||
"exposures": {k: v.to_dict(omit_none=False) for k, v in self.exposures.items()},
|
"exposures": {k: v.to_dict(omit_none=False) for k, v in self.exposures.items()},
|
||||||
"metrics": {k: v.to_dict(omit_none=False) for k, v in self.metrics.items()},
|
"metrics": {k: v.to_dict(omit_none=False) for k, v in self.metrics.items()},
|
||||||
|
"entities": {k: v.to_dict(omit_none=False) for k, v in self.entities.items()},
|
||||||
"nodes": {k: v.to_dict(omit_none=False) for k, v in self.nodes.items()},
|
"nodes": {k: v.to_dict(omit_none=False) for k, v in self.nodes.items()},
|
||||||
"sources": {k: v.to_dict(omit_none=False) for k, v in self.sources.items()},
|
"sources": {k: v.to_dict(omit_none=False) for k, v in self.sources.items()},
|
||||||
}
|
}
|
||||||
@@ -747,6 +792,7 @@ class Manifest(MacroMethods, DataClassMessagePackMixin, dbtClassMixin):
|
|||||||
self.nodes.values(),
|
self.nodes.values(),
|
||||||
self.sources.values(),
|
self.sources.values(),
|
||||||
self.metrics.values(),
|
self.metrics.values(),
|
||||||
|
self.entities.values(),
|
||||||
)
|
)
|
||||||
for resource in all_resources:
|
for resource in all_resources:
|
||||||
resource_type_plural = resource.resource_type.pluralize()
|
resource_type_plural = resource.resource_type.pluralize()
|
||||||
@@ -775,6 +821,7 @@ class Manifest(MacroMethods, DataClassMessagePackMixin, dbtClassMixin):
|
|||||||
docs={k: _deepcopy(v) for k, v in self.docs.items()},
|
docs={k: _deepcopy(v) for k, v in self.docs.items()},
|
||||||
exposures={k: _deepcopy(v) for k, v in self.exposures.items()},
|
exposures={k: _deepcopy(v) for k, v in self.exposures.items()},
|
||||||
metrics={k: _deepcopy(v) for k, v in self.metrics.items()},
|
metrics={k: _deepcopy(v) for k, v in self.metrics.items()},
|
||||||
|
entities={k: _deepcopy(v) for k, v in self.entities.items()},
|
||||||
selectors={k: _deepcopy(v) for k, v in self.selectors.items()},
|
selectors={k: _deepcopy(v) for k, v in self.selectors.items()},
|
||||||
metadata=self.metadata,
|
metadata=self.metadata,
|
||||||
disabled={k: _deepcopy(v) for k, v in self.disabled.items()},
|
disabled={k: _deepcopy(v) for k, v in self.disabled.items()},
|
||||||
@@ -791,6 +838,7 @@ class Manifest(MacroMethods, DataClassMessagePackMixin, dbtClassMixin):
|
|||||||
self.sources.values(),
|
self.sources.values(),
|
||||||
self.exposures.values(),
|
self.exposures.values(),
|
||||||
self.metrics.values(),
|
self.metrics.values(),
|
||||||
|
self.entities.values(),
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
forward_edges, backward_edges = build_node_edges(edge_members)
|
forward_edges, backward_edges = build_node_edges(edge_members)
|
||||||
@@ -816,6 +864,7 @@ class Manifest(MacroMethods, DataClassMessagePackMixin, dbtClassMixin):
|
|||||||
docs=self.docs,
|
docs=self.docs,
|
||||||
exposures=self.exposures,
|
exposures=self.exposures,
|
||||||
metrics=self.metrics,
|
metrics=self.metrics,
|
||||||
|
entities=self.entities,
|
||||||
selectors=self.selectors,
|
selectors=self.selectors,
|
||||||
metadata=self.metadata,
|
metadata=self.metadata,
|
||||||
disabled=self.disabled,
|
disabled=self.disabled,
|
||||||
@@ -837,6 +886,8 @@ class Manifest(MacroMethods, DataClassMessagePackMixin, dbtClassMixin):
|
|||||||
return self.exposures[unique_id]
|
return self.exposures[unique_id]
|
||||||
elif unique_id in self.metrics:
|
elif unique_id in self.metrics:
|
||||||
return self.metrics[unique_id]
|
return self.metrics[unique_id]
|
||||||
|
elif unique_id in self.entities:
|
||||||
|
return self.entities[unique_id]
|
||||||
else:
|
else:
|
||||||
# something terrible has happened
|
# something terrible has happened
|
||||||
raise dbt.exceptions.DbtInternalError(
|
raise dbt.exceptions.DbtInternalError(
|
||||||
@@ -873,6 +924,12 @@ class Manifest(MacroMethods, DataClassMessagePackMixin, dbtClassMixin):
|
|||||||
self._metric_lookup = MetricLookup(self)
|
self._metric_lookup = MetricLookup(self)
|
||||||
return self._metric_lookup
|
return self._metric_lookup
|
||||||
|
|
||||||
|
@property
|
||||||
|
def entity_lookup(self) -> EntityLookup:
|
||||||
|
if self._entity_lookup is None:
|
||||||
|
self._entity_lookup = EntityLookup(self)
|
||||||
|
return self._entity_lookup
|
||||||
|
|
||||||
def rebuild_ref_lookup(self):
|
def rebuild_ref_lookup(self):
|
||||||
self._ref_lookup = RefableLookup(self)
|
self._ref_lookup = RefableLookup(self)
|
||||||
|
|
||||||
@@ -973,6 +1030,31 @@ class Manifest(MacroMethods, DataClassMessagePackMixin, dbtClassMixin):
|
|||||||
return Disabled(disabled[0])
|
return Disabled(disabled[0])
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
def resolve_entity(
|
||||||
|
self,
|
||||||
|
target_entity_name: str,
|
||||||
|
target_entity_package: Optional[str],
|
||||||
|
current_project: str,
|
||||||
|
node_package: str,
|
||||||
|
) -> MaybeEntityNode:
|
||||||
|
|
||||||
|
entity: Optional[Entity] = None
|
||||||
|
disabled: Optional[List[Entity]] = None
|
||||||
|
|
||||||
|
candidates = _search_packages(current_project, node_package, target_entity_package)
|
||||||
|
for pkg in candidates:
|
||||||
|
entity = self.entity_lookup.find(target_entity_name, pkg, self)
|
||||||
|
|
||||||
|
if entity is not None and entity.config.enabled:
|
||||||
|
return entity
|
||||||
|
|
||||||
|
# it's possible that the node is disabled
|
||||||
|
if disabled is None:
|
||||||
|
disabled = self.disabled_lookup.find(f"{target_entity_name}", pkg)
|
||||||
|
if disabled:
|
||||||
|
return Disabled(disabled[0])
|
||||||
|
return None
|
||||||
|
|
||||||
# Called by DocsRuntimeContext.doc
|
# Called by DocsRuntimeContext.doc
|
||||||
def resolve_doc(
|
def resolve_doc(
|
||||||
self,
|
self,
|
||||||
@@ -1083,6 +1165,11 @@ class Manifest(MacroMethods, DataClassMessagePackMixin, dbtClassMixin):
|
|||||||
self.metrics[metric.unique_id] = metric
|
self.metrics[metric.unique_id] = metric
|
||||||
source_file.metrics.append(metric.unique_id)
|
source_file.metrics.append(metric.unique_id)
|
||||||
|
|
||||||
|
def add_entity(self, source_file: SchemaSourceFile, entity: Entity):
|
||||||
|
_check_duplicates(entity, self.entities)
|
||||||
|
self.entities[entity.unique_id] = entity
|
||||||
|
source_file.entities.append(entity.unique_id)
|
||||||
|
|
||||||
def add_disabled_nofile(self, node: GraphMemberNode):
|
def add_disabled_nofile(self, node: GraphMemberNode):
|
||||||
# There can be multiple disabled nodes for the same unique_id
|
# There can be multiple disabled nodes for the same unique_id
|
||||||
if node.unique_id in self.disabled:
|
if node.unique_id in self.disabled:
|
||||||
@@ -1098,6 +1185,8 @@ class Manifest(MacroMethods, DataClassMessagePackMixin, dbtClassMixin):
|
|||||||
source_file.add_test(node.unique_id, test_from)
|
source_file.add_test(node.unique_id, test_from)
|
||||||
if isinstance(node, Metric):
|
if isinstance(node, Metric):
|
||||||
source_file.metrics.append(node.unique_id)
|
source_file.metrics.append(node.unique_id)
|
||||||
|
if isinstance(node, Entity):
|
||||||
|
source_file.entities.append(node.unique_id)
|
||||||
if isinstance(node, Exposure):
|
if isinstance(node, Exposure):
|
||||||
source_file.exposures.append(node.unique_id)
|
source_file.exposures.append(node.unique_id)
|
||||||
else:
|
else:
|
||||||
@@ -1125,6 +1214,7 @@ class Manifest(MacroMethods, DataClassMessagePackMixin, dbtClassMixin):
|
|||||||
self.docs,
|
self.docs,
|
||||||
self.exposures,
|
self.exposures,
|
||||||
self.metrics,
|
self.metrics,
|
||||||
|
self.entities,
|
||||||
self.selectors,
|
self.selectors,
|
||||||
self.files,
|
self.files,
|
||||||
self.metadata,
|
self.metadata,
|
||||||
@@ -1137,6 +1227,7 @@ class Manifest(MacroMethods, DataClassMessagePackMixin, dbtClassMixin):
|
|||||||
self._source_lookup,
|
self._source_lookup,
|
||||||
self._ref_lookup,
|
self._ref_lookup,
|
||||||
self._metric_lookup,
|
self._metric_lookup,
|
||||||
|
self._entity_lookup,
|
||||||
self._disabled_lookup,
|
self._disabled_lookup,
|
||||||
self._analysis_lookup,
|
self._analysis_lookup,
|
||||||
)
|
)
|
||||||
@@ -1178,6 +1269,9 @@ class WritableManifest(ArtifactMixin):
|
|||||||
metrics: Mapping[UniqueID, Metric] = field(
|
metrics: Mapping[UniqueID, Metric] = field(
|
||||||
metadata=dict(description=("The metrics defined in the dbt project and its dependencies"))
|
metadata=dict(description=("The metrics defined in the dbt project and its dependencies"))
|
||||||
)
|
)
|
||||||
|
entities: Mapping[UniqueID, Entity] = field(
|
||||||
|
metadata=dict(description=("The entities defined in the dbt project and its dependencies"))
|
||||||
|
)
|
||||||
selectors: Mapping[UniqueID, Any] = field(
|
selectors: Mapping[UniqueID, Any] = field(
|
||||||
metadata=dict(description=("The selectors defined in selectors.yml"))
|
metadata=dict(description=("The selectors defined in selectors.yml"))
|
||||||
)
|
)
|
||||||
@@ -1202,7 +1296,8 @@ class WritableManifest(ArtifactMixin):
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def compatible_previous_versions(self):
|
def compatible_previous_versions(self):
|
||||||
return [("manifest", 4), ("manifest", 5), ("manifest", 6), ("manifest", 7)]
|
# return [("manifest", 4), ("manifest", 5), ("manifest", 6), ("manifest", 7)]
|
||||||
|
return []
|
||||||
|
|
||||||
def __post_serialize__(self, dct):
|
def __post_serialize__(self, dct):
|
||||||
for unique_id, node in dct["nodes"].items():
|
for unique_id, node in dct["nodes"].items():
|
||||||
|
|||||||
@@ -368,6 +368,11 @@ class MetricConfig(BaseConfig):
|
|||||||
enabled: bool = True
|
enabled: bool = True
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class EntityConfig(BaseConfig):
|
||||||
|
enabled: bool = True
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class ExposureConfig(BaseConfig):
|
class ExposureConfig(BaseConfig):
|
||||||
enabled: bool = True
|
enabled: bool = True
|
||||||
@@ -604,6 +609,7 @@ class SnapshotConfig(EmptySnapshotConfig):
|
|||||||
|
|
||||||
RESOURCE_TYPES: Dict[NodeType, Type[BaseConfig]] = {
|
RESOURCE_TYPES: Dict[NodeType, Type[BaseConfig]] = {
|
||||||
NodeType.Metric: MetricConfig,
|
NodeType.Metric: MetricConfig,
|
||||||
|
NodeType.Entity: EntityConfig,
|
||||||
NodeType.Exposure: ExposureConfig,
|
NodeType.Exposure: ExposureConfig,
|
||||||
NodeType.Source: SourceConfig,
|
NodeType.Source: SourceConfig,
|
||||||
NodeType.Seed: SeedConfig,
|
NodeType.Seed: SeedConfig,
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user