dbt-common 1.5.0__py3-none-any.whl → 1.7.0__py3-none-any.whl

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_common/__about__.py CHANGED
@@ -1 +1 @@
1
- version = "1.5.0"
1
+ version = "1.7.0"
@@ -38,6 +38,15 @@ else:
38
38
  c_bool = None
39
39
 
40
40
 
41
+ def _record_path(path: str) -> bool:
42
+ return (
43
+ # TODO: The first check here obviates the next two checks but is probably too coarse?
44
+ "dbt/include" not in path
45
+ and "dbt/include/global_project" not in path
46
+ and "/plugins/postgres/dbt/include/" not in path
47
+ )
48
+
49
+
41
50
  @dataclasses.dataclass
42
51
  class FindMatchingParams:
43
52
  root_path: str
@@ -61,12 +70,7 @@ class FindMatchingParams:
61
70
  def _include(self) -> bool:
62
71
  # Do not record or replay filesystem searches that were performed against
63
72
  # files which are actually part of dbt's implementation.
64
- return (
65
- "dbt/include"
66
- not in self.root_path # TODO: This actually obviates the next two checks but is probably too coarse?
67
- and "dbt/include/global_project" not in self.root_path
68
- and "/plugins/postgres/dbt/include/" not in self.root_path
69
- )
73
+ return _record_path(self.root_path)
70
74
 
71
75
 
72
76
  @dataclasses.dataclass
@@ -150,10 +154,7 @@ class LoadFileParams:
150
154
  def _include(self) -> bool:
151
155
  # Do not record or replay file reads that were performed against files
152
156
  # which are actually part of dbt's implementation.
153
- return (
154
- "dbt/include/global_project" not in self.path
155
- and "/plugins/postgres/dbt/include/" not in self.path
156
- )
157
+ return _record_path(self.path)
157
158
 
158
159
 
159
160
  @dataclasses.dataclass
@@ -248,10 +249,7 @@ class WriteFileParams:
248
249
  def _include(self) -> bool:
249
250
  # Do not record or replay file reads that were performed against files
250
251
  # which are actually part of dbt's implementation.
251
- return (
252
- "dbt/include/global_project" not in self.path
253
- and "/plugins/postgres/dbt/include/" not in self.path
254
- )
252
+ return _record_path(self.path)
255
253
 
256
254
 
257
255
  @Recorder.register_record_type
dbt_common/context.py CHANGED
@@ -1,15 +1,47 @@
1
+ import os
1
2
  from contextvars import ContextVar, copy_context
2
- from typing import List, Mapping, Optional
3
+ from typing import List, Mapping, Optional, Iterator
3
4
 
4
5
  from dbt_common.constants import PRIVATE_ENV_PREFIX, SECRET_ENV_PREFIX
6
+ from dbt_common.record import Recorder
7
+
8
+
9
+ class CaseInsensitiveMapping(Mapping):
10
+ def __init__(self, env: Mapping[str, str]):
11
+ self._env = {k.casefold(): (k, v) for k, v in env.items()}
12
+
13
+ def __getitem__(self, key: str) -> str:
14
+ return self._env[key.casefold()][1]
15
+
16
+ def __len__(self) -> int:
17
+ return len(self._env)
18
+
19
+ def __iter__(self) -> Iterator[str]:
20
+ for item in self._env.items():
21
+ yield item[0]
5
22
 
6
23
 
7
24
  class InvocationContext:
8
25
  def __init__(self, env: Mapping[str, str]):
9
- self._env = {k: v for k, v in env.items() if not k.startswith(PRIVATE_ENV_PREFIX)}
26
+ self._env: Mapping[str, str]
27
+
28
+ env_public = {}
29
+ env_private = {}
30
+
31
+ for k, v in env.items():
32
+ if k.startswith(PRIVATE_ENV_PREFIX):
33
+ env_private[k] = v
34
+ else:
35
+ env_public[k] = v
36
+
37
+ if os.name == "nt":
38
+ self._env = CaseInsensitiveMapping(env_public)
39
+ else:
40
+ self._env = env_public
41
+
10
42
  self._env_secrets: Optional[List[str]] = None
11
- self._env_private = {k: v for k, v in env.items() if k.startswith(PRIVATE_ENV_PREFIX)}
12
- self.recorder = None
43
+ self._env_private = env_private
44
+ self.recorder: Optional[Recorder] = None
13
45
  # This class will also eventually manage the invocation_id, flags, event manager, etc.
14
46
 
15
47
  @property
@@ -32,7 +64,7 @@ class InvocationContext:
32
64
  _INVOCATION_CONTEXT_VAR: ContextVar[InvocationContext] = ContextVar("DBT_INVOCATION_CONTEXT_VAR")
33
65
 
34
66
 
35
- def reliably_get_invocation_var() -> ContextVar:
67
+ def reliably_get_invocation_var() -> ContextVar[InvocationContext]:
36
68
  invocation_var: Optional[ContextVar] = next(
37
69
  (cv for cv in copy_context() if cv.name == _INVOCATION_CONTEXT_VAR.name), None
38
70
  )
@@ -36,6 +36,8 @@ class ColumnLevelConstraint(dbtClassMixin):
36
36
  warn_unsupported: bool = (
37
37
  True # Warn if constraint is not supported by the platform and won't be in DDL
38
38
  )
39
+ to: Optional[str] = None
40
+ to_columns: List[str] = field(default_factory=list)
39
41
 
40
42
 
41
43
  @dataclass
@@ -1,4 +1,4 @@
1
- from typing import ClassVar, cast, get_type_hints, List, Tuple, Dict, Any, Optional
1
+ from typing import Any, cast, ClassVar, Dict, get_type_hints, List, Optional, Tuple
2
2
  import re
3
3
  import jsonschema
4
4
  from dataclasses import fields, Field
@@ -26,7 +26,7 @@ class ValidationError(jsonschema.ValidationError):
26
26
 
27
27
 
28
28
  class DateTimeSerialization(SerializationStrategy):
29
- def serialize(self, value) -> str:
29
+ def serialize(self, value: datetime) -> str:
30
30
  out = value.isoformat()
31
31
  # Assume UTC if timezone is missing
32
32
  if value.tzinfo is None:
@@ -127,7 +127,7 @@ class dbtClassMixin(DataClassMessagePackMixin):
127
127
 
128
128
  # copied from hologram. Used in tests
129
129
  @classmethod
130
- def _get_field_names(cls):
130
+ def _get_field_names(cls) -> List[str]:
131
131
  return [element[1] for element in cls._get_fields()]
132
132
 
133
133
 
@@ -152,7 +152,7 @@ class ValidatedStringMixin(str, SerializableType):
152
152
 
153
153
  # These classes must be in this order or it doesn't work
154
154
  class StrEnum(str, SerializableType, Enum):
155
- def __str__(self):
155
+ def __str__(self) -> str:
156
156
  return self.value
157
157
 
158
158
  # https://docs.python.org/3.6/library/enum.html#using-automatic-values
@@ -1,5 +1,5 @@
1
1
  import builtins
2
- from typing import List, Any, Optional
2
+ from typing import Any, List, Optional
3
3
  import os
4
4
 
5
5
  from dbt_common.constants import SECRET_ENV_PREFIX
@@ -37,7 +37,7 @@ class DbtInternalError(DbtBaseException):
37
37
  self.msg = scrub_secrets(msg, env_secrets())
38
38
 
39
39
  @property
40
- def type(self):
40
+ def type(self) -> str:
41
41
  return "Internal"
42
42
 
43
43
  def process_stack(self):
@@ -59,7 +59,7 @@ class DbtInternalError(DbtBaseException):
59
59
 
60
60
  return lines
61
61
 
62
- def __str__(self):
62
+ def __str__(self) -> str:
63
63
  if hasattr(self.msg, "split"):
64
64
  split_msg = self.msg.split("\n")
65
65
  else:
@@ -19,7 +19,7 @@ Port = NewType("Port", int)
19
19
  class NVEnum(StrEnum):
20
20
  novalue = "novalue"
21
21
 
22
- def __eq__(self, other):
22
+ def __eq__(self, other) -> bool:
23
23
  return isinstance(other, NVEnum)
24
24
 
25
25
 
@@ -59,7 +59,7 @@ class IncludeExclude(dbtClassMixin):
59
59
  item_name in self.include or self.include in self.INCLUDE_ALL
60
60
  ) and item_name not in self.exclude
61
61
 
62
- def _validate_items(self, items: List[str]):
62
+ def _validate_items(self, items: List[str]) -> None:
63
63
  pass
64
64
 
65
65
 
dbt_common/record.py CHANGED
@@ -10,12 +10,9 @@ import dataclasses
10
10
  import json
11
11
  import os
12
12
 
13
- from deepdiff import DeepDiff # type: ignore
14
13
  from enum import Enum
15
14
  from typing import Any, Callable, Dict, List, Mapping, Optional, Type
16
15
 
17
- from dbt_common.context import get_invocation_context
18
-
19
16
 
20
17
  class Record:
21
18
  """An instance of this abstract Record class represents a request made by dbt
@@ -23,7 +20,8 @@ class Record:
23
20
  to the request, and the 'result' is what is returned."""
24
21
 
25
22
  params_cls: type
26
- result_cls: Optional[type]
23
+ result_cls: Optional[type] = None
24
+ group: Optional[str] = None
27
25
 
28
26
  def __init__(self, params, result) -> None:
29
27
  self.params = params
@@ -54,6 +52,11 @@ class Record:
54
52
 
55
53
  class Diff:
56
54
  def __init__(self, current_recording_path: str, previous_recording_path: str) -> None:
55
+ # deepdiff is expensive to import, so we only do it here when we need it
56
+ from deepdiff import DeepDiff # type: ignore
57
+
58
+ self.diff = DeepDiff
59
+
57
60
  self.current_recording_path = current_recording_path
58
61
  self.previous_recording_path = previous_recording_path
59
62
 
@@ -69,7 +72,7 @@ class Diff:
69
72
  if previous[i].get("result").get("table") is not None:
70
73
  previous[i]["result"]["table"] = json.loads(previous[i]["result"]["table"])
71
74
 
72
- return DeepDiff(previous, current, ignore_order=True, verbose_level=2)
75
+ return self.diff(previous, current, ignore_order=True, verbose_level=2)
73
76
 
74
77
  def diff_env_records(self, current: List, previous: List) -> Dict[str, Any]:
75
78
  # The mode and filepath may change. Ignore them.
@@ -79,12 +82,12 @@ class Diff:
79
82
  "root[0]['result']['env']['DBT_RECORDER_MODE']",
80
83
  ]
81
84
 
82
- return DeepDiff(
85
+ return self.diff(
83
86
  previous, current, ignore_order=True, verbose_level=2, exclude_paths=exclude_paths
84
87
  )
85
88
 
86
89
  def diff_default(self, current: List, previous: List) -> Dict[str, Any]:
87
- return DeepDiff(previous, current, ignore_order=True, verbose_level=2)
90
+ return self.diff(previous, current, ignore_order=True, verbose_level=2)
88
91
 
89
92
  def calculate_diff(self) -> Dict[str, Any]:
90
93
  with open(self.current_recording_path) as current_recording:
@@ -295,9 +298,11 @@ def record_function(
295
298
  return func_to_record
296
299
 
297
300
  @functools.wraps(func_to_record)
298
- def record_replay_wrapper(*args, **kwargs):
299
- recorder: Recorder = None
301
+ def record_replay_wrapper(*args, **kwargs) -> Any:
302
+ recorder: Optional[Recorder] = None
300
303
  try:
304
+ from dbt_common.context import get_invocation_context
305
+
301
306
  recorder = get_invocation_context().recorder
302
307
  except LookupError:
303
308
  pass
@@ -305,9 +310,9 @@ def record_function(
305
310
  if recorder is None:
306
311
  return func_to_record(*args, **kwargs)
307
312
 
308
- if (
309
- recorder.recorded_types is not None
310
- and record_type.__name__ not in recorder.recorded_types
313
+ if recorder.recorded_types is not None and not (
314
+ record_type.__name__ in recorder.recorded_types
315
+ or record_type.group in recorder.recorded_types
311
316
  ):
312
317
  return func_to_record(*args, **kwargs)
313
318
 
dbt_common/semver.py CHANGED
@@ -1,6 +1,6 @@
1
1
  from dataclasses import dataclass
2
2
  import re
3
- from typing import List
3
+ from typing import List, Iterable
4
4
 
5
5
  import dbt_common.exceptions.base
6
6
  from dbt_common.exceptions import VersionsNotCompatibleError
@@ -74,7 +74,7 @@ def _cmp(a, b):
74
74
 
75
75
  @dataclass
76
76
  class VersionSpecifier(VersionSpecification):
77
- def to_version_string(self, skip_matcher=False):
77
+ def to_version_string(self, skip_matcher: bool = False) -> str:
78
78
  prerelease = ""
79
79
  build = ""
80
80
  matcher = ""
@@ -92,7 +92,7 @@ class VersionSpecifier(VersionSpecification):
92
92
  )
93
93
 
94
94
  @classmethod
95
- def from_version_string(cls, version_string):
95
+ def from_version_string(cls, version_string: str) -> "VersionSpecifier":
96
96
  match = _VERSION_REGEX.match(version_string)
97
97
 
98
98
  if not match:
@@ -104,7 +104,7 @@ class VersionSpecifier(VersionSpecification):
104
104
 
105
105
  return cls.from_dict(matched)
106
106
 
107
- def __str__(self):
107
+ def __str__(self) -> str:
108
108
  return self.to_version_string()
109
109
 
110
110
  def to_range(self) -> "VersionRange":
@@ -192,32 +192,32 @@ class VersionSpecifier(VersionSpecification):
192
192
 
193
193
  return 0
194
194
 
195
- def __lt__(self, other):
195
+ def __lt__(self, other) -> bool:
196
196
  return self.compare(other) == -1
197
197
 
198
- def __gt__(self, other):
198
+ def __gt__(self, other) -> bool:
199
199
  return self.compare(other) == 1
200
200
 
201
- def __eq___(self, other):
201
+ def __eq___(self, other) -> bool:
202
202
  return self.compare(other) == 0
203
203
 
204
204
  def __cmp___(self, other):
205
205
  return self.compare(other)
206
206
 
207
207
  @property
208
- def is_unbounded(self):
208
+ def is_unbounded(self) -> bool:
209
209
  return False
210
210
 
211
211
  @property
212
- def is_lower_bound(self):
212
+ def is_lower_bound(self) -> bool:
213
213
  return self.matcher in [Matchers.GREATER_THAN, Matchers.GREATER_THAN_OR_EQUAL]
214
214
 
215
215
  @property
216
- def is_upper_bound(self):
216
+ def is_upper_bound(self) -> bool:
217
217
  return self.matcher in [Matchers.LESS_THAN, Matchers.LESS_THAN_OR_EQUAL]
218
218
 
219
219
  @property
220
- def is_exact(self):
220
+ def is_exact(self) -> bool:
221
221
  return self.matcher == Matchers.EXACT
222
222
 
223
223
  @classmethod
@@ -418,7 +418,7 @@ def reduce_versions(*args):
418
418
  return to_return
419
419
 
420
420
 
421
- def versions_compatible(*args):
421
+ def versions_compatible(*args) -> bool:
422
422
  if len(args) == 1:
423
423
  return True
424
424
 
@@ -429,7 +429,7 @@ def versions_compatible(*args):
429
429
  return False
430
430
 
431
431
 
432
- def find_possible_versions(requested_range, available_versions):
432
+ def find_possible_versions(requested_range, available_versions: Iterable[str]):
433
433
  possible_versions = []
434
434
 
435
435
  for version_string in available_versions:
@@ -442,7 +442,9 @@ def find_possible_versions(requested_range, available_versions):
442
442
  return [v.to_version_string(skip_matcher=True) for v in sorted_versions]
443
443
 
444
444
 
445
- def resolve_to_specific_version(requested_range, available_versions):
445
+ def resolve_to_specific_version(
446
+ requested_range, available_versions: Iterable[str]
447
+ ) -> Optional[str]:
446
448
  max_version = None
447
449
  max_version_string = None
448
450
 
@@ -1,7 +1,7 @@
1
1
  # This is useful for proto generated classes in particular, since
2
2
  # the default for protobuf for strings is the empty string, so
3
3
  # Optional[str] types don't work for generated Python classes.
4
- from typing import Optional
4
+ from typing import Any, Dict, Optional
5
5
 
6
6
 
7
7
  def cast_to_str(string: Optional[str]) -> str:
@@ -18,8 +18,8 @@ def cast_to_int(integer: Optional[int]) -> int:
18
18
  return integer
19
19
 
20
20
 
21
- def cast_dict_to_dict_of_strings(dct):
22
- new_dct = {}
21
+ def cast_dict_to_dict_of_strings(dct: Dict[Any, Any]) -> Dict[str, str]:
22
+ new_dct: Dict[str, str] = {}
23
23
  for k, v in dct.items():
24
24
  new_dct[str(k)] = str(v)
25
25
  return new_dct
@@ -1,9 +1,12 @@
1
1
  import concurrent.futures
2
2
  from contextlib import contextmanager
3
- from contextvars import ContextVar
4
3
  from typing import Protocol, Optional
5
4
 
6
- from dbt_common.context import get_invocation_context, reliably_get_invocation_var
5
+ from dbt_common.context import (
6
+ get_invocation_context,
7
+ reliably_get_invocation_var,
8
+ InvocationContext,
9
+ )
7
10
 
8
11
 
9
12
  class ConnectingExecutor(concurrent.futures.Executor):
@@ -63,7 +66,7 @@ class HasThreadingConfig(Protocol):
63
66
  threads: Optional[int]
64
67
 
65
68
 
66
- def _thread_initializer(invocation_context: ContextVar) -> None:
69
+ def _thread_initializer(invocation_context: InvocationContext) -> None:
67
70
  invocation_var = reliably_get_invocation_var()
68
71
  invocation_var.set(invocation_context)
69
72
 
dbt_common/utils/jinja.py CHANGED
@@ -5,19 +5,21 @@ MACRO_PREFIX = "dbt_macro__"
5
5
  DOCS_PREFIX = "dbt_docs__"
6
6
 
7
7
 
8
- def get_dbt_macro_name(name):
8
+ def get_dbt_macro_name(name) -> str:
9
9
  if name is None:
10
10
  raise DbtInternalError("Got None for a macro name!")
11
11
  return f"{MACRO_PREFIX}{name}"
12
12
 
13
13
 
14
- def get_dbt_docs_name(name):
14
+ def get_dbt_docs_name(name) -> str:
15
15
  if name is None:
16
16
  raise DbtInternalError("Got None for a doc name!")
17
17
  return f"{DOCS_PREFIX}{name}"
18
18
 
19
19
 
20
- def get_materialization_macro_name(materialization_name, adapter_type=None, with_prefix=True):
20
+ def get_materialization_macro_name(
21
+ materialization_name, adapter_type=None, with_prefix=True
22
+ ) -> str:
21
23
  if adapter_type is None:
22
24
  adapter_type = "default"
23
25
  name = f"materialization_{materialization_name}_{adapter_type}"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: dbt-common
3
- Version: 1.5.0
3
+ Version: 1.7.0
4
4
  Summary: The shared common utilities that dbt-core and adapter implementations use
5
5
  Project-URL: Homepage, https://github.com/dbt-labs/dbt-common
6
6
  Project-URL: Repository, https://github.com/dbt-labs/dbt-common.git
@@ -1,22 +1,22 @@
1
- dbt_common/__about__.py,sha256=Wgohrh7g_peUNIz0Cro4w7u88rZU94fNypIcm9oMWgQ,18
1
+ dbt_common/__about__.py,sha256=9UsQLZYw3LX7NO0PsCa8nGInSg0LC4sQ67EJUs50ljU,18
2
2
  dbt_common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
3
  dbt_common/constants.py,sha256=-Y5DIL1SDPQWtlCNizXRYxFgbx1D7LaLs1ysamvGMRk,278
4
- dbt_common/context.py,sha256=BhgT7IgyvpZHEtIdFVVuBBBX5LuU7obXT7NvIPeuD2g,1760
5
- dbt_common/dataclass_schema.py,sha256=t3HGD0oXTSjitctuCVHv3iyq5BT3jxoSxv_VGkrJlEo,5523
6
- dbt_common/helper_types.py,sha256=NoxqGFAq9bOjh7rqtz_eepXAxk20n3mmW_gUVpnMyYU,3901
4
+ dbt_common/context.py,sha256=mNYvTF5hWGM-x19CgOT5L35s_GcPoGIAbrzxbmz9DX4,2520
5
+ dbt_common/dataclass_schema.py,sha256=yFq1P5qkEwOJylSKe69Edirubpzgdcbvj6ThbPUH8dA,5553
6
+ dbt_common/helper_types.py,sha256=FWJGPmp7Qp2iToHyI4uvhkBbu_d1tl2_oF-obi98_N4,3917
7
7
  dbt_common/invocation.py,sha256=Zw8jRPn75oi2VrUD6qGvaCDtSyIfqm5pJlPpRjs3s1E,202
8
8
  dbt_common/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
- dbt_common/record.py,sha256=F-FbFt6Js_U4r5b5hXGp8DY-MTEKNb-dLMaBT80UWHw,12415
10
- dbt_common/semver.py,sha256=2zoZYCQ7PfswqslT2NHuMGgPGMuMuX-yRThVoqfDWQU,13954
9
+ dbt_common/record.py,sha256=og-9SZhRINqW6jnqLdf3CTVKvUPdKldi52oFaa2-QRE,12658
10
+ dbt_common/semver.py,sha256=M6J5IHi04yn8R6FTwdOweD6gFFrl7KxVMc-x5WOYV9E,14130
11
11
  dbt_common/tests.py,sha256=6lC_JuRtoYO6cbAF8-R5aTM4HtQiM_EH8X5m_97duGY,315
12
12
  dbt_common/ui.py,sha256=rc2TEM29raBFc_LXcg901pMDD07C2ohwp9qzkE-7pBY,2567
13
13
  dbt_common/clients/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
14
  dbt_common/clients/_jinja_blocks.py,sha256=xoJK9Y0F93U2PKfT_3SJbBopCGYCtl7LiwKuylXnrEE,12947
15
15
  dbt_common/clients/agate_helper.py,sha256=n5Q0_gJPbBhFvjd286NGYGlcTtdEExYmIT3968lppyg,9124
16
16
  dbt_common/clients/jinja.py,sha256=i6VQ94FU4F6ZCQLHTxNSeGHmvyYSIe34nDhNkH6wO08,18502
17
- dbt_common/clients/system.py,sha256=K-b9Lx8ZhgR5tKq1vnqbX8sEVaVRQHqkEkLYQIjFc64,23158
17
+ dbt_common/clients/system.py,sha256=ICFy-s-IQCbXNCmL0LTplyRvnNK8YTn7BL1_vDMffrI,22969
18
18
  dbt_common/contracts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
- dbt_common/contracts/constraints.py,sha256=hyqTW2oPB1dfXWW388LWnL-EFdqTpQciKISH3CeLkro,1267
19
+ dbt_common/contracts/constraints.py,sha256=_f1q3Rkcg2UwA7zI5XBbUMXnPUg6pw17UC7l1HyhyQM,1352
20
20
  dbt_common/contracts/metadata.py,sha256=K_M06Rue0wmrQhFP_mq3uvQszq10CIt93oGiAVgbRfE,1293
21
21
  dbt_common/contracts/util.py,sha256=RZpeEExSKdyFwTq7MM3rd1ZkAf11C7I-bgppUJ6SXOg,741
22
22
  dbt_common/contracts/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -40,7 +40,7 @@ dbt_common/events/types.proto,sha256=nsOE3XFYBPovT9Th8WMkDWxBXa-adqiL23zCYfOdVk0
40
40
  dbt_common/events/types.py,sha256=quE22Kp78J51_8f1Si_K-xg0gA2Sg-fw9XDjNrcy81M,3905
41
41
  dbt_common/events/types_pb2.py,sha256=Gn3exMla0FjoA-5OQTjOeKCT_DLxzvcA3YHPfbFjAck,6563
42
42
  dbt_common/exceptions/__init__.py,sha256=X_Uw7BxOzXev_9JMYfs5Cm-_i_Qf2PJim8_-dDJI7Y8,361
43
- dbt_common/exceptions/base.py,sha256=uuI_2y_BQrjCyjHKR2pWeCica1dyoo1cc4e1Tq0de7M,7583
43
+ dbt_common/exceptions/base.py,sha256=9FVfeMn2zSZyevynwuVqKTgHBXyQ1HLZZRsubiU2FiE,7597
44
44
  dbt_common/exceptions/cache.py,sha256=0z4fBcdNZMAR41YbPRo2GN0__xAMaYs8Uc-t3hjmVio,2532
45
45
  dbt_common/exceptions/connection.py,sha256=rXLJXUdLhyXP3CUUyiqWN2DDO5-0Pn1ChX3OIR7pxKk,176
46
46
  dbt_common/exceptions/contracts.py,sha256=i2PKRqda1Pq_Sro9FA22W7FTGklhBAGl6__nimR5_qI,527
@@ -49,14 +49,14 @@ dbt_common/exceptions/jinja.py,sha256=PzVUB1MFf8x81bQHTwFIGw3PyrGZzWYw04eotI4Cqt
49
49
  dbt_common/exceptions/macros.py,sha256=2nujJrtpWHnhBwcyhcOmeVaEzILh3W9gtyP6vVpkA0o,3301
50
50
  dbt_common/exceptions/system.py,sha256=w7zCilpKTiKwj0BwqVgJZy6SqiCpH61ZzvOfGnYaeoI,1549
51
51
  dbt_common/utils/__init__.py,sha256=8PNb_A9zm2YfYMa0GsM-pAyJy3Iu0FUtWKvCs8kFhD0,549
52
- dbt_common/utils/casting.py,sha256=TVWHO5ct-foNBH-pj4vDZ84jVU-hPQll52X9YSjz2Zs,605
52
+ dbt_common/utils/casting.py,sha256=lcGLvASRRQ4q195wkQoP0BMA_AojK6Zu1yqxxjRktjo,666
53
53
  dbt_common/utils/connection.py,sha256=J5zxWFpGHpUbe-F04S9bVLLO3HLvHB6INOkAey0k76c,1373
54
54
  dbt_common/utils/dict.py,sha256=unI-kJs2yvw7ic2U71-6H8koVRknkb0jCk7W_FCq6_I,4014
55
55
  dbt_common/utils/encoding.py,sha256=6_kSY2FvGNYMg7oX7PrbvVioieydih3Kl7Ii802LaHI,1705
56
- dbt_common/utils/executor.py,sha256=Zyzd1wML3aN-iYn9ZG2Gc_jj5vknmvQNyH-c0RaPIpo,2446
56
+ dbt_common/utils/executor.py,sha256=pNY0UbPlwQmTE69Vt_Rj91YGCIOEaqeYU3CjAds0T70,2454
57
57
  dbt_common/utils/formatting.py,sha256=JUn5rzJ-uajs9wPCN0-f2iRFY1pOJF5YjTD9dERuLoc,165
58
- dbt_common/utils/jinja.py,sha256=XNfZHuZhLM_R_yPmzYojPm6bF7QOoxIjSWrkJRw6wks,965
59
- dbt_common-1.5.0.dist-info/METADATA,sha256=phlsK2cVVw1AWNpJa2_uNaM2KG5HroA0RZw4gUsMCFQ,5298
60
- dbt_common-1.5.0.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
61
- dbt_common-1.5.0.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
62
- dbt_common-1.5.0.dist-info/RECORD,,
58
+ dbt_common/utils/jinja.py,sha256=7s1-LbFBWIXZAeXMny6TpCmyd7uKrdDkCOklJ5W08qs,992
59
+ dbt_common-1.7.0.dist-info/METADATA,sha256=ZjCx7aXFL7b-lRUJ87A06wzS7F9CBQJK2hEfcpZumvA,5298
60
+ dbt_common-1.7.0.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
61
+ dbt_common-1.7.0.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
62
+ dbt_common-1.7.0.dist-info/RECORD,,