dbt-adapters 1.17.2__py3-none-any.whl → 1.17.3__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.

Potentially problematic release.


This version of dbt-adapters might be problematic. Click here for more details.

dbt/adapters/__about__.py CHANGED
@@ -1 +1 @@
1
- version = "1.17.2"
1
+ version = "1.17.3"
dbt/adapters/base/impl.py CHANGED
@@ -31,6 +31,7 @@ from dbt.adapters.record.base import (
31
31
  AdapterConvertTypeRecord,
32
32
  AdapterStandardizeGrantsDictRecord,
33
33
  AdapterListRelationsWithoutCachingRecord,
34
+ AdapterGetColumnsInRelationRecord,
34
35
  )
35
36
  from dbt_common.behavior_flags import Behavior, BehaviorFlag
36
37
  from dbt_common.clients.jinja import CallableMacroGenerator
@@ -79,6 +80,7 @@ from dbt.adapters.catalogs import (
79
80
  CatalogIntegrationClient,
80
81
  CatalogIntegrationConfig,
81
82
  CatalogRelation,
83
+ CATALOG_INTEGRATION_MODEL_CONFIG_NAME,
82
84
  )
83
85
  from dbt.adapters.contracts.connection import Credentials
84
86
  from dbt.adapters.contracts.macros import MacroResolverProtocol
@@ -335,9 +337,18 @@ class BaseAdapter(metaclass=AdapterMeta):
335
337
  return self._catalog_client.get(name)
336
338
 
337
339
  @available
338
- def build_catalog_relation(self, config: RelationConfig) -> CatalogRelation:
339
- catalog = self.get_catalog_integration(config.catalog)
340
- return catalog.build_relation(config)
340
+ def build_catalog_relation(self, config: RelationConfig) -> Optional[CatalogRelation]:
341
+ if not config.config:
342
+ return None
343
+
344
+ # "catalog" is legacy, but we support it for backward compatibility
345
+ if catalog_name := config.config.get(
346
+ CATALOG_INTEGRATION_MODEL_CONFIG_NAME
347
+ ) or config.config.get("catalog"):
348
+ catalog = self.get_catalog_integration(catalog_name)
349
+ return catalog.build_relation(config)
350
+
351
+ return None
341
352
 
342
353
  ###
343
354
  # Methods to set / access a macro resolver
@@ -735,7 +746,12 @@ class BaseAdapter(metaclass=AdapterMeta):
735
746
  """
736
747
  raise NotImplementedError("`rename_relation` is not implemented for this adapter!")
737
748
 
738
- @auto_record_function("AdapterGetColumnsInRelation", group="Available")
749
+ @record_function(
750
+ AdapterGetColumnsInRelationRecord,
751
+ method=True,
752
+ index_on_thread_id=True,
753
+ id_field_name="thread_id",
754
+ )
739
755
  @abc.abstractmethod
740
756
  @available.parse_list
741
757
  def get_columns_in_relation(self, relation: BaseRelation) -> List[BaseColumn]:
@@ -60,7 +60,6 @@ class RelationConfig(Protocol):
60
60
  tags: List[str]
61
61
  quoting_dict: Dict[str, bool]
62
62
  config: Optional[MaterializationConfig]
63
- catalog: Optional[str]
64
63
 
65
64
 
66
65
  class ComponentName(StrEnum):
@@ -11,6 +11,7 @@ from dbt_common.record import Record, Recorder
11
11
  if TYPE_CHECKING:
12
12
  from agate import Table
13
13
  from dbt.adapters.base.relation import BaseRelation
14
+ from dbt.adapters.base.column import Column as BaseColumn
14
15
 
15
16
 
16
17
  @dataclasses.dataclass
@@ -244,3 +245,47 @@ class AdapterListRelationsWithoutCachingRecord(Record):
244
245
  params_cls = AdapterListRelationsWithoutCachingParams
245
246
  result_cls = AdapterListRelationsWithoutCachingResult
246
247
  group = "Available"
248
+
249
+
250
+ @dataclasses.dataclass
251
+ class AdapterGetColumnsInRelationParams:
252
+ thread_id: str
253
+ relation: "BaseRelation"
254
+
255
+ def _to_dict(self):
256
+ from dbt.adapters.record.serialization import serialize_base_relation
257
+
258
+ return {
259
+ "thread_id": self.thread_id,
260
+ "relation": serialize_base_relation(self.relation),
261
+ }
262
+
263
+ def _from_dict(self, data: Dict[str, Any]):
264
+ from dbt.adapters.record.serialization import deserialize_base_relation
265
+
266
+ self.thread_id = data["thread_id"]
267
+ self.relation = deserialize_base_relation(data["relation"])
268
+
269
+
270
+ @dataclasses.dataclass
271
+ class AdapterGetColumnsInRelationResult:
272
+ return_val: List["BaseColumn"]
273
+
274
+ def _to_dict(self):
275
+ from dbt.adapters.record.serialization import serialize_base_column_list
276
+
277
+ return {"return_val": serialize_base_column_list(self.return_val)}
278
+
279
+ def _from_dict(self, data: Dict[str, Any]):
280
+ from dbt.adapters.record.serialization import deserialize_base_column_list
281
+
282
+ self.return_val = deserialize_base_column_list(data["return_val"])
283
+
284
+
285
+ @Recorder.register_record_type
286
+ class AdapterGetColumnsInRelationRecord(Record):
287
+ """Implements record/replay support for the BaseAdapter.get_columns_in_relation() method."""
288
+
289
+ params_cls = AdapterGetColumnsInRelationParams
290
+ result_cls = AdapterGetColumnsInRelationResult
291
+ group = "Available"
@@ -1,3 +1,4 @@
1
+ import dataclasses
1
2
  from datetime import datetime, date
2
3
  from decimal import Decimal
3
4
  from typing import Any, Dict, TYPE_CHECKING, List, Union
@@ -5,6 +6,7 @@ from typing import Any, Dict, TYPE_CHECKING, List, Union
5
6
  if TYPE_CHECKING:
6
7
  from agate import Table
7
8
  from dbt.adapters.base.relation import BaseRelation
9
+ from dbt.adapters.base.column import Column as BaseColumn
8
10
 
9
11
 
10
12
  def _column_filter(val: Any) -> Any:
@@ -61,3 +63,27 @@ def deserialize_base_relation(relation_dict: Dict[str, Any]) -> "BaseRelation":
61
63
  def deserialize_base_relation_list(relations_data: List[Dict[str, Any]]) -> List["BaseRelation"]:
62
64
  """Deserialize a list of BaseRelation objects from dictionaries."""
63
65
  return [deserialize_base_relation(relation_dict) for relation_dict in relations_data]
66
+
67
+
68
+ def serialize_base_column_list(columns: List["BaseColumn"]) -> List[Dict[str, Any]]:
69
+ return [serialize_base_column(column) for column in columns]
70
+
71
+
72
+ def serialize_base_column(column: "BaseColumn") -> Dict[str, Any]:
73
+ column_dict = dataclasses.asdict(column)
74
+ return column_dict
75
+
76
+
77
+ def deserialize_base_column_list(columns_data: List[Dict[str, Any]]) -> List["BaseColumn"]:
78
+ return [deserialize_base_column(column_dict) for column_dict in columns_data]
79
+
80
+
81
+ def deserialize_base_column(column_dict: Dict[str, Any]) -> "BaseColumn":
82
+ # Only include fields that are present in the base column class
83
+ params_dict = {
84
+ field.name: column_dict[field.name]
85
+ for field in dataclasses.fields(BaseColumn)
86
+ if field.name in column_dict
87
+ }
88
+
89
+ return BaseColumn(**params_dict)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dbt-adapters
3
- Version: 1.17.2
3
+ Version: 1.17.3
4
4
  Summary: The set of adapter protocols and base functionality that supports integration with dbt-core
5
5
  Project-URL: Homepage, https://github.com/dbt-labs/dbt-adapters/tree/main/dbt-adapters
6
6
  Project-URL: Documentation, https://docs.getdbt.com
@@ -1,4 +1,4 @@
1
- dbt/adapters/__about__.py,sha256=wxC9D2Pc7hCgPR77PzCTk0oUVNpCt0m9Qi2eoi3zzbk,19
1
+ dbt/adapters/__about__.py,sha256=qVDR3TR6VtE0YfURW1Jg-x24e0XH8kwGXDwnwHu0L-I,19
2
2
  dbt/adapters/__init__.py,sha256=3noHsg-64qI0_Pw6OR9F7l1vU2_qrJvinq8POTtuaZM,252
3
3
  dbt/adapters/cache.py,sha256=WGy4ewnz-J13LverTACBW2iFhGswrWLgm-wiBrQnMzo,20084
4
4
  dbt/adapters/capability.py,sha256=M3FkC9veKnNB7a7uQyl7EHX_AGNXPChbHAkcY4cgXCY,2534
@@ -11,7 +11,7 @@ dbt/adapters/base/README.md,sha256=muHQntC07Lh6L1XfVgwKhV5RltOPBLYPdQqd8_7l34c,5
11
11
  dbt/adapters/base/__init__.py,sha256=Nc8lQVkOzAqdcxk4cw4E_raxN9CAWMwhQx4STdiicxg,456
12
12
  dbt/adapters/base/column.py,sha256=Uj20UixoxCn2rlv4QDNONyys6CDkDFyG3anCXKf0T2c,5350
13
13
  dbt/adapters/base/connections.py,sha256=-C5dOwGgMKH8n_v6wjwOxV7chBdS0GjOGwNQCUbhhWc,16951
14
- dbt/adapters/base/impl.py,sha256=uACwbMYJL9KykHdckf-9Egz4MBGecwOsSrYtU72OEx8,79181
14
+ dbt/adapters/base/impl.py,sha256=IpqLpwlSu2sF6JCRXS7JyRa4sRdfcirPl-krHeKu9RM,79654
15
15
  dbt/adapters/base/meta.py,sha256=c5j0qeGec1cAi-IlVV_JkhMk01p5XqbtGj02uxGP1S4,5686
16
16
  dbt/adapters/base/plugin.py,sha256=rm0GjNHnWM2mn0GJOjciZLwn-02xlzWCoMT9u-epwP0,1076
17
17
  dbt/adapters/base/query_headers.py,sha256=rHgux9b_vPp_xRsg8QU3NE202Hho4i4zO9u9Gx_BCF4,3651
@@ -26,7 +26,7 @@ dbt/adapters/clients/jinja.py,sha256=NsZOiBpOLunS46hRL5OcX1MpY3Ih6_87Vgz4qd_PNbc
26
26
  dbt/adapters/contracts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
27
  dbt/adapters/contracts/connection.py,sha256=azipef6NBjkh88OcuF90cNUdcYBPXFMl9K99OAwdl_0,6926
28
28
  dbt/adapters/contracts/macros.py,sha256=NYVDi5ww7v4ksKBwF836TXE-2xU4IBaUINqvxMY-ieU,366
29
- dbt/adapters/contracts/relation.py,sha256=JEt9uTHUelb1aZ0PeUbIASoLL2GrG1Q1Ibr_7oGhigM,4819
29
+ dbt/adapters/contracts/relation.py,sha256=ZO1nq1KmImQT6kO0mhxJcZAFXzP4Z6yZAqYGY3h6S1U,4792
30
30
  dbt/adapters/events/README.md,sha256=3rMVP1XO1Lw7Dv6g7-SkDsAcN4VVjIF0fHKopEcCzXk,2689
31
31
  dbt/adapters/events/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
32
32
  dbt/adapters/events/adapter_types_pb2.py,sha256=Mov1yYR_v9JG6n7MHvzEbFtLN4gMQ1Uv5die8u2eJag,126
@@ -40,9 +40,9 @@ dbt/adapters/exceptions/compilation.py,sha256=ylUvVLwlzeKqFr16pGhSqHBbE3Z-lneDpp
40
40
  dbt/adapters/exceptions/connection.py,sha256=x82j2Ix242Slm6Ima8Tol3GLOB9yZYH5lq6IV1WKq54,445
41
41
  dbt/adapters/exceptions/database.py,sha256=nIXJdQyPQOZaiKvCkQ3MoKlKOiaN58rtDZflw3CSkug,1618
42
42
  dbt/adapters/record/__init__.py,sha256=u_0eJzN5RL90oL-RNoP2wWGMCGp0kG0lZ0uVWnnGdxs,123
43
- dbt/adapters/record/base.py,sha256=4HAGpxUX-9JoWgrWctM29xX_EBfVUD-FbLGukQH33kM,6714
43
+ dbt/adapters/record/base.py,sha256=5e-y18NK9K1H8L94OZrkTxE0_Wsytp83_t62rEJ7RG0,8164
44
44
  dbt/adapters/record/handle.py,sha256=hCQpDmZGKqJXrSqgYcb-F542TZi069uz1MY9fS15INo,1907
45
- dbt/adapters/record/serialization.py,sha256=aysH908v3qURycAPZ4a-TwDa5UQZrcmaeu1Zj_RFTvE,1987
45
+ dbt/adapters/record/serialization.py,sha256=8ASdf-3hk1AnOSC_xYVgxCrlPE6WNbqEgxBFdskeMpQ,2874
46
46
  dbt/adapters/record/cursor/cursor.py,sha256=AW0B1g0j5mn7pUnvsE7zd4_Zi7cSFOsyvPbE2HV0CPI,2967
47
47
  dbt/adapters/record/cursor/description.py,sha256=5LNebP2AF2aicPWfM9FsD5r7SAmdac8TX_4NZfJQgPk,1060
48
48
  dbt/adapters/record/cursor/execute.py,sha256=f8Yc1MKExj7QLbFnK8WnnwsoGESuYMWnFWhytbcAPjc,1271
@@ -166,7 +166,7 @@ dbt/include/global_project/macros/utils/right.sql,sha256=EwNG98CAFIwNDmarwopf7Rk
166
166
  dbt/include/global_project/macros/utils/safe_cast.sql,sha256=1mswwkDACmIi1I99JKb_-vq3kjMe4HhMRV70mW8Bt4Y,298
167
167
  dbt/include/global_project/macros/utils/split_part.sql,sha256=fXEIS0oIiYR7-4lYbb0QbZdG-q2TpV63AFd1ky4I5UM,714
168
168
  dbt/include/global_project/tests/generic/builtin.sql,sha256=p94xdyPwb2TlxgLBqCfrcRfJ1QNgsjPvBm8f0Q5eqZM,1022
169
- dbt_adapters-1.17.2.dist-info/METADATA,sha256=g1DhELVUkxSbyMtvQRpcpw70Nuoz0KcW4SslEsNuCOo,4534
170
- dbt_adapters-1.17.2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
171
- dbt_adapters-1.17.2.dist-info/licenses/LICENSE,sha256=9yjigiJhWcCZvQjdagGKDwrRph58QWc5P2bVSQwXo6s,11344
172
- dbt_adapters-1.17.2.dist-info/RECORD,,
169
+ dbt_adapters-1.17.3.dist-info/METADATA,sha256=0qS2nabX3aCNSPAr7N1ogI7CXpr6YU_tlZdXd_pQo3I,4534
170
+ dbt_adapters-1.17.3.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
171
+ dbt_adapters-1.17.3.dist-info/licenses/LICENSE,sha256=9yjigiJhWcCZvQjdagGKDwrRph58QWc5P2bVSQwXo6s,11344
172
+ dbt_adapters-1.17.3.dist-info/RECORD,,