dlthub 0.18.0a0__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.
- dlthub-0.18.0a0/.gitignore +205 -0
- dlthub-0.18.0a0/LICENSE.md +10 -0
- dlthub-0.18.0a0/PKG-INFO +98 -0
- dlthub-0.18.0a0/README.md +40 -0
- dlthub-0.18.0a0/dlthub/__init__.py +29 -0
- dlthub-0.18.0a0/dlthub/__plugin__.py +145 -0
- dlthub-0.18.0a0/dlthub/_runner/__init__.py +9 -0
- dlthub-0.18.0a0/dlthub/_runner/exceptions.py +6 -0
- dlthub-0.18.0a0/dlthub/_runner/pipeline_runner.py +488 -0
- dlthub-0.18.0a0/dlthub/_runner/plus_log_collector.py +155 -0
- dlthub-0.18.0a0/dlthub/_runner/prefect_collector.py +735 -0
- dlthub-0.18.0a0/dlthub/_runner/prefect_helpers.py +390 -0
- dlthub-0.18.0a0/dlthub/_runner/trace.schema.yaml +859 -0
- dlthub-0.18.0a0/dlthub/_runner/trace_helpers.py +90 -0
- dlthub-0.18.0a0/dlthub/_runner/trace_resource.py +175 -0
- dlthub-0.18.0a0/dlthub/_runner/typing.py +22 -0
- dlthub-0.18.0a0/dlthub/_runner/utils.py +117 -0
- dlthub-0.18.0a0/dlthub/cache/__init__.py +1 -0
- dlthub-0.18.0a0/dlthub/cache/cache.py +337 -0
- dlthub-0.18.0a0/dlthub/cache/cli.py +93 -0
- dlthub-0.18.0a0/dlthub/cache/config.py +52 -0
- dlthub-0.18.0a0/dlthub/common/__init__.py +0 -0
- dlthub-0.18.0a0/dlthub/common/cli.py +34 -0
- dlthub-0.18.0a0/dlthub/common/configuration/__init__.py +0 -0
- dlthub-0.18.0a0/dlthub/common/constants.py +17 -0
- dlthub-0.18.0a0/dlthub/common/exceptions.py +5 -0
- dlthub-0.18.0a0/dlthub/common/license/__init__.py +14 -0
- dlthub-0.18.0a0/dlthub/common/license/cli.py +265 -0
- dlthub-0.18.0a0/dlthub/common/license/decorators.py +73 -0
- dlthub-0.18.0a0/dlthub/common/license/exceptions.py +99 -0
- dlthub-0.18.0a0/dlthub/common/license/license.py +442 -0
- dlthub-0.18.0a0/dlthub/current.py +4 -0
- dlthub-0.18.0a0/dlthub/dbt_generator/__init__.py +0 -0
- dlthub-0.18.0a0/dlthub/dbt_generator/cli.py +91 -0
- dlthub-0.18.0a0/dlthub/dbt_generator/config.py +78 -0
- dlthub-0.18.0a0/dlthub/dbt_generator/exceptions.py +49 -0
- dlthub-0.18.0a0/dlthub/dbt_generator/render.py +327 -0
- dlthub-0.18.0a0/dlthub/dbt_generator/templates/README.md.j2 +31 -0
- dlthub-0.18.0a0/dlthub/dbt_generator/templates/dbt_project.yml.j2 +29 -0
- dlthub-0.18.0a0/dlthub/dbt_generator/templates/main.py.j2 +22 -0
- dlthub-0.18.0a0/dlthub/dbt_generator/templates/requirements.txt.j2 +216 -0
- dlthub-0.18.0a0/dlthub/dbt_generator/templates/sources.yml.j2 +35 -0
- dlthub-0.18.0a0/dlthub/dbt_generator/templates/table_active_load_ids.sql.j2 +13 -0
- dlthub-0.18.0a0/dlthub/dbt_generator/templates/table_fact.sql.j2 +37 -0
- dlthub-0.18.0a0/dlthub/dbt_generator/templates/table_mart.sql.j2 +22 -0
- dlthub-0.18.0a0/dlthub/dbt_generator/templates/table_processed_load_ids.sql.j2 +11 -0
- dlthub-0.18.0a0/dlthub/dbt_generator/templates/table_staging.sql.j2 +33 -0
- dlthub-0.18.0a0/dlthub/dbt_generator/types.py +7 -0
- dlthub-0.18.0a0/dlthub/dbt_generator/utils.py +305 -0
- dlthub-0.18.0a0/dlthub/destinations/__init__.py +6 -0
- dlthub-0.18.0a0/dlthub/destinations/adapters.py +8 -0
- dlthub-0.18.0a0/dlthub/destinations/dataset.py +89 -0
- dlthub-0.18.0a0/dlthub/destinations/impl/__init__.py +0 -0
- dlthub-0.18.0a0/dlthub/destinations/impl/filesystem/__init__.py +0 -0
- dlthub-0.18.0a0/dlthub/destinations/impl/filesystem/factory.py +19 -0
- dlthub-0.18.0a0/dlthub/destinations/impl/iceberg/README.md +46 -0
- dlthub-0.18.0a0/dlthub/destinations/impl/iceberg/__init__.py +0 -0
- dlthub-0.18.0a0/dlthub/destinations/impl/iceberg/configuration.py +273 -0
- dlthub-0.18.0a0/dlthub/destinations/impl/iceberg/factory.py +85 -0
- dlthub-0.18.0a0/dlthub/destinations/impl/iceberg/iceberg.py +1125 -0
- dlthub-0.18.0a0/dlthub/destinations/impl/iceberg/iceberg_adapter.py +258 -0
- dlthub-0.18.0a0/dlthub/destinations/impl/iceberg/sql_client.py +311 -0
- dlthub-0.18.0a0/dlthub/destinations/impl/snowflake_plus/__init__.py +0 -0
- dlthub-0.18.0a0/dlthub/destinations/impl/snowflake_plus/configuration.py +20 -0
- dlthub-0.18.0a0/dlthub/destinations/impl/snowflake_plus/exceptions.py +17 -0
- dlthub-0.18.0a0/dlthub/destinations/impl/snowflake_plus/factory.py +203 -0
- dlthub-0.18.0a0/dlthub/destinations/impl/snowflake_plus/snowflake_plus.py +108 -0
- dlthub-0.18.0a0/dlthub/destinations/utils.py +10 -0
- dlthub-0.18.0a0/dlthub/legacy/__init__.py +0 -0
- dlthub-0.18.0a0/dlthub/legacy/transformations/__init__.py +0 -0
- dlthub-0.18.0a0/dlthub/legacy/transformations/base_transformation.py +135 -0
- dlthub-0.18.0a0/dlthub/legacy/transformations/cli.py +134 -0
- dlthub-0.18.0a0/dlthub/legacy/transformations/config.py +26 -0
- dlthub-0.18.0a0/dlthub/legacy/transformations/const.py +4 -0
- dlthub-0.18.0a0/dlthub/legacy/transformations/dataframes/__init__.py +203 -0
- dlthub-0.18.0a0/dlthub/legacy/transformations/dataframes/decorators.py +66 -0
- dlthub-0.18.0a0/dlthub/legacy/transformations/dataframes/templates/__init__.py +0 -0
- dlthub-0.18.0a0/dlthub/legacy/transformations/dataframes/templates/dataframes_header_template.py +57 -0
- dlthub-0.18.0a0/dlthub/legacy/transformations/dataframes/templates/dataframes_table_template.py +30 -0
- dlthub-0.18.0a0/dlthub/legacy/transformations/dataframes/templates/dataframes_transformation_group_template.py +4 -0
- dlthub-0.18.0a0/dlthub/legacy/transformations/dbt/__init__.py +52 -0
- dlthub-0.18.0a0/dlthub/legacy/transformations/transformations.py +19 -0
- dlthub-0.18.0a0/dlthub/mcp/__init__.py +4 -0
- dlthub-0.18.0a0/dlthub/mcp/prompts/__init__.py +1 -0
- dlthub-0.18.0a0/dlthub/mcp/prompts/project.py +93 -0
- dlthub-0.18.0a0/dlthub/mcp/resources/__init__.py +1 -0
- dlthub-0.18.0a0/dlthub/mcp/resources/docs.py +966 -0
- dlthub-0.18.0a0/dlthub/mcp/server.py +53 -0
- dlthub-0.18.0a0/dlthub/mcp/tools/__init__.py +1 -0
- dlthub-0.18.0a0/dlthub/mcp/tools/mcp_tools.py +204 -0
- dlthub-0.18.0a0/dlthub/mcp/tools/project.py +286 -0
- dlthub-0.18.0a0/dlthub/project/__init__.py +16 -0
- dlthub-0.18.0a0/dlthub/project/_templates/__init__.py +0 -0
- dlthub-0.18.0a0/dlthub/project/_templates/project/__init__.py +22 -0
- dlthub-0.18.0a0/dlthub/project/_templates/project/dlt.yml +19 -0
- dlthub-0.18.0a0/dlthub/project/_templates/project/package_init.py +41 -0
- dlthub-0.18.0a0/dlthub/project/_templates/project/pyproject.toml +15 -0
- dlthub-0.18.0a0/dlthub/project/_templates/sources/__init__.py +0 -0
- dlthub-0.18.0a0/dlthub/project/_templates/sources/arrow.py +39 -0
- dlthub-0.18.0a0/dlthub/project/_templates/sources/dataframes.py +39 -0
- dlthub-0.18.0a0/dlthub/project/_templates/sources/python.py +33 -0
- dlthub-0.18.0a0/dlthub/project/catalog.py +45 -0
- dlthub-0.18.0a0/dlthub/project/cli/__init__.py +0 -0
- dlthub-0.18.0a0/dlthub/project/cli/dataset_command.py +174 -0
- dlthub-0.18.0a0/dlthub/project/cli/destination_command.py +116 -0
- dlthub-0.18.0a0/dlthub/project/cli/formatters.py +20 -0
- dlthub-0.18.0a0/dlthub/project/cli/helpers.py +770 -0
- dlthub-0.18.0a0/dlthub/project/cli/pipeline_command.py +259 -0
- dlthub-0.18.0a0/dlthub/project/cli/profile_command.py +115 -0
- dlthub-0.18.0a0/dlthub/project/cli/project_command.py +453 -0
- dlthub-0.18.0a0/dlthub/project/cli/source_command.py +201 -0
- dlthub-0.18.0a0/dlthub/project/cli/write_state.py +120 -0
- dlthub-0.18.0a0/dlthub/project/config/__init__.py +0 -0
- dlthub-0.18.0a0/dlthub/project/config/config.py +129 -0
- dlthub-0.18.0a0/dlthub/project/config/config_loader.py +198 -0
- dlthub-0.18.0a0/dlthub/project/config/interpolation.py +45 -0
- dlthub-0.18.0a0/dlthub/project/config/typing.py +81 -0
- dlthub-0.18.0a0/dlthub/project/config/utils.py +13 -0
- dlthub-0.18.0a0/dlthub/project/config/yaml_loader.py +41 -0
- dlthub-0.18.0a0/dlthub/project/current.py +68 -0
- dlthub-0.18.0a0/dlthub/project/entity_factory.py +579 -0
- dlthub-0.18.0a0/dlthub/project/exceptions.py +84 -0
- dlthub-0.18.0a0/dlthub/project/pipeline_manager.py +60 -0
- dlthub-0.18.0a0/dlthub/project/project_context.py +460 -0
- dlthub-0.18.0a0/dlthub/project/tests/__init__.py +16 -0
- dlthub-0.18.0a0/dlthub/project/tests/fixtures.py +43 -0
- dlthub-0.18.0a0/dlthub/py.typed +0 -0
- dlthub-0.18.0a0/dlthub/sources/__init__.py +0 -0
- dlthub-0.18.0a0/dlthub/sources/_core_source_templates/__init__.py +0 -0
- dlthub-0.18.0a0/dlthub/sources/_core_source_templates/mssql_pipeline.py +91 -0
- dlthub-0.18.0a0/dlthub/sources/mssql/__init__.py +304 -0
- dlthub-0.18.0a0/dlthub/transformations/__init__.py +5 -0
- dlthub-0.18.0a0/dlthub/transformations/configuration.py +19 -0
- dlthub-0.18.0a0/dlthub/transformations/decorators.py +121 -0
- dlthub-0.18.0a0/dlthub/transformations/exceptions.py +26 -0
- dlthub-0.18.0a0/dlthub/transformations/resource.py +267 -0
- dlthub-0.18.0a0/dlthub/transformations/typing.py +3 -0
- dlthub-0.18.0a0/dlthub/version.py +6 -0
- dlthub-0.18.0a0/pyproject.toml +93 -0
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
# Byte-compiled / optimized / DLL files
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
|
|
6
|
+
# C extensions
|
|
7
|
+
*.so
|
|
8
|
+
|
|
9
|
+
# Distribution / packaging
|
|
10
|
+
.Python
|
|
11
|
+
build/
|
|
12
|
+
develop-eggs/
|
|
13
|
+
dist/
|
|
14
|
+
downloads/
|
|
15
|
+
eggs/
|
|
16
|
+
.eggs/
|
|
17
|
+
lib/
|
|
18
|
+
lib64/
|
|
19
|
+
parts/
|
|
20
|
+
sdist/
|
|
21
|
+
var/
|
|
22
|
+
wheels/
|
|
23
|
+
share/python-wheels/
|
|
24
|
+
*.egg-info/
|
|
25
|
+
.installed.cfg
|
|
26
|
+
*.egg
|
|
27
|
+
MANIFEST
|
|
28
|
+
|
|
29
|
+
# PyInstaller
|
|
30
|
+
# Usually these files are written by a python script from a template
|
|
31
|
+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
|
32
|
+
*.manifest
|
|
33
|
+
*.spec
|
|
34
|
+
|
|
35
|
+
# Installer logs
|
|
36
|
+
pip-log.txt
|
|
37
|
+
pip-delete-this-directory.txt
|
|
38
|
+
|
|
39
|
+
# Unit test / coverage reports
|
|
40
|
+
htmlcov/
|
|
41
|
+
.tox/
|
|
42
|
+
.nox/
|
|
43
|
+
.coverage
|
|
44
|
+
.coverage.*
|
|
45
|
+
.cache
|
|
46
|
+
nosetests.xml
|
|
47
|
+
coverage.xml
|
|
48
|
+
*.cover
|
|
49
|
+
*.py,cover
|
|
50
|
+
.hypothesis/
|
|
51
|
+
.pytest_cache/
|
|
52
|
+
cover/
|
|
53
|
+
|
|
54
|
+
# Translations
|
|
55
|
+
*.mo
|
|
56
|
+
*.pot
|
|
57
|
+
|
|
58
|
+
# Django stuff:
|
|
59
|
+
*.log
|
|
60
|
+
local_settings.py
|
|
61
|
+
db.sqlite3
|
|
62
|
+
db.sqlite3-journal
|
|
63
|
+
|
|
64
|
+
# Flask stuff:
|
|
65
|
+
instance/
|
|
66
|
+
.webassets-cache
|
|
67
|
+
|
|
68
|
+
# Scrapy stuff:
|
|
69
|
+
.scrapy
|
|
70
|
+
|
|
71
|
+
# Sphinx documentation
|
|
72
|
+
docs/_build/
|
|
73
|
+
|
|
74
|
+
# PyBuilder
|
|
75
|
+
.pybuilder/
|
|
76
|
+
target/
|
|
77
|
+
|
|
78
|
+
# Jupyter Notebook
|
|
79
|
+
.ipynb_checkpoints
|
|
80
|
+
|
|
81
|
+
# IPython
|
|
82
|
+
profile_default/
|
|
83
|
+
ipython_config.py
|
|
84
|
+
|
|
85
|
+
# pyenv
|
|
86
|
+
# For a library or package, you might want to ignore these files since the code is
|
|
87
|
+
# intended to run in multiple environments; otherwise, check them in:
|
|
88
|
+
# .python-version
|
|
89
|
+
|
|
90
|
+
# pipenv
|
|
91
|
+
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
|
92
|
+
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
|
93
|
+
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
|
94
|
+
# install all needed dependencies.
|
|
95
|
+
#Pipfile.lock
|
|
96
|
+
|
|
97
|
+
# poetry
|
|
98
|
+
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
|
|
99
|
+
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
|
100
|
+
# commonly ignored for libraries.
|
|
101
|
+
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
|
|
102
|
+
#poetry.lock
|
|
103
|
+
|
|
104
|
+
# pdm
|
|
105
|
+
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
|
|
106
|
+
#pdm.lock
|
|
107
|
+
# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
|
|
108
|
+
# in version control.
|
|
109
|
+
# https://pdm.fming.dev/latest/usage/project/#working-with-version-control
|
|
110
|
+
.pdm.toml
|
|
111
|
+
.pdm-python
|
|
112
|
+
.pdm-build/
|
|
113
|
+
|
|
114
|
+
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
|
|
115
|
+
__pypackages__/
|
|
116
|
+
|
|
117
|
+
# Celery stuff
|
|
118
|
+
celerybeat-schedule
|
|
119
|
+
celerybeat.pid
|
|
120
|
+
|
|
121
|
+
# SageMath parsed files
|
|
122
|
+
*.sage.py
|
|
123
|
+
|
|
124
|
+
# Environments
|
|
125
|
+
.env
|
|
126
|
+
.venv
|
|
127
|
+
env/
|
|
128
|
+
venv/
|
|
129
|
+
ENV/
|
|
130
|
+
env.bak/
|
|
131
|
+
venv.bak/
|
|
132
|
+
|
|
133
|
+
# Spyder project settings
|
|
134
|
+
.spyderproject
|
|
135
|
+
.spyproject
|
|
136
|
+
|
|
137
|
+
# Rope project settings
|
|
138
|
+
.ropeproject
|
|
139
|
+
|
|
140
|
+
# mkdocs documentation
|
|
141
|
+
/site
|
|
142
|
+
|
|
143
|
+
# mypy
|
|
144
|
+
.mypy_cache/
|
|
145
|
+
.dmypy.json
|
|
146
|
+
dmypy.json
|
|
147
|
+
|
|
148
|
+
# Pyre type checker
|
|
149
|
+
.pyre/
|
|
150
|
+
|
|
151
|
+
# pytype static type analyzer
|
|
152
|
+
.pytype/
|
|
153
|
+
|
|
154
|
+
# Cython debug symbols
|
|
155
|
+
cython_debug/
|
|
156
|
+
|
|
157
|
+
# PyCharm
|
|
158
|
+
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
|
|
159
|
+
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
|
|
160
|
+
# and can be added to the global gitignore or merged into this file. For a more nuclear
|
|
161
|
+
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
|
162
|
+
#.idea/
|
|
163
|
+
|
|
164
|
+
*.duckdb
|
|
165
|
+
*secrets.toml
|
|
166
|
+
_data
|
|
167
|
+
.var
|
|
168
|
+
.s3cfg
|
|
169
|
+
_local
|
|
170
|
+
_storage
|
|
171
|
+
/test.duck
|
|
172
|
+
.ruff_cache/
|
|
173
|
+
|
|
174
|
+
**/.DS_Store
|
|
175
|
+
.vscode
|
|
176
|
+
|
|
177
|
+
# Terraform
|
|
178
|
+
**/.terraform/*
|
|
179
|
+
*.tfstate
|
|
180
|
+
*.tfstate.*
|
|
181
|
+
*.tfplan
|
|
182
|
+
!writer/infrastructure/bootstrap/*.tfstate
|
|
183
|
+
!writer/infrastructure/bootstrap/*.tfstate*
|
|
184
|
+
!**/bootstrap/*.tfstate*
|
|
185
|
+
crash.log
|
|
186
|
+
*.tfvars
|
|
187
|
+
override.tf
|
|
188
|
+
override.tf.json
|
|
189
|
+
*_override.tf
|
|
190
|
+
*_override.tf.json
|
|
191
|
+
.terraformrc
|
|
192
|
+
terraform.rc
|
|
193
|
+
|
|
194
|
+
tmp
|
|
195
|
+
tests/_tmp_contexts
|
|
196
|
+
experiments
|
|
197
|
+
tests_dlt/tests
|
|
198
|
+
|
|
199
|
+
!packages/dlthub/dlthub/project/_templates/project/dlt/secrets.toml
|
|
200
|
+
!packages/dlthub/dlthub/project/_templates/project/dlt/dev.secrets.toml
|
|
201
|
+
!tests/.dlt/dev.secrets.toml
|
|
202
|
+
|
|
203
|
+
**/__marimo__/
|
|
204
|
+
*.duckdb.wal
|
|
205
|
+
*.ducklake
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# dltHub Software EULA
|
|
2
|
+
License Notice – External License Reference
|
|
3
|
+
|
|
4
|
+
This software package (the “Software”) is licensed solely under the dltHub Software End User License Agreement (the “License”). The complete and current text of the License is maintained at the following canonical location:
|
|
5
|
+
|
|
6
|
+
https://dlthub.com/docs/plus/EULA
|
|
7
|
+
|
|
8
|
+
By downloading, installing, accessing, or using the Software, you acknowledge that you have read, understood, and agree to be bound by the License. If you do not agree to the License, do not download, install, access, or use the Software.
|
|
9
|
+
|
|
10
|
+
Copyright 2025 Scalevector
|
dlthub-0.18.0a0/PKG-INFO
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: dlthub
|
|
3
|
+
Version: 0.18.0a0
|
|
4
|
+
Summary: dlthub is a commercial extension to dlt
|
|
5
|
+
Author-email: "dltHub Inc." <services@dlthub.com>
|
|
6
|
+
Maintainer-email: Marcin Rudolf <marcin@dlthub.com>, Adrian Brudaru <adrian@dlthub.com>, Anton Burnashev <anton@dlthub.com>, David Scharf <david@dlthub.com>
|
|
7
|
+
License: # dltHub Software EULA
|
|
8
|
+
License Notice – External License Reference
|
|
9
|
+
|
|
10
|
+
This software package (the “Software”) is licensed solely under the dltHub Software End User License Agreement (the “License”). The complete and current text of the License is maintained at the following canonical location:
|
|
11
|
+
|
|
12
|
+
https://dlthub.com/docs/plus/EULA
|
|
13
|
+
|
|
14
|
+
By downloading, installing, accessing, or using the Software, you acknowledge that you have read, understood, and agree to be bound by the License. If you do not agree to the License, do not download, install, access, or use the Software.
|
|
15
|
+
|
|
16
|
+
Copyright 2025 Scalevector
|
|
17
|
+
License-File: LICENSE.md
|
|
18
|
+
Keywords: etl
|
|
19
|
+
Classifier: Development Status :: 3 - Alpha
|
|
20
|
+
Classifier: Intended Audience :: Developers
|
|
21
|
+
Classifier: Operating System :: MacOS :: MacOS X
|
|
22
|
+
Classifier: Operating System :: Microsoft :: Windows
|
|
23
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
24
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
25
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
26
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
27
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
28
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
29
|
+
Classifier: Topic :: Software Development :: Libraries
|
|
30
|
+
Classifier: Typing :: Typed
|
|
31
|
+
Requires-Python: <3.14,>=3.9
|
|
32
|
+
Requires-Dist: dlt==1.18.0a0
|
|
33
|
+
Requires-Dist: python-jose>=3.5.0
|
|
34
|
+
Requires-Dist: ruamel-yaml>=0.18.10
|
|
35
|
+
Provides-Extra: cache
|
|
36
|
+
Requires-Dist: duckdb>0.9; extra == 'cache'
|
|
37
|
+
Provides-Extra: dbt
|
|
38
|
+
Requires-Dist: dbt-core<1.10; extra == 'dbt'
|
|
39
|
+
Requires-Dist: jinja2>=3.1.2; extra == 'dbt'
|
|
40
|
+
Requires-Dist: pydantic<2.12,>2; extra == 'dbt'
|
|
41
|
+
Provides-Extra: iceberg
|
|
42
|
+
Requires-Dist: boto3>=1.37.3; extra == 'iceberg'
|
|
43
|
+
Requires-Dist: duckdb>=1.3.2; extra == 'iceberg'
|
|
44
|
+
Requires-Dist: pyarrow>=17; extra == 'iceberg'
|
|
45
|
+
Requires-Dist: pyiceberg>=0.9.1; extra == 'iceberg'
|
|
46
|
+
Requires-Dist: sqlalchemy>2; extra == 'iceberg'
|
|
47
|
+
Provides-Extra: mcp
|
|
48
|
+
Requires-Dist: duckdb>=1.1.3; extra == 'mcp'
|
|
49
|
+
Requires-Dist: mcp>=1.2.1; extra == 'mcp'
|
|
50
|
+
Requires-Dist: pandas>=2.1.4; extra == 'mcp'
|
|
51
|
+
Requires-Dist: pyarrow>=17; extra == 'mcp'
|
|
52
|
+
Provides-Extra: mssql
|
|
53
|
+
Requires-Dist: pyodbc>=4.0.39; extra == 'mssql'
|
|
54
|
+
Requires-Dist: sqlalchemy>1.4; extra == 'mssql'
|
|
55
|
+
Provides-Extra: snowflake
|
|
56
|
+
Requires-Dist: dlt[snowflake]; extra == 'snowflake'
|
|
57
|
+
Description-Content-Type: text/markdown
|
|
58
|
+
|
|
59
|
+
<h1 align="center">
|
|
60
|
+
<strong>dlthub</strong>
|
|
61
|
+
</h1>
|
|
62
|
+
|
|
63
|
+
<div align="center">
|
|
64
|
+
<a target="_blank" href="https://dlthub.com/community" style="background:none">
|
|
65
|
+
<img src="https://img.shields.io/badge/slack-join-dlt.svg?labelColor=191937&color=6F6FF7&logo=slack" style="width: 260px;" />
|
|
66
|
+
</a>
|
|
67
|
+
</div>
|
|
68
|
+
<div align="center">
|
|
69
|
+
<a target="_blank" href="https://pypi.org/project/dlthub/" style="background:none">
|
|
70
|
+
<img src="https://img.shields.io/pypi/v/dlthub?labelColor=191937&color=6F6FF7">
|
|
71
|
+
</a>
|
|
72
|
+
<a target="_blank" href="https://pypi.org/project/dlthub/" style="background:none">
|
|
73
|
+
<img src="https://img.shields.io/pypi/pyversions/dlthub?labelColor=191937&color=6F6FF7">
|
|
74
|
+
</a>
|
|
75
|
+
</div>
|
|
76
|
+
|
|
77
|
+
dlthub is the commercial extension to the open source data load tool ([dlt]((https://dlthub.com/docs/))). Features include:
|
|
78
|
+
* define data transformations in Python and SQL
|
|
79
|
+
* generate dbt packages from dlt pipelines
|
|
80
|
+
* dlthub projects: empower any team members to define sources, destinations and pipelines in a declarative yaml interface
|
|
81
|
+
* Iceberg support
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
## Installation
|
|
85
|
+
|
|
86
|
+
dlthub supports Python 3.10 and above.
|
|
87
|
+
|
|
88
|
+
```sh
|
|
89
|
+
pip install dlthub
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## Documentation
|
|
93
|
+
|
|
94
|
+
Learn more in the [dlthub docs](https://dlthub.com/docs/hub/intro).
|
|
95
|
+
|
|
96
|
+
## License
|
|
97
|
+
|
|
98
|
+
dlthub requires a license to be used, please join our [waiting list](https://info.dlthub.com/waiting-list) to get one.
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
<h1 align="center">
|
|
2
|
+
<strong>dlthub</strong>
|
|
3
|
+
</h1>
|
|
4
|
+
|
|
5
|
+
<div align="center">
|
|
6
|
+
<a target="_blank" href="https://dlthub.com/community" style="background:none">
|
|
7
|
+
<img src="https://img.shields.io/badge/slack-join-dlt.svg?labelColor=191937&color=6F6FF7&logo=slack" style="width: 260px;" />
|
|
8
|
+
</a>
|
|
9
|
+
</div>
|
|
10
|
+
<div align="center">
|
|
11
|
+
<a target="_blank" href="https://pypi.org/project/dlthub/" style="background:none">
|
|
12
|
+
<img src="https://img.shields.io/pypi/v/dlthub?labelColor=191937&color=6F6FF7">
|
|
13
|
+
</a>
|
|
14
|
+
<a target="_blank" href="https://pypi.org/project/dlthub/" style="background:none">
|
|
15
|
+
<img src="https://img.shields.io/pypi/pyversions/dlthub?labelColor=191937&color=6F6FF7">
|
|
16
|
+
</a>
|
|
17
|
+
</div>
|
|
18
|
+
|
|
19
|
+
dlthub is the commercial extension to the open source data load tool ([dlt]((https://dlthub.com/docs/))). Features include:
|
|
20
|
+
* define data transformations in Python and SQL
|
|
21
|
+
* generate dbt packages from dlt pipelines
|
|
22
|
+
* dlthub projects: empower any team members to define sources, destinations and pipelines in a declarative yaml interface
|
|
23
|
+
* Iceberg support
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
## Installation
|
|
27
|
+
|
|
28
|
+
dlthub supports Python 3.10 and above.
|
|
29
|
+
|
|
30
|
+
```sh
|
|
31
|
+
pip install dlthub
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Documentation
|
|
35
|
+
|
|
36
|
+
Learn more in the [dlthub docs](https://dlthub.com/docs/hub/intro).
|
|
37
|
+
|
|
38
|
+
## License
|
|
39
|
+
|
|
40
|
+
dlthub requires a license to be used, please join our [waiting list](https://info.dlthub.com/waiting-list) to get one.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"""dlthub is a plugin to OSS `dlt` adding projects, packages a runner and new cli commands."""
|
|
2
|
+
|
|
3
|
+
from dlt import hub as _hub
|
|
4
|
+
|
|
5
|
+
from dlthub.version import __version__
|
|
6
|
+
from dlthub._runner import PipelineRunner as _PipelineRunner
|
|
7
|
+
from dlthub import destinations, sources, current
|
|
8
|
+
from dlthub.transformations import transformation
|
|
9
|
+
from dlthub.common.license import self_issue_trial_license
|
|
10
|
+
|
|
11
|
+
runner = _PipelineRunner
|
|
12
|
+
|
|
13
|
+
# dlt.hub is causing circular dependency if dlthub is imported first. reload
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
if not _hub.__found__:
|
|
17
|
+
from importlib import reload as _reload
|
|
18
|
+
|
|
19
|
+
_reload(_hub)
|
|
20
|
+
|
|
21
|
+
__all__ = [
|
|
22
|
+
"__version__",
|
|
23
|
+
"current",
|
|
24
|
+
"runner",
|
|
25
|
+
"destinations",
|
|
26
|
+
"sources",
|
|
27
|
+
"transformation",
|
|
28
|
+
"self_issue_trial_license",
|
|
29
|
+
]
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import os
|
|
2
|
+
from typing import Any, Dict, Optional, Type
|
|
3
|
+
|
|
4
|
+
from dlt.common.configuration import plugins as _plugins
|
|
5
|
+
from dlt.common.configuration.specs.pluggable_run_context import RunContextBase
|
|
6
|
+
|
|
7
|
+
from dlt._workspace.cli import SupportsCliCommand
|
|
8
|
+
|
|
9
|
+
from dlthub.project.exceptions import ProjectRunContextNotAvailable
|
|
10
|
+
from dlthub.project.project_context import is_project_dir
|
|
11
|
+
from dlthub.common.license.decorators import is_scope_active
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
@_plugins.hookimpl(specname="plug_run_context", tryfirst=True)
|
|
15
|
+
def _plug_run_context_impl(
|
|
16
|
+
run_dir: Optional[str], runtime_kwargs: Optional[Dict[str, Any]]
|
|
17
|
+
) -> Optional[RunContextBase]:
|
|
18
|
+
"""Called when run new context is created"""
|
|
19
|
+
|
|
20
|
+
from dlthub.project.project_context import (
|
|
21
|
+
create_project_context,
|
|
22
|
+
find_project_dir,
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
# use explicit dir or find one starting from cwd
|
|
26
|
+
project_dir = (
|
|
27
|
+
run_dir
|
|
28
|
+
if run_dir and is_project_dir(run_dir)
|
|
29
|
+
else find_project_dir()
|
|
30
|
+
if not run_dir
|
|
31
|
+
else None
|
|
32
|
+
)
|
|
33
|
+
runtime_kwargs = runtime_kwargs or {}
|
|
34
|
+
profile = runtime_kwargs.get("profile")
|
|
35
|
+
if project_dir:
|
|
36
|
+
# TODO: get local_dir, data_dir, and verify settings_dir. allow them to override
|
|
37
|
+
# settings in project config
|
|
38
|
+
return create_project_context(
|
|
39
|
+
project_dir, profile=profile, validate=runtime_kwargs.get("_validate", False)
|
|
40
|
+
)
|
|
41
|
+
else:
|
|
42
|
+
if runtime_kwargs.get("_required") == "ProjectRunContext":
|
|
43
|
+
raise ProjectRunContextNotAvailable(project_dir or run_dir or os.getcwd())
|
|
44
|
+
|
|
45
|
+
# no run dir pass through to next plugin
|
|
46
|
+
return None
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
#
|
|
50
|
+
# legacy transformation commands
|
|
51
|
+
#
|
|
52
|
+
if is_scope_active("dlthub.project"):
|
|
53
|
+
|
|
54
|
+
@_plugins.hookimpl(specname="plug_cli")
|
|
55
|
+
def _plug_cli_transformation() -> Type[SupportsCliCommand]:
|
|
56
|
+
from dlt.common.exceptions import MissingDependencyException
|
|
57
|
+
|
|
58
|
+
try:
|
|
59
|
+
from dlthub.legacy.transformations.cli import TransformationCommand
|
|
60
|
+
|
|
61
|
+
return TransformationCommand
|
|
62
|
+
except (MissingDependencyException, ImportError):
|
|
63
|
+
# TODO: we need a better mechanism to plug in placeholder commands for non installed
|
|
64
|
+
# packages
|
|
65
|
+
from dlt._workspace.cli import SupportsCliCommand
|
|
66
|
+
|
|
67
|
+
class _PondCommand(SupportsCliCommand):
|
|
68
|
+
command = "transformation"
|
|
69
|
+
help_string = "Please install dlthub[cache] to enable transformations"
|
|
70
|
+
|
|
71
|
+
return _PondCommand
|
|
72
|
+
|
|
73
|
+
@_plugins.hookimpl(specname="plug_cli")
|
|
74
|
+
def _plug_cli_cache() -> Type[SupportsCliCommand]:
|
|
75
|
+
from dlthub.cache.cli import CacheCommand
|
|
76
|
+
from dlt.common.exceptions import MissingDependencyException
|
|
77
|
+
|
|
78
|
+
try:
|
|
79
|
+
from dlthub.cache.cli import CacheCommand
|
|
80
|
+
|
|
81
|
+
return CacheCommand
|
|
82
|
+
except (MissingDependencyException, ImportError):
|
|
83
|
+
from dlt._workspace.cli import SupportsCliCommand
|
|
84
|
+
|
|
85
|
+
class _CacheCommand(SupportsCliCommand):
|
|
86
|
+
command = "cache"
|
|
87
|
+
help_string = "Please install dlthub[cache] to use local transformation cache"
|
|
88
|
+
|
|
89
|
+
return _CacheCommand
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
if is_scope_active("dlthub.project"):
|
|
93
|
+
|
|
94
|
+
@_plugins.hookimpl(specname="plug_cli")
|
|
95
|
+
def _plug_cli_project() -> Type[SupportsCliCommand]:
|
|
96
|
+
from dlthub.project.cli.project_command import ProjectCommand
|
|
97
|
+
|
|
98
|
+
return ProjectCommand
|
|
99
|
+
|
|
100
|
+
@_plugins.hookimpl(specname="plug_cli", tryfirst=True)
|
|
101
|
+
def _plug_cli_pipeline() -> Type[SupportsCliCommand]:
|
|
102
|
+
# should be executed before dlt command got plugged in (tryfirst) to override it
|
|
103
|
+
from dlthub.project.cli.pipeline_command import ProjectPipelineCommand
|
|
104
|
+
|
|
105
|
+
return ProjectPipelineCommand
|
|
106
|
+
|
|
107
|
+
@_plugins.hookimpl(specname="plug_cli")
|
|
108
|
+
def _plug_cli_dataset() -> Type[SupportsCliCommand]:
|
|
109
|
+
from dlthub.project.cli.dataset_command import DatasetCommand
|
|
110
|
+
|
|
111
|
+
return DatasetCommand
|
|
112
|
+
|
|
113
|
+
@_plugins.hookimpl(specname="plug_cli")
|
|
114
|
+
def _plug_cli_source() -> Type[SupportsCliCommand]:
|
|
115
|
+
from dlthub.project.cli.source_command import SourceCommand
|
|
116
|
+
|
|
117
|
+
return SourceCommand
|
|
118
|
+
|
|
119
|
+
@_plugins.hookimpl(specname="plug_cli")
|
|
120
|
+
def _plug_cli_destination() -> Type[SupportsCliCommand]:
|
|
121
|
+
from dlthub.project.cli.destination_command import DestinationCommand
|
|
122
|
+
|
|
123
|
+
return DestinationCommand
|
|
124
|
+
|
|
125
|
+
@_plugins.hookimpl(specname="plug_cli")
|
|
126
|
+
def _plug_cli_profile() -> Type[SupportsCliCommand]:
|
|
127
|
+
from dlthub.project.cli.profile_command import ProfileCommand
|
|
128
|
+
|
|
129
|
+
return ProfileCommand
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
@_plugins.hookimpl(specname="plug_cli")
|
|
133
|
+
def _plug_cli_license() -> Type[SupportsCliCommand]:
|
|
134
|
+
from dlthub.common.license.cli import LicenseCommand
|
|
135
|
+
|
|
136
|
+
return LicenseCommand
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
if is_scope_active("dlthub.dbt_generator"):
|
|
140
|
+
|
|
141
|
+
@_plugins.hookimpl(specname="plug_cli")
|
|
142
|
+
def _plug_cli_dbt() -> Type[SupportsCliCommand]:
|
|
143
|
+
from dlthub.dbt_generator.cli import DbtCommand
|
|
144
|
+
|
|
145
|
+
return DbtCommand
|