dbt-adapters 1.12.0__py3-none-any.whl → 1.13.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.

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.12.0"
1
+ version = "1.13.0"
dbt/adapters/base/impl.py CHANGED
@@ -97,6 +97,7 @@ if TYPE_CHECKING:
97
97
  GET_CATALOG_MACRO_NAME = "get_catalog"
98
98
  GET_CATALOG_RELATIONS_MACRO_NAME = "get_catalog_relations"
99
99
  FRESHNESS_MACRO_NAME = "collect_freshness"
100
+ CUSTOM_SQL_FRESHNESS_MACRO_NAME = "collect_freshness_custom_sql"
100
101
  GET_RELATION_LAST_MODIFIED_MACRO_NAME = "get_relation_last_modified"
101
102
  DEFAULT_BASE_BEHAVIOR_FLAGS = [
102
103
  {
@@ -1327,6 +1328,31 @@ class BaseAdapter(metaclass=AdapterMeta):
1327
1328
  """Cancel all open connections."""
1328
1329
  return self.connections.cancel_open()
1329
1330
 
1331
+ def _process_freshness_execution(
1332
+ self,
1333
+ macro_name: str,
1334
+ kwargs: Dict[str, Any],
1335
+ macro_resolver: Optional[MacroResolverProtocol] = None,
1336
+ ) -> Tuple[Optional[AdapterResponse], FreshnessResponse]:
1337
+ """Execute and process a freshness macro to generate a FreshnessResponse"""
1338
+ import agate
1339
+
1340
+ result = self.execute_macro(macro_name, kwargs=kwargs, macro_resolver=macro_resolver)
1341
+
1342
+ if isinstance(result, agate.Table):
1343
+ warn_or_error(CollectFreshnessReturnSignature())
1344
+ table = result
1345
+ adapter_response = None
1346
+ else:
1347
+ adapter_response, table = result.response, result.table
1348
+
1349
+ # Process the results table
1350
+ if len(table) != 1 or len(table[0]) != 2:
1351
+ raise MacroResultError(macro_name, table)
1352
+
1353
+ freshness_response = self._create_freshness_response(table[0][0], table[0][1])
1354
+ return adapter_response, freshness_response
1355
+
1330
1356
  def calculate_freshness(
1331
1357
  self,
1332
1358
  source: BaseRelation,
@@ -1335,49 +1361,26 @@ class BaseAdapter(metaclass=AdapterMeta):
1335
1361
  macro_resolver: Optional[MacroResolverProtocol] = None,
1336
1362
  ) -> Tuple[Optional[AdapterResponse], FreshnessResponse]:
1337
1363
  """Calculate the freshness of sources in dbt, and return it"""
1338
- import agate
1339
-
1340
- kwargs: Dict[str, Any] = {
1364
+ kwargs = {
1341
1365
  "source": source,
1342
1366
  "loaded_at_field": loaded_at_field,
1343
1367
  "filter": filter,
1344
1368
  }
1369
+ return self._process_freshness_execution(FRESHNESS_MACRO_NAME, kwargs, macro_resolver)
1345
1370
 
1346
- # run the macro
1347
- # in older versions of dbt-core, the 'collect_freshness' macro returned the table of results directly
1348
- # starting in v1.5, by default, we return both the table and the adapter response (metadata about the query)
1349
- result: Union[
1350
- AttrDict, # current: contains AdapterResponse + "agate.Table"
1351
- "agate.Table", # previous: just table
1352
- ]
1353
- result = self.execute_macro(
1354
- FRESHNESS_MACRO_NAME, kwargs=kwargs, macro_resolver=macro_resolver
1355
- )
1356
- if isinstance(result, agate.Table):
1357
- warn_or_error(CollectFreshnessReturnSignature())
1358
- adapter_response = None
1359
- table = result
1360
- else:
1361
- adapter_response, table = result.response, result.table # type: ignore[attr-defined]
1362
- # now we have a 1-row table of the maximum `loaded_at_field` value and
1363
- # the current time according to the db.
1364
- if len(table) != 1 or len(table[0]) != 2:
1365
- raise MacroResultError(FRESHNESS_MACRO_NAME, table)
1366
- if table[0][0] is None:
1367
- # no records in the table, so really the max_loaded_at was
1368
- # infinitely long ago. Just call it 0:00 January 1 year UTC
1369
- max_loaded_at = datetime(1, 1, 1, 0, 0, 0, tzinfo=pytz.UTC)
1370
- else:
1371
- max_loaded_at = _utc(table[0][0], source, loaded_at_field)
1372
-
1373
- snapshotted_at = _utc(table[0][1], source, loaded_at_field)
1374
- age = (snapshotted_at - max_loaded_at).total_seconds()
1375
- freshness: FreshnessResponse = {
1376
- "max_loaded_at": max_loaded_at,
1377
- "snapshotted_at": snapshotted_at,
1378
- "age": age,
1371
+ def calculate_freshness_from_custom_sql(
1372
+ self,
1373
+ source: BaseRelation,
1374
+ sql: str,
1375
+ macro_resolver: Optional[MacroResolverProtocol] = None,
1376
+ ) -> Tuple[Optional[AdapterResponse], FreshnessResponse]:
1377
+ kwargs = {
1378
+ "source": source,
1379
+ "loaded_at_query": sql,
1379
1380
  }
1380
- return adapter_response, freshness
1381
+ return self._process_freshness_execution(
1382
+ CUSTOM_SQL_FRESHNESS_MACRO_NAME, kwargs, macro_resolver
1383
+ )
1381
1384
 
1382
1385
  def calculate_freshness_from_metadata_batch(
1383
1386
  self,
@@ -14,3 +14,19 @@
14
14
  {% endcall %}
15
15
  {{ return(load_result('collect_freshness')) }}
16
16
  {% endmacro %}
17
+
18
+ {% macro collect_freshness_custom_sql(source, loaded_at_query) %}
19
+ {{ return(adapter.dispatch('collect_freshness_custom_sql', 'dbt')(source, loaded_at_query))}}
20
+ {% endmacro %}
21
+
22
+ {% macro default__collect_freshness_custom_sql(source, loaded_at_query) %}
23
+ {% call statement('collect_freshness_custom_sql', fetch_result=True, auto_begin=False) -%}
24
+ with source_query as (
25
+ {{ loaded_at_query }}
26
+ )
27
+ select
28
+ (select * from source_query) as max_loaded_at,
29
+ {{ current_timestamp() }} as snapshotted_at
30
+ {% endcall %}
31
+ {{ return(load_result('collect_freshness_custom_sql')) }}
32
+ {% endmacro %}
@@ -19,7 +19,7 @@
19
19
  {%- endmacro -%}
20
20
 
21
21
  {% macro default__get_limit_sql(sql, limit) %}
22
- {{ compiled_code }}
22
+ {{ sql }}
23
23
  {% if limit is not none %}
24
24
  limit {{ limit }}
25
25
  {%- endif -%}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dbt-adapters
3
- Version: 1.12.0
3
+ Version: 1.13.0
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
6
6
  Project-URL: Documentation, https://docs.getdbt.com
@@ -1,5 +1,5 @@
1
1
  dbt/__init__.py,sha256=iY4jdvOxcDhkdr5FiyOTZPHadKtMZDQ-qC6Fw6_EHPM,277
2
- dbt/adapters/__about__.py,sha256=321j5SZZ1oxJ8inLWCUMR7BK6FyNniIooozPekshf70,19
2
+ dbt/adapters/__about__.py,sha256=M85oP8JJdZ4yZHcp9qfGYLKUYvnN3kTyQosVcYPCPow,19
3
3
  dbt/adapters/__init__.py,sha256=3noHsg-64qI0_Pw6OR9F7l1vU2_qrJvinq8POTtuaZM,252
4
4
  dbt/adapters/cache.py,sha256=WGy4ewnz-J13LverTACBW2iFhGswrWLgm-wiBrQnMzo,20084
5
5
  dbt/adapters/capability.py,sha256=M3FkC9veKnNB7a7uQyl7EHX_AGNXPChbHAkcY4cgXCY,2534
@@ -12,7 +12,7 @@ dbt/adapters/base/README.md,sha256=muHQntC07Lh6L1XfVgwKhV5RltOPBLYPdQqd8_7l34c,5
12
12
  dbt/adapters/base/__init__.py,sha256=Nc8lQVkOzAqdcxk4cw4E_raxN9CAWMwhQx4STdiicxg,456
13
13
  dbt/adapters/base/column.py,sha256=Uj20UixoxCn2rlv4QDNONyys6CDkDFyG3anCXKf0T2c,5350
14
14
  dbt/adapters/base/connections.py,sha256=-C5dOwGgMKH8n_v6wjwOxV7chBdS0GjOGwNQCUbhhWc,16951
15
- dbt/adapters/base/impl.py,sha256=jUcI0rIL_HCOQ-vRTvu-Cg_hsR5zYLqMhZXvp8V5N2c,74986
15
+ dbt/adapters/base/impl.py,sha256=c-tUGbkZjXfKtc7gBK2qlJITdYINJoCQu75ckBFNS8I,74803
16
16
  dbt/adapters/base/meta.py,sha256=IKqviGf7gK_qGtrn0t8NaSdUaw8g_M8SjICacMvNwGY,5702
17
17
  dbt/adapters/base/plugin.py,sha256=rm0GjNHnWM2mn0GJOjciZLwn-02xlzWCoMT9u-epwP0,1076
18
18
  dbt/adapters/base/query_headers.py,sha256=UluGd9IYCYkoMiDi5Yx_lnrCOSjWppjwRro4SIGgx8I,3496
@@ -60,13 +60,13 @@ dbt/include/global_project/dbt_project.yml,sha256=RTtOhnBpEL0gbd1GlpxuVr6eZJBPvg
60
60
  dbt/include/global_project/docs/overview.md,sha256=VuObM4pcS-TvwYeAjjUbe0TBhEnxf6g30EPWrGjya_w,1824
61
61
  dbt/include/global_project/macros/adapters/apply_grants.sql,sha256=3NUJLWmNE0ZAWxc1LuIpo6-dTfLEBjX1Os5BdDb_IOQ,6861
62
62
  dbt/include/global_project/macros/adapters/columns.sql,sha256=21cb0Q8A3oDbajV7oL06arDcmg-YuvWRmQ-07KeI-dk,5483
63
- dbt/include/global_project/macros/adapters/freshness.sql,sha256=FKi-xsBCOYjGYp103O1mVTeWKy2blb_JefyoLDF0aXI,599
63
+ dbt/include/global_project/macros/adapters/freshness.sql,sha256=bl2Kn7s2pDMzrJWeLXYyUVYXDmloLxntjOgyWSDcgCs,1200
64
64
  dbt/include/global_project/macros/adapters/indexes.sql,sha256=DasPn32Cm0OZyjBPBWzL4BpK9PZ3xF_Pu8Nh4NgASaw,1366
65
65
  dbt/include/global_project/macros/adapters/metadata.sql,sha256=meNIc3z4lXdh1lDb-K1utKb8VzAVuN23E6XWgMZGDhQ,3512
66
66
  dbt/include/global_project/macros/adapters/persist_docs.sql,sha256=TUazJHSaMIDlELqALLRMC2kYj5DGZ9U-6K8RbgwRXw4,1369
67
67
  dbt/include/global_project/macros/adapters/relation.sql,sha256=yT4YVCipxeQAjkj98rscCNt-slC8oIJXriHlkvzbkQ0,3016
68
68
  dbt/include/global_project/macros/adapters/schema.sql,sha256=XElo0cfvdEipI5hpulLXLBEXP_YnilG-1kRwDMqDD5I,594
69
- dbt/include/global_project/macros/adapters/show.sql,sha256=mFDQZxvvDzafTeh9v90ttks-VCjUUxbrw_YA02MV1Jk,785
69
+ dbt/include/global_project/macros/adapters/show.sql,sha256=IUDcMxctFksaaIfnCtyJqu_MarwEldhegtzHcxDwUQg,775
70
70
  dbt/include/global_project/macros/adapters/timestamps.sql,sha256=FvPwWkmM00r9rs2DjR5wrI-U9ah3-8VMIwk5wRRzuPw,1910
71
71
  dbt/include/global_project/macros/adapters/validate_sql.sql,sha256=IC-HEVv8Cl8nd7dic_U4hyqlrkdO6plPbH914OdM_WE,285
72
72
  dbt/include/global_project/macros/etc/datetime.sql,sha256=HwNxXw0xHHLVKFBlbbc4wqTdYe6_smku1EwWGM7G-6g,2185
@@ -157,7 +157,7 @@ dbt/include/global_project/macros/utils/right.sql,sha256=EwNG98CAFIwNDmarwopf7Rk
157
157
  dbt/include/global_project/macros/utils/safe_cast.sql,sha256=1mswwkDACmIi1I99JKb_-vq3kjMe4HhMRV70mW8Bt4Y,298
158
158
  dbt/include/global_project/macros/utils/split_part.sql,sha256=fXEIS0oIiYR7-4lYbb0QbZdG-q2TpV63AFd1ky4I5UM,714
159
159
  dbt/include/global_project/tests/generic/builtin.sql,sha256=p94xdyPwb2TlxgLBqCfrcRfJ1QNgsjPvBm8f0Q5eqZM,1022
160
- dbt_adapters-1.12.0.dist-info/METADATA,sha256=AHsPu7P_IJ4P5nf3z-RcufHB6_KCz99B2fTbK8AUkKQ,2576
161
- dbt_adapters-1.12.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
162
- dbt_adapters-1.12.0.dist-info/licenses/LICENSE,sha256=9yjigiJhWcCZvQjdagGKDwrRph58QWc5P2bVSQwXo6s,11344
163
- dbt_adapters-1.12.0.dist-info/RECORD,,
160
+ dbt_adapters-1.13.0.dist-info/METADATA,sha256=4hzFlq4-PJk7V3niPFjiooCgn-z_z6fl0dDhxQmlsuE,2576
161
+ dbt_adapters-1.13.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
162
+ dbt_adapters-1.13.0.dist-info/licenses/LICENSE,sha256=9yjigiJhWcCZvQjdagGKDwrRph58QWc5P2bVSQwXo6s,11344
163
+ dbt_adapters-1.13.0.dist-info/RECORD,,