dagster-duckdb 0.20.3__tar.gz → 0.28.6__tar.gz
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.
- {dagster-duckdb-0.20.3 → dagster_duckdb-0.28.6}/LICENSE +1 -1
- dagster_duckdb-0.28.6/PKG-INFO +29 -0
- dagster_duckdb-0.28.6/README.md +4 -0
- dagster_duckdb-0.28.6/dagster_duckdb/__init__.py +10 -0
- {dagster-duckdb-0.20.3 → dagster_duckdb-0.28.6}/dagster_duckdb/io_manager.py +121 -33
- {dagster-duckdb-0.20.3 → dagster_duckdb-0.28.6}/dagster_duckdb/resource.py +25 -2
- dagster_duckdb-0.28.6/dagster_duckdb/version.py +1 -0
- dagster_duckdb-0.28.6/dagster_duckdb.egg-info/PKG-INFO +29 -0
- dagster_duckdb-0.28.6/dagster_duckdb.egg-info/requires.txt +8 -0
- {dagster-duckdb-0.20.3 → dagster_duckdb-0.28.6}/setup.py +8 -12
- dagster-duckdb-0.20.3/PKG-INFO +0 -16
- dagster-duckdb-0.20.3/README.md +0 -4
- dagster-duckdb-0.20.3/dagster_duckdb/__init__.py +0 -10
- dagster-duckdb-0.20.3/dagster_duckdb/version.py +0 -1
- dagster-duckdb-0.20.3/dagster_duckdb.egg-info/PKG-INFO +0 -16
- dagster-duckdb-0.20.3/dagster_duckdb.egg-info/requires.txt +0 -13
- {dagster-duckdb-0.20.3 → dagster_duckdb-0.28.6}/MANIFEST.in +0 -0
- {dagster-duckdb-0.20.3 → dagster_duckdb-0.28.6}/dagster_duckdb/py.typed +0 -0
- {dagster-duckdb-0.20.3 → dagster_duckdb-0.28.6}/dagster_duckdb.egg-info/SOURCES.txt +0 -0
- {dagster-duckdb-0.20.3 → dagster_duckdb-0.28.6}/dagster_duckdb.egg-info/dependency_links.txt +0 -0
- {dagster-duckdb-0.20.3 → dagster_duckdb-0.28.6}/dagster_duckdb.egg-info/not-zip-safe +0 -0
- {dagster-duckdb-0.20.3 → dagster_duckdb-0.28.6}/dagster_duckdb.egg-info/top_level.txt +0 -0
- {dagster-duckdb-0.20.3 → dagster_duckdb-0.28.6}/setup.cfg +0 -0
|
@@ -186,7 +186,7 @@
|
|
|
186
186
|
same "printed page" as the copyright notice for easier
|
|
187
187
|
identification within third-party archives.
|
|
188
188
|
|
|
189
|
-
Copyright
|
|
189
|
+
Copyright 2025 Dagster Labs, Inc.
|
|
190
190
|
|
|
191
191
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
192
192
|
you may not use this file except in compliance with the License.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: dagster-duckdb
|
|
3
|
+
Version: 0.28.6
|
|
4
|
+
Summary: Package for DuckDB-specific Dagster framework op and resource components.
|
|
5
|
+
Home-page: https://github.com/dagster-io/dagster/tree/master/python_modules/libraries/dagster-duckb
|
|
6
|
+
Author: Dagster Labs
|
|
7
|
+
Author-email: hello@dagsterlabs.com
|
|
8
|
+
License: Apache-2.0
|
|
9
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
10
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
|
11
|
+
Classifier: Operating System :: OS Independent
|
|
12
|
+
Requires-Python: >=3.10,<3.14
|
|
13
|
+
License-File: LICENSE
|
|
14
|
+
Requires-Dist: duckdb
|
|
15
|
+
Requires-Dist: dagster==1.12.6
|
|
16
|
+
Provides-Extra: pandas
|
|
17
|
+
Requires-Dist: pandas; extra == "pandas"
|
|
18
|
+
Provides-Extra: pyspark
|
|
19
|
+
Requires-Dist: pyspark<4,>=3; extra == "pyspark"
|
|
20
|
+
Dynamic: author
|
|
21
|
+
Dynamic: author-email
|
|
22
|
+
Dynamic: classifier
|
|
23
|
+
Dynamic: home-page
|
|
24
|
+
Dynamic: license
|
|
25
|
+
Dynamic: license-file
|
|
26
|
+
Dynamic: provides-extra
|
|
27
|
+
Dynamic: requires-dist
|
|
28
|
+
Dynamic: requires-python
|
|
29
|
+
Dynamic: summary
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
from dagster_shared.libraries import DagsterLibraryRegistry
|
|
2
|
+
|
|
3
|
+
from dagster_duckdb.io_manager import (
|
|
4
|
+
DuckDBIOManager as DuckDBIOManager,
|
|
5
|
+
build_duckdb_io_manager as build_duckdb_io_manager,
|
|
6
|
+
)
|
|
7
|
+
from dagster_duckdb.resource import DuckDBResource as DuckDBResource
|
|
8
|
+
from dagster_duckdb.version import __version__
|
|
9
|
+
|
|
10
|
+
DagsterLibraryRegistry.register("dagster-duckdb", __version__)
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
from abc import abstractmethod
|
|
2
|
+
from collections.abc import Sequence
|
|
2
3
|
from contextlib import contextmanager
|
|
3
|
-
from typing import
|
|
4
|
+
from typing import Any, Optional, cast
|
|
4
5
|
|
|
5
6
|
import duckdb
|
|
6
7
|
from dagster import IOManagerDefinition, OutputContext, io_manager
|
|
7
|
-
from dagster._config.pythonic_config import
|
|
8
|
-
|
|
9
|
-
)
|
|
10
|
-
from dagster._core.definitions.time_window_partitions import TimeWindow
|
|
8
|
+
from dagster._config.pythonic_config import ConfigurableIOManagerFactory
|
|
9
|
+
from dagster._core.definitions.partitions.utils import TimeWindow
|
|
11
10
|
from dagster._core.storage.db_io_manager import (
|
|
12
11
|
DbClient,
|
|
13
12
|
DbIOManager,
|
|
@@ -17,20 +16,21 @@ from dagster._core.storage.db_io_manager import (
|
|
|
17
16
|
)
|
|
18
17
|
from dagster._core.storage.io_manager import dagster_maintained_io_manager
|
|
19
18
|
from dagster._utils.backoff import backoff
|
|
19
|
+
from packaging.version import Version
|
|
20
20
|
from pydantic import Field
|
|
21
21
|
|
|
22
22
|
DUCKDB_DATETIME_FORMAT = "%Y-%m-%d %H:%M:%S"
|
|
23
23
|
|
|
24
24
|
|
|
25
25
|
def build_duckdb_io_manager(
|
|
26
|
-
type_handlers: Sequence[DbTypeHandler], default_load_type: Optional[
|
|
26
|
+
type_handlers: Sequence[DbTypeHandler], default_load_type: Optional[type] = None
|
|
27
27
|
) -> IOManagerDefinition:
|
|
28
28
|
"""Builds an IO manager definition that reads inputs from and writes outputs to DuckDB.
|
|
29
29
|
|
|
30
30
|
Args:
|
|
31
31
|
type_handlers (Sequence[DbTypeHandler]): Each handler defines how to translate between
|
|
32
32
|
DuckDB tables and an in-memory type - e.g. a Pandas DataFrame. If only
|
|
33
|
-
one DbTypeHandler is provided, it will be used as
|
|
33
|
+
one DbTypeHandler is provided, it will be used as the default_load_type.
|
|
34
34
|
default_load_type (Type): When an input has no type annotation, load it as this type.
|
|
35
35
|
|
|
36
36
|
Returns:
|
|
@@ -50,17 +50,43 @@ def build_duckdb_io_manager(
|
|
|
50
50
|
|
|
51
51
|
duckdb_io_manager = build_duckdb_io_manager([DuckDBPandasTypeHandler()])
|
|
52
52
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
53
|
+
Definitions(
|
|
54
|
+
assets=[my_table]
|
|
55
|
+
resources={"io_manager" duckdb_io_manager.configured({"database": "my_db.duckdb"})}
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
You can set a default schema to store the assets using the ``schema`` configuration value of the DuckDB I/O
|
|
59
|
+
Manager. This schema will be used if no other schema is specified directly on an asset or op.
|
|
60
|
+
|
|
61
|
+
.. code-block:: python
|
|
62
|
+
|
|
63
|
+
Definitions(
|
|
64
|
+
assets=[my_table]
|
|
65
|
+
resources={"io_manager" duckdb_io_manager.configured(
|
|
66
|
+
{"database": "my_db.duckdb", "schema": "my_schema"} # will be used as the schema
|
|
67
|
+
)}
|
|
68
|
+
)
|
|
69
|
+
|
|
59
70
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
71
|
+
On individual assets, you an also specify the schema where they should be stored using metadata or
|
|
72
|
+
by adding a ``key_prefix`` to the asset key. If both ``key_prefix`` and metadata are defined, the metadata will
|
|
73
|
+
take precedence.
|
|
74
|
+
|
|
75
|
+
.. code-block:: python
|
|
76
|
+
|
|
77
|
+
@asset(
|
|
78
|
+
key_prefix=["my_schema"] # will be used as the schema in duckdb
|
|
79
|
+
)
|
|
80
|
+
def my_table() -> pd.DataFrame:
|
|
81
|
+
...
|
|
82
|
+
|
|
83
|
+
@asset(
|
|
84
|
+
metadata={"schema": "my_schema"} # will be used as the schema in duckdb
|
|
85
|
+
)
|
|
86
|
+
def my_other_table() -> pd.DataFrame:
|
|
87
|
+
...
|
|
88
|
+
|
|
89
|
+
For ops, the schema can be specified by including a "schema" entry in output metadata.
|
|
64
90
|
|
|
65
91
|
.. code-block:: python
|
|
66
92
|
|
|
@@ -70,6 +96,8 @@ def build_duckdb_io_manager(
|
|
|
70
96
|
def make_my_table() -> pd.DataFrame:
|
|
71
97
|
...
|
|
72
98
|
|
|
99
|
+
If none of these is provided, the schema will default to "public".
|
|
100
|
+
|
|
73
101
|
To only use specific columns of a table as input to a downstream op or asset, add the metadata "columns" to the
|
|
74
102
|
In or AssetIn.
|
|
75
103
|
|
|
@@ -126,15 +154,40 @@ class DuckDBIOManager(ConfigurableIOManagerFactory):
|
|
|
126
154
|
def my_table() -> pd.DataFrame: # the name of the asset will be the table name
|
|
127
155
|
...
|
|
128
156
|
|
|
129
|
-
|
|
157
|
+
Definitions(
|
|
130
158
|
assets=[my_table],
|
|
131
159
|
resources={"io_manager": MyDuckDBIOManager(database="my_db.duckdb")}
|
|
132
160
|
)
|
|
133
161
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
162
|
+
You can set a default schema to store the assets using the ``schema`` configuration value of the DuckDB I/O
|
|
163
|
+
Manager. This schema will be used if no other schema is specified directly on an asset or op.
|
|
164
|
+
|
|
165
|
+
.. code-block:: python
|
|
166
|
+
|
|
167
|
+
Definitions(
|
|
168
|
+
assets=[my_table],
|
|
169
|
+
resources={"io_manager": MyDuckDBIOManager(database="my_db.duckdb", schema="my_schema")}
|
|
170
|
+
)
|
|
171
|
+
|
|
172
|
+
On individual assets, you an also specify the schema where they should be stored using metadata or
|
|
173
|
+
by adding a ``key_prefix`` to the asset key. If both ``key_prefix`` and metadata are defined, the metadata will
|
|
174
|
+
take precedence.
|
|
175
|
+
|
|
176
|
+
.. code-block:: python
|
|
177
|
+
|
|
178
|
+
@asset(
|
|
179
|
+
key_prefix=["my_schema"] # will be used as the schema in duckdb
|
|
180
|
+
)
|
|
181
|
+
def my_table() -> pd.DataFrame:
|
|
182
|
+
...
|
|
183
|
+
|
|
184
|
+
@asset(
|
|
185
|
+
metadata={"schema": "my_schema"} # will be used as the schema in duckdb
|
|
186
|
+
)
|
|
187
|
+
def my_other_table() -> pd.DataFrame:
|
|
188
|
+
...
|
|
189
|
+
|
|
190
|
+
For ops, the schema can be specified by including a "schema" entry in output metadata.
|
|
138
191
|
|
|
139
192
|
.. code-block:: python
|
|
140
193
|
|
|
@@ -144,6 +197,8 @@ class DuckDBIOManager(ConfigurableIOManagerFactory):
|
|
|
144
197
|
def make_my_table() -> pd.DataFrame:
|
|
145
198
|
...
|
|
146
199
|
|
|
200
|
+
If none of these is provided, the schema will default to "public".
|
|
201
|
+
|
|
147
202
|
To only use specific columns of a table as input to a downstream op or asset, add the metadata "columns" to the
|
|
148
203
|
In or AssetIn.
|
|
149
204
|
|
|
@@ -156,20 +211,37 @@ class DuckDBIOManager(ConfigurableIOManagerFactory):
|
|
|
156
211
|
# my_table will just contain the data from column "a"
|
|
157
212
|
...
|
|
158
213
|
|
|
214
|
+
Set DuckDB configuration options using the connection_config field. See
|
|
215
|
+
https://duckdb.org/docs/sql/configuration.html for all available settings.
|
|
216
|
+
|
|
217
|
+
.. code-block:: python
|
|
218
|
+
|
|
219
|
+
Definitions(
|
|
220
|
+
assets=[my_table],
|
|
221
|
+
resources={"io_manager": MyDuckDBIOManager(database="my_db.duckdb",
|
|
222
|
+
connection_config={"arrow_large_buffer_size": True})}
|
|
223
|
+
)
|
|
224
|
+
|
|
159
225
|
"""
|
|
160
226
|
|
|
161
227
|
database: str = Field(description="Path to the DuckDB database.")
|
|
228
|
+
connection_config: dict[str, Any] = Field(
|
|
229
|
+
description=(
|
|
230
|
+
"DuckDB connection configuration options. See"
|
|
231
|
+
" https://duckdb.org/docs/sql/configuration.html"
|
|
232
|
+
),
|
|
233
|
+
default={},
|
|
234
|
+
)
|
|
162
235
|
schema_: Optional[str] = Field(
|
|
163
236
|
default=None, alias="schema", description="Name of the schema to use."
|
|
164
237
|
) # schema is a reserved word for pydantic
|
|
165
238
|
|
|
166
239
|
@staticmethod
|
|
167
240
|
@abstractmethod
|
|
168
|
-
def type_handlers() -> Sequence[DbTypeHandler]:
|
|
169
|
-
...
|
|
241
|
+
def type_handlers() -> Sequence[DbTypeHandler]: ...
|
|
170
242
|
|
|
171
243
|
@staticmethod
|
|
172
|
-
def default_load_type() -> Optional[
|
|
244
|
+
def default_load_type() -> Optional[type]:
|
|
173
245
|
return None
|
|
174
246
|
|
|
175
247
|
def create_io_manager(self, context) -> DbIOManager:
|
|
@@ -200,7 +272,7 @@ class DuckDbClient(DbClient):
|
|
|
200
272
|
def get_select_statement(table_slice: TableSlice) -> str:
|
|
201
273
|
col_str = ", ".join(table_slice.columns) if table_slice.columns else "*"
|
|
202
274
|
|
|
203
|
-
if table_slice.partition_dimensions
|
|
275
|
+
if table_slice.partition_dimensions:
|
|
204
276
|
query = f"SELECT {col_str} FROM {table_slice.schema}.{table_slice.table} WHERE\n"
|
|
205
277
|
return query + _partition_where_clause(table_slice.partition_dimensions)
|
|
206
278
|
else:
|
|
@@ -208,11 +280,25 @@ class DuckDbClient(DbClient):
|
|
|
208
280
|
|
|
209
281
|
@staticmethod
|
|
210
282
|
@contextmanager
|
|
211
|
-
def connect(context, _):
|
|
283
|
+
def connect(context, _): # pyright: ignore[reportIncompatibleMethodOverride]
|
|
284
|
+
config = context.resource_config["connection_config"]
|
|
285
|
+
|
|
286
|
+
# support for `custom_user_agent` was added in v1.0.0
|
|
287
|
+
# https://github.com/duckdb/duckdb/commit/0c66b6007b736ed2197bca54d20c9ad9a5eeef46
|
|
288
|
+
if Version(duckdb.__version__) >= Version("1.0.0"):
|
|
289
|
+
config = {
|
|
290
|
+
"custom_user_agent": "dagster",
|
|
291
|
+
**config,
|
|
292
|
+
}
|
|
293
|
+
|
|
212
294
|
conn = backoff(
|
|
213
295
|
fn=duckdb.connect,
|
|
214
296
|
retry_on=(RuntimeError, duckdb.IOException),
|
|
215
|
-
kwargs={
|
|
297
|
+
kwargs={
|
|
298
|
+
"database": context.resource_config["database"],
|
|
299
|
+
"read_only": False,
|
|
300
|
+
"config": config,
|
|
301
|
+
},
|
|
216
302
|
max_retries=10,
|
|
217
303
|
)
|
|
218
304
|
|
|
@@ -225,7 +311,7 @@ def _get_cleanup_statement(table_slice: TableSlice) -> str:
|
|
|
225
311
|
"""Returns a SQL statement that deletes data in the given table to make way for the output data
|
|
226
312
|
being written.
|
|
227
313
|
"""
|
|
228
|
-
if table_slice.partition_dimensions
|
|
314
|
+
if table_slice.partition_dimensions:
|
|
229
315
|
query = f"DELETE FROM {table_slice.schema}.{table_slice.table} WHERE\n"
|
|
230
316
|
return query + _partition_where_clause(table_slice.partition_dimensions)
|
|
231
317
|
else:
|
|
@@ -234,15 +320,17 @@ def _get_cleanup_statement(table_slice: TableSlice) -> str:
|
|
|
234
320
|
|
|
235
321
|
def _partition_where_clause(partition_dimensions: Sequence[TablePartitionDimension]) -> str:
|
|
236
322
|
return " AND\n".join(
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
323
|
+
(
|
|
324
|
+
_time_window_where_clause(partition_dimension)
|
|
325
|
+
if isinstance(partition_dimension.partitions, TimeWindow)
|
|
326
|
+
else _static_where_clause(partition_dimension)
|
|
327
|
+
)
|
|
240
328
|
for partition_dimension in partition_dimensions
|
|
241
329
|
)
|
|
242
330
|
|
|
243
331
|
|
|
244
332
|
def _time_window_where_clause(table_partition: TablePartitionDimension) -> str:
|
|
245
|
-
partition = cast(TimeWindow, table_partition.partitions)
|
|
333
|
+
partition = cast("TimeWindow", table_partition.partitions)
|
|
246
334
|
start_dt, end_dt = partition
|
|
247
335
|
start_dt_str = start_dt.strftime(DUCKDB_DATETIME_FORMAT)
|
|
248
336
|
end_dt_str = end_dt.strftime(DUCKDB_DATETIME_FORMAT)
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
from contextlib import contextmanager
|
|
2
|
+
from typing import Any
|
|
2
3
|
|
|
3
4
|
import duckdb
|
|
4
5
|
from dagster import ConfigurableResource
|
|
5
6
|
from dagster._utils.backoff import backoff
|
|
7
|
+
from packaging.version import Version
|
|
6
8
|
from pydantic import Field
|
|
7
9
|
|
|
8
10
|
|
|
@@ -20,7 +22,7 @@ class DuckDBResource(ConfigurableResource):
|
|
|
20
22
|
with duckdb.get_connection() as conn:
|
|
21
23
|
conn.execute("SELECT * from MY_SCHEMA.MY_TABLE")
|
|
22
24
|
|
|
23
|
-
|
|
25
|
+
Definitions(
|
|
24
26
|
assets=[my_table],
|
|
25
27
|
resources={"duckdb": DuckDBResource(database="path/to/db.duckdb")}
|
|
26
28
|
)
|
|
@@ -33,6 +35,13 @@ class DuckDBResource(ConfigurableResource):
|
|
|
33
35
|
" database "
|
|
34
36
|
)
|
|
35
37
|
)
|
|
38
|
+
connection_config: dict[str, Any] = Field(
|
|
39
|
+
description=(
|
|
40
|
+
"DuckDB connection configuration options. See"
|
|
41
|
+
" https://duckdb.org/docs/sql/configuration.html"
|
|
42
|
+
),
|
|
43
|
+
default={},
|
|
44
|
+
)
|
|
36
45
|
|
|
37
46
|
@classmethod
|
|
38
47
|
def _is_dagster_maintained(cls) -> bool:
|
|
@@ -40,10 +49,24 @@ class DuckDBResource(ConfigurableResource):
|
|
|
40
49
|
|
|
41
50
|
@contextmanager
|
|
42
51
|
def get_connection(self):
|
|
52
|
+
config = self.connection_config
|
|
53
|
+
|
|
54
|
+
# support for `custom_user_agent` was added in v1.0.0
|
|
55
|
+
# https://github.com/duckdb/duckdb/commit/0c66b6007b736ed2197bca54d20c9ad9a5eeef46
|
|
56
|
+
if Version(duckdb.__version__) >= Version("1.0.0"):
|
|
57
|
+
config = {
|
|
58
|
+
"custom_user_agent": "dagster",
|
|
59
|
+
**config,
|
|
60
|
+
}
|
|
61
|
+
|
|
43
62
|
conn = backoff(
|
|
44
63
|
fn=duckdb.connect,
|
|
45
64
|
retry_on=(RuntimeError, duckdb.IOException),
|
|
46
|
-
kwargs={
|
|
65
|
+
kwargs={
|
|
66
|
+
"database": self.database,
|
|
67
|
+
"read_only": False,
|
|
68
|
+
"config": config,
|
|
69
|
+
},
|
|
47
70
|
max_retries=10,
|
|
48
71
|
)
|
|
49
72
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.28.6"
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: dagster-duckdb
|
|
3
|
+
Version: 0.28.6
|
|
4
|
+
Summary: Package for DuckDB-specific Dagster framework op and resource components.
|
|
5
|
+
Home-page: https://github.com/dagster-io/dagster/tree/master/python_modules/libraries/dagster-duckb
|
|
6
|
+
Author: Dagster Labs
|
|
7
|
+
Author-email: hello@dagsterlabs.com
|
|
8
|
+
License: Apache-2.0
|
|
9
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
10
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
|
11
|
+
Classifier: Operating System :: OS Independent
|
|
12
|
+
Requires-Python: >=3.10,<3.14
|
|
13
|
+
License-File: LICENSE
|
|
14
|
+
Requires-Dist: duckdb
|
|
15
|
+
Requires-Dist: dagster==1.12.6
|
|
16
|
+
Provides-Extra: pandas
|
|
17
|
+
Requires-Dist: pandas; extra == "pandas"
|
|
18
|
+
Provides-Extra: pyspark
|
|
19
|
+
Requires-Dist: pyspark<4,>=3; extra == "pyspark"
|
|
20
|
+
Dynamic: author
|
|
21
|
+
Dynamic: author-email
|
|
22
|
+
Dynamic: classifier
|
|
23
|
+
Dynamic: home-page
|
|
24
|
+
Dynamic: license
|
|
25
|
+
Dynamic: license-file
|
|
26
|
+
Dynamic: provides-extra
|
|
27
|
+
Dynamic: requires-dist
|
|
28
|
+
Dynamic: requires-python
|
|
29
|
+
Dynamic: summary
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
from pathlib import Path
|
|
2
|
-
from typing import Dict
|
|
3
2
|
|
|
4
3
|
from setuptools import find_packages, setup
|
|
5
4
|
|
|
6
5
|
|
|
7
6
|
def get_version() -> str:
|
|
8
|
-
version:
|
|
7
|
+
version: dict[str, str] = {}
|
|
9
8
|
with open(Path(__file__).parent / "dagster_duckdb/version.py", encoding="utf8") as fp:
|
|
10
9
|
exec(fp.read(), version)
|
|
11
10
|
|
|
@@ -18,31 +17,28 @@ pin = "" if ver == "1!0+dev" else f"=={ver}"
|
|
|
18
17
|
setup(
|
|
19
18
|
name="dagster-duckdb",
|
|
20
19
|
version=ver,
|
|
21
|
-
author="
|
|
22
|
-
author_email="hello@
|
|
20
|
+
author="Dagster Labs",
|
|
21
|
+
author_email="hello@dagsterlabs.com",
|
|
23
22
|
license="Apache-2.0",
|
|
24
23
|
description="Package for DuckDB-specific Dagster framework op and resource components.",
|
|
25
24
|
url="https://github.com/dagster-io/dagster/tree/master/python_modules/libraries/dagster-duckb",
|
|
26
25
|
classifiers=[
|
|
27
|
-
"Programming Language :: Python :: 3.8",
|
|
28
|
-
"Programming Language :: Python :: 3.9",
|
|
29
26
|
"Programming Language :: Python :: 3.10",
|
|
30
27
|
"License :: OSI Approved :: Apache Software License",
|
|
31
28
|
"Operating System :: OS Independent",
|
|
32
29
|
],
|
|
33
30
|
packages=find_packages(exclude=["dagster_duckdb_tests*"]),
|
|
34
31
|
include_package_data=True,
|
|
32
|
+
python_requires=">=3.10,<3.14",
|
|
35
33
|
install_requires=[
|
|
36
34
|
"duckdb",
|
|
37
|
-
"dagster==1.
|
|
35
|
+
"dagster==1.12.6",
|
|
38
36
|
],
|
|
39
37
|
extras_require={
|
|
40
|
-
"pandas": [
|
|
41
|
-
|
|
42
|
-
"pyspark": [
|
|
43
|
-
'pyspark>=3.0.0; python_version >= "3.8"',
|
|
44
|
-
'pyspark>=2.0.2; python_version < "3.8"',
|
|
38
|
+
"pandas": [
|
|
39
|
+
"pandas",
|
|
45
40
|
],
|
|
41
|
+
"pyspark": ["pyspark>=3,<4"],
|
|
46
42
|
},
|
|
47
43
|
zip_safe=False,
|
|
48
44
|
)
|
dagster-duckdb-0.20.3/PKG-INFO
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.1
|
|
2
|
-
Name: dagster-duckdb
|
|
3
|
-
Version: 0.20.3
|
|
4
|
-
Summary: Package for DuckDB-specific Dagster framework op and resource components.
|
|
5
|
-
Home-page: https://github.com/dagster-io/dagster/tree/master/python_modules/libraries/dagster-duckb
|
|
6
|
-
Author: Elementl
|
|
7
|
-
Author-email: hello@elementl.com
|
|
8
|
-
License: Apache-2.0
|
|
9
|
-
Classifier: Programming Language :: Python :: 3.8
|
|
10
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
11
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
12
|
-
Classifier: License :: OSI Approved :: Apache Software License
|
|
13
|
-
Classifier: Operating System :: OS Independent
|
|
14
|
-
Provides-Extra: pandas
|
|
15
|
-
Provides-Extra: pyspark
|
|
16
|
-
License-File: LICENSE
|
dagster-duckdb-0.20.3/README.md
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
from dagster._core.libraries import DagsterLibraryRegistry
|
|
2
|
-
|
|
3
|
-
from .io_manager import (
|
|
4
|
-
DuckDBIOManager as DuckDBIOManager,
|
|
5
|
-
build_duckdb_io_manager as build_duckdb_io_manager,
|
|
6
|
-
)
|
|
7
|
-
from .resource import DuckDBResource as DuckDBResource
|
|
8
|
-
from .version import __version__
|
|
9
|
-
|
|
10
|
-
DagsterLibraryRegistry.register("dagster-duckdb", __version__)
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "0.20.3"
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.1
|
|
2
|
-
Name: dagster-duckdb
|
|
3
|
-
Version: 0.20.3
|
|
4
|
-
Summary: Package for DuckDB-specific Dagster framework op and resource components.
|
|
5
|
-
Home-page: https://github.com/dagster-io/dagster/tree/master/python_modules/libraries/dagster-duckb
|
|
6
|
-
Author: Elementl
|
|
7
|
-
Author-email: hello@elementl.com
|
|
8
|
-
License: Apache-2.0
|
|
9
|
-
Classifier: Programming Language :: Python :: 3.8
|
|
10
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
11
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
12
|
-
Classifier: License :: OSI Approved :: Apache Software License
|
|
13
|
-
Classifier: Operating System :: OS Independent
|
|
14
|
-
Provides-Extra: pandas
|
|
15
|
-
Provides-Extra: pyspark
|
|
16
|
-
License-File: LICENSE
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dagster-duckdb-0.20.3 → dagster_duckdb-0.28.6}/dagster_duckdb.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|