dbt-firebolt 1.8.2__tar.gz → 1.9.0__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
Files changed (67) hide show
  1. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/PKG-INFO +5 -2
  2. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/README.md +1 -1
  3. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/dbt/adapters/firebolt/__init__.py +1 -1
  4. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/dbt/adapters/firebolt/connections.py +0 -1
  5. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/dbt/adapters/firebolt/impl.py +36 -5
  6. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/dbt/include/firebolt/macros/dbt_external_tables/create_external_table.sql +7 -7
  7. dbt_firebolt-1.9.0/dbt/include/firebolt/macros/materializations/snapshot_merge.sql +19 -0
  8. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/dbt/include/firebolt/macros/relations/table/create.sql +6 -2
  9. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/dbt_firebolt.egg-info/PKG-INFO +5 -2
  10. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/dbt_firebolt.egg-info/SOURCES.txt +1 -0
  11. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/dbt_firebolt.egg-info/requires.txt +1 -1
  12. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/setup.cfg +5 -2
  13. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/LICENSE +0 -0
  14. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/MANIFEST.in +0 -0
  15. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/dbt/adapters/firebolt/__version__.py +0 -0
  16. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/dbt/adapters/firebolt/column.py +0 -0
  17. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/dbt/adapters/firebolt/relation.py +0 -0
  18. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/dbt/adapters/firebolt/relation_configs/__init__.py +0 -0
  19. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/dbt/include/firebolt/__init__.py +0 -0
  20. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/dbt/include/firebolt/dbt_project.yml +0 -0
  21. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/dbt/include/firebolt/macros/adapters/apply_grants.sql +0 -0
  22. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/dbt/include/firebolt/macros/adapters/relation.sql +0 -0
  23. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/dbt/include/firebolt/macros/adapters.sql +0 -0
  24. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/dbt/include/firebolt/macros/catalog.sql +0 -0
  25. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/dbt/include/firebolt/macros/dbt_external_tables/dropif.sql +0 -0
  26. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/dbt/include/firebolt/macros/dbt_external_tables/get_external_build_plan.sql +0 -0
  27. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/dbt/include/firebolt/macros/materializations/clone.sql +0 -0
  28. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/dbt/include/firebolt/macros/materializations/materialized_view.sql +0 -0
  29. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/dbt/include/firebolt/macros/materializations/models/incremental/column_helpers.sql +0 -0
  30. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/dbt/include/firebolt/macros/materializations/models/incremental/incremental.sql +0 -0
  31. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/dbt/include/firebolt/macros/materializations/models/incremental/is_incremental.sql +0 -0
  32. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/dbt/include/firebolt/macros/materializations/models/incremental/merge.sql +0 -0
  33. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/dbt/include/firebolt/macros/materializations/models/incremental/on_schema_change.sql +0 -0
  34. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/dbt/include/firebolt/macros/materializations/models/incremental/strategies.sql +0 -0
  35. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/dbt/include/firebolt/macros/materializations/seed.sql +0 -0
  36. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/dbt/include/firebolt/macros/materializations/table.sql +0 -0
  37. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/dbt/include/firebolt/macros/materializations/test.sql +0 -0
  38. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/dbt/include/firebolt/macros/materializations/view.sql +0 -0
  39. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/dbt/include/firebolt/macros/relations/materialized_view/alter.sql +0 -0
  40. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/dbt/include/firebolt/macros/relations/materialized_view/create.sql +0 -0
  41. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/dbt/include/firebolt/macros/relations/materialized_view/describe.sql +0 -0
  42. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/dbt/include/firebolt/macros/relations/materialized_view/drop.sql +0 -0
  43. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/dbt/include/firebolt/macros/relations/materialized_view/refresh.sql +0 -0
  44. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/dbt/include/firebolt/macros/relations/table/drop.sql +0 -0
  45. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/dbt/include/firebolt/macros/relations/table/rename.sql +0 -0
  46. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/dbt/include/firebolt/macros/relations/table/replace.sql +0 -0
  47. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/dbt/include/firebolt/macros/relations/view/create.sql +0 -0
  48. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/dbt/include/firebolt/macros/relations/view/drop.sql +0 -0
  49. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/dbt/include/firebolt/macros/relations/view/rename.sql +0 -0
  50. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/dbt/include/firebolt/macros/relations/view/replace.sql +0 -0
  51. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/dbt/include/firebolt/macros/utils/array_append.sql +0 -0
  52. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/dbt/include/firebolt/macros/utils/array_concat.sql +0 -0
  53. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/dbt/include/firebolt/macros/utils/array_construct.sql +0 -0
  54. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/dbt/include/firebolt/macros/utils/bool_or.sql +0 -0
  55. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/dbt/include/firebolt/macros/utils/cast_bool_to_text.sql +0 -0
  56. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/dbt/include/firebolt/macros/utils/dateadd.sql +0 -0
  57. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/dbt/include/firebolt/macros/utils/datediff.sql +0 -0
  58. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/dbt/include/firebolt/macros/utils/except.sql +0 -0
  59. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/dbt/include/firebolt/macros/utils/intersect.sql +0 -0
  60. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/dbt/include/firebolt/macros/utils/listagg.sql +0 -0
  61. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/dbt/include/firebolt/macros/utils/position.sql +0 -0
  62. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/dbt/include/firebolt/macros/utils/right.sql +0 -0
  63. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/dbt/include/firebolt/macros/utils/split_part.sql +0 -0
  64. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/dbt/include/firebolt/macros/utils/timestamps.sql +0 -0
  65. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/dbt_firebolt.egg-info/dependency_links.txt +0 -0
  66. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/dbt_firebolt.egg-info/top_level.txt +0 -0
  67. {dbt_firebolt-1.8.2 → dbt_firebolt-1.9.0}/pyproject.toml +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dbt_firebolt
3
- Version: 1.8.2
3
+ Version: 1.9.0
4
4
  Summary: The Firebolt adapter plugin for dbt (data build tool)
5
5
  Home-page: https://github.com/firebolt-db/dbt-firebolt
6
6
  Author: Firebolt
@@ -13,6 +13,9 @@ Classifier: Programming Language :: Python :: 3
13
13
  Classifier: Programming Language :: Python :: 3 :: Only
14
14
  Classifier: Programming Language :: Python :: 3.8
15
15
  Classifier: Programming Language :: Python :: 3.9
16
+ Classifier: Programming Language :: Python :: 3.10
17
+ Classifier: Programming Language :: Python :: 3.11
18
+ Classifier: Programming Language :: Python :: 3.12
16
19
  Requires-Python: >=3.8
17
20
  Description-Content-Type: text/markdown
18
21
  Provides-Extra: dev
@@ -66,7 +69,7 @@ The table below shows which dbt and Firebolt features are supported by the adapt
66
69
  | Incremental materializations - insert_overwrite | :white_check_mark: |
67
70
  | Incremental materializations - delete+insert | :white_check_mark: |
68
71
  | Incremental materializations - merge | :x: |
69
- | Snapshots | :x: |
72
+ | Snapshots | :white_check_mark: |
70
73
  | Seeds | :white_check_mark: |
71
74
  | Tests | :white_check_mark: |
72
75
  | Documentation | :white_check_mark: |
@@ -46,7 +46,7 @@ The table below shows which dbt and Firebolt features are supported by the adapt
46
46
  | Incremental materializations - insert_overwrite | :white_check_mark: |
47
47
  | Incremental materializations - delete+insert | :white_check_mark: |
48
48
  | Incremental materializations - merge | :x: |
49
- | Snapshots | :x: |
49
+ | Snapshots | :white_check_mark: |
50
50
  | Seeds | :white_check_mark: |
51
51
  | Tests | :white_check_mark: |
52
52
  | Documentation | :white_check_mark: |
@@ -7,7 +7,7 @@ from dbt.adapters.firebolt.connections import (
7
7
  from dbt.adapters.firebolt.impl import FireboltAdapter
8
8
  from dbt.include import firebolt
9
9
 
10
- __version__ = "1.8.2"
10
+ __version__ = "1.9.0"
11
11
 
12
12
  Plugin = AdapterPlugin(
13
13
  adapter=FireboltAdapter, # type: ignore
@@ -39,7 +39,6 @@ class FireboltCredentials(Credentials):
39
39
  client_id: Optional[str] = None
40
40
  client_secret: Optional[str] = None
41
41
  api_endpoint: Optional[str] = DEFAULT_API_URL
42
- driver: str = 'com.firebolt.FireboltDriver'
43
42
  engine_name: Optional[str] = None
44
43
  account_name: Optional[str] = None
45
44
  retries: int = 1
@@ -1,7 +1,6 @@
1
1
  import re
2
2
  import time
3
3
  from dataclasses import dataclass
4
- from datetime import datetime
5
4
  from typing import Any, List, Mapping, Optional, Union
6
5
 
7
6
  import agate
@@ -29,21 +28,45 @@ from dbt.adapters.firebolt.connections import FireboltConnectionManager
29
28
  from dbt.adapters.firebolt.relation import FireboltRelation
30
29
 
31
30
 
31
+ def quote_columns(columns: Union[str, List[str]]) -> Union[str, List[str]]:
32
+ if isinstance(columns, str):
33
+ return f'"{columns}"'
34
+ quoted_columns = []
35
+ for col in columns:
36
+ if col.startswith('"') and col.endswith('"'):
37
+ quoted_columns.append(col)
38
+ else:
39
+ quoted_columns.append(f'"{col}"')
40
+ return quoted_columns
41
+
42
+
32
43
  @dataclass
33
44
  class FireboltIndexConfig(dbtClassMixin):
34
45
  index_type: str
46
+ index_name: Optional[str] = None
35
47
  join_columns: Optional[Union[str, List[str]]] = None
36
48
  key_columns: Optional[Union[str, List[str]]] = None
37
49
  dimension_column: Optional[Union[str, List[str]]] = None
38
50
  aggregation: Optional[Union[str, List[str]]] = None
39
51
 
52
+ def __post_init__(self) -> None:
53
+ # quote unquoted columns
54
+ if self.join_columns:
55
+ self.join_columns = quote_columns(self.join_columns)
56
+ if self.key_columns:
57
+ self.key_columns = quote_columns(self.key_columns)
58
+ if self.dimension_column:
59
+ self.dimension_column = quote_columns(self.dimension_column)
60
+
40
61
  def render_name(self, relation: FireboltRelation) -> str:
41
62
  """
42
63
  Name an index according to the following format, joined by `_`:
43
64
  index type, relation name, key/join columns, timestamp (unix & UTC)
44
65
  example index name: join_my_model_customer_id_1633504263.
45
66
  """
46
- now_unix = str(int(time.mktime(datetime.utcnow().timetuple())))
67
+ if self.index_name:
68
+ return self.index_name
69
+ now_unix = str(int(time.time()))
47
70
  # If column_names is a list with > 1 members, join with _,
48
71
  # otherwise do not. We were getting index names like
49
72
  # join__idx__emf_customers__f_i_r_s_t___n_a_m_e__165093112.
@@ -51,14 +74,23 @@ class FireboltIndexConfig(dbtClassMixin):
51
74
  spine_col = (
52
75
  '_'.join(column_names) if isinstance(column_names, list) else column_names
53
76
  )
77
+ # Additional hash to ensure uniqueness after spaces are removed
78
+ column_hash = str(hash(spine_col))[:5]
54
79
  inputs = [
55
80
  f'{self.index_type}_idx',
56
81
  relation.identifier,
57
82
  spine_col,
83
+ column_hash,
58
84
  now_unix,
59
85
  ]
60
- string = '__'.join([x for x in inputs if x is not None])
61
- return string
86
+ index_name = '__'.join([x for x in inputs if x is not None])
87
+ if len(index_name) > 255:
88
+ # Firebolt index names must be <= 255 characters.
89
+ # If the index name is too long, hash it.
90
+ return f'{self.index_type}_idx_{hash(index_name)}'
91
+ # Remove any spaces or quotes from the index name.
92
+ index_name = index_name.replace(' ', '_').replace('"', '')
93
+ return index_name
62
94
 
63
95
  @classmethod
64
96
  def parse(cls, raw_index: Optional[Mapping]) -> Optional['FireboltIndexConfig']:
@@ -274,7 +306,6 @@ class FireboltAdapter(SQLAdapter):
274
306
  columns: the number of rows that are different between the two
275
307
  relations and the number of mismatched rows.
276
308
  """
277
- # This method only really exists for test reasons.
278
309
  names: List[str]
279
310
  if column_names is None:
280
311
  columns = self.get_columns_in_relation(relation_a)
@@ -68,8 +68,8 @@
68
68
  (
69
69
  {%- for column in columns -%}
70
70
  {{ column.name }}
71
- {%- if column.default is not none %} DEFAULT {{ column.default }}{% endif %}
72
- {%- if column.source_column_name is not none %} {{ '$' ~ loop.index0 }}{% endif %}
71
+ {%- if column.default %} DEFAULT {{ column.default }}{% endif %}
72
+ {%- if column.source_column_name %} {{ '$' ~ loop.index0 }}{% endif %}
73
73
  {{- ',' if not loop.last }}
74
74
  {%- endfor -%}
75
75
  )
@@ -83,10 +83,10 @@
83
83
  {%- if options.type %}
84
84
  TYPE = {{ options.type }}
85
85
  {%- endif %}
86
- {%- if options.auto_create is not none %}
86
+ {%- if options.auto_create %}
87
87
  AUTO_CREATE = {{ options.auto_create | upper }}
88
88
  {%- endif %}
89
- {%- if options.allow_column_mismatch is not none %}
89
+ {%- if options.allow_column_mismatch %}
90
90
  ALLOW_COLUMN_MISMATCH = {{ options.allow_column_mismatch | upper }}
91
91
  {%- endif %}
92
92
  {%- if options.error_file %}
@@ -99,7 +99,7 @@
99
99
  MAX_ERRORS_PER_FILE = {{ options.max_errors_per_file }}
100
100
  {%- endif %}
101
101
  {%- if csv_options %}
102
- {%- if csv_options.header is not none %}
102
+ {%- if csv_options.header %}
103
103
  HEADER = {{ csv_options.header | upper }}
104
104
  {%- endif %}
105
105
  {%- if csv_options.delimiter %}
@@ -117,10 +117,10 @@
117
117
  {%- if csv_options.null_string %}
118
118
  NULL_STRING = '{{ csv_options.null_string }}'
119
119
  {%- endif %}
120
- {%- if csv_options.empty_field_as_null is not none %}
120
+ {%- if csv_options.empty_field_as_null %}
121
121
  EMPTY_FIELD_AS_NULL = {{ csv_options.empty_field_as_null | upper }}
122
122
  {%- endif %}
123
- {%- if csv_options.skip_blank_lines is not none %}
123
+ {%- if csv_options.skip_blank_lines %}
124
124
  SKIP_BLANK_LINES = {{ csv_options.skip_blank_lines | upper }}
125
125
  {%- endif %}
126
126
  {%- if csv_options.date_format %}
@@ -0,0 +1,19 @@
1
+ {% macro firebolt__snapshot_merge_sql(target, source, insert_cols) -%}
2
+ {%- set insert_cols_csv = insert_cols | join(', ') -%}
3
+
4
+ UPDATE {{ target.render() }} AS DBT_INTERNAL_DEST
5
+ SET dbt_valid_to = DBT_INTERNAL_SOURCE.dbt_valid_to
6
+ FROM {{ source }} AS DBT_INTERNAL_SOURCE
7
+ WHERE DBT_INTERNAL_SOURCE.dbt_scd_id = DBT_INTERNAL_DEST.dbt_scd_id
8
+ AND DBT_INTERNAL_DEST.dbt_valid_to IS NULL
9
+ AND DBT_INTERNAL_SOURCE.dbt_change_type IN ('update', 'delete');
10
+
11
+ INSERT INTO {{ target.render() }} ({{ insert_cols_csv }})
12
+ SELECT {{ insert_cols_csv }}
13
+ FROM {{ source }} AS DBT_INTERNAL_SOURCE
14
+ WHERE DBT_INTERNAL_SOURCE.dbt_scd_id NOT IN (
15
+ SELECT dbt_scd_id FROM {{ target.render() }}
16
+ )
17
+ AND DBT_INTERNAL_SOURCE.dbt_change_type = 'insert';
18
+
19
+ {% endmacro %}
@@ -24,6 +24,10 @@
24
24
  ) }}
25
25
  {%- endif -%}
26
26
 
27
+ {%- if temporary -%}
28
+ {%- do adapter.drop_relation(relation) -%}
29
+ {%- endif -%}
30
+
27
31
  {%- set table_type = config.get(
28
32
  'table_type',
29
33
  default = 'dimension'
@@ -49,9 +53,9 @@
49
53
 
50
54
  {%- if primary_index %}
51
55
  primary INDEX {% if primary_index is iterable and primary_index is not string %}
52
- {{ primary_index | join(', ') }}
56
+ "{{ primary_index | join('", "') }}"
53
57
  {%- else -%}
54
- {{ primary_index }}
58
+ "{{ primary_index }}"
55
59
  {%- endif -%}
56
60
  {%- endif -%}
57
61
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dbt-firebolt
3
- Version: 1.8.2
3
+ Version: 1.9.0
4
4
  Summary: The Firebolt adapter plugin for dbt (data build tool)
5
5
  Home-page: https://github.com/firebolt-db/dbt-firebolt
6
6
  Author: Firebolt
@@ -13,6 +13,9 @@ Classifier: Programming Language :: Python :: 3
13
13
  Classifier: Programming Language :: Python :: 3 :: Only
14
14
  Classifier: Programming Language :: Python :: 3.8
15
15
  Classifier: Programming Language :: Python :: 3.9
16
+ Classifier: Programming Language :: Python :: 3.10
17
+ Classifier: Programming Language :: Python :: 3.11
18
+ Classifier: Programming Language :: Python :: 3.12
16
19
  Requires-Python: >=3.8
17
20
  Description-Content-Type: text/markdown
18
21
  Provides-Extra: dev
@@ -66,7 +69,7 @@ The table below shows which dbt and Firebolt features are supported by the adapt
66
69
  | Incremental materializations - insert_overwrite | :white_check_mark: |
67
70
  | Incremental materializations - delete+insert | :white_check_mark: |
68
71
  | Incremental materializations - merge | :x: |
69
- | Snapshots | :x: |
72
+ | Snapshots | :white_check_mark: |
70
73
  | Seeds | :white_check_mark: |
71
74
  | Tests | :white_check_mark: |
72
75
  | Documentation | :white_check_mark: |
@@ -22,6 +22,7 @@ setup.cfg
22
22
  ./dbt/include/firebolt/macros/materializations/clone.sql
23
23
  ./dbt/include/firebolt/macros/materializations/materialized_view.sql
24
24
  ./dbt/include/firebolt/macros/materializations/seed.sql
25
+ ./dbt/include/firebolt/macros/materializations/snapshot_merge.sql
25
26
  ./dbt/include/firebolt/macros/materializations/table.sql
26
27
  ./dbt/include/firebolt/macros/materializations/test.sql
27
28
  ./dbt/include/firebolt/macros/materializations/view.sql
@@ -7,5 +7,5 @@ pydantic>=0.23
7
7
  allure-pytest==2.*
8
8
  dbt-tests-adapter~=1.6
9
9
  mypy==1.4.1
10
- pre-commit==2.15.0
10
+ pre-commit==3.5.0
11
11
  pytest==7.*
@@ -8,7 +8,7 @@ url = https://github.com/firebolt-db/dbt-firebolt
8
8
  author = Firebolt
9
9
  author_email = support@firebolt.io
10
10
  license = Apache-2.0
11
- license_file = LICENSE
11
+ license_files = LICENSE
12
12
  classifiers =
13
13
  License :: OSI Approved :: Apache Software License
14
14
  Operating System :: OS Independent
@@ -16,6 +16,9 @@ classifiers =
16
16
  Programming Language :: Python :: 3 :: Only
17
17
  Programming Language :: Python :: 3.8
18
18
  Programming Language :: Python :: 3.9
19
+ Programming Language :: Python :: 3.10
20
+ Programming Language :: Python :: 3.11
21
+ Programming Language :: Python :: 3.12
19
22
  project_urls =
20
23
  Bug Tracker = https://github.com/firebolt-db/dbt-firebolt/issues
21
24
 
@@ -40,7 +43,7 @@ dev =
40
43
  allure-pytest==2.*
41
44
  dbt-tests-adapter~=1.6
42
45
  mypy==1.4.1
43
- pre-commit==2.15.0
46
+ pre-commit==3.5.0
44
47
  pytest==7.*
45
48
 
46
49
  [black]
File without changes
File without changes