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.
Files changed (139) hide show
  1. dlthub-0.18.0a0/.gitignore +205 -0
  2. dlthub-0.18.0a0/LICENSE.md +10 -0
  3. dlthub-0.18.0a0/PKG-INFO +98 -0
  4. dlthub-0.18.0a0/README.md +40 -0
  5. dlthub-0.18.0a0/dlthub/__init__.py +29 -0
  6. dlthub-0.18.0a0/dlthub/__plugin__.py +145 -0
  7. dlthub-0.18.0a0/dlthub/_runner/__init__.py +9 -0
  8. dlthub-0.18.0a0/dlthub/_runner/exceptions.py +6 -0
  9. dlthub-0.18.0a0/dlthub/_runner/pipeline_runner.py +488 -0
  10. dlthub-0.18.0a0/dlthub/_runner/plus_log_collector.py +155 -0
  11. dlthub-0.18.0a0/dlthub/_runner/prefect_collector.py +735 -0
  12. dlthub-0.18.0a0/dlthub/_runner/prefect_helpers.py +390 -0
  13. dlthub-0.18.0a0/dlthub/_runner/trace.schema.yaml +859 -0
  14. dlthub-0.18.0a0/dlthub/_runner/trace_helpers.py +90 -0
  15. dlthub-0.18.0a0/dlthub/_runner/trace_resource.py +175 -0
  16. dlthub-0.18.0a0/dlthub/_runner/typing.py +22 -0
  17. dlthub-0.18.0a0/dlthub/_runner/utils.py +117 -0
  18. dlthub-0.18.0a0/dlthub/cache/__init__.py +1 -0
  19. dlthub-0.18.0a0/dlthub/cache/cache.py +337 -0
  20. dlthub-0.18.0a0/dlthub/cache/cli.py +93 -0
  21. dlthub-0.18.0a0/dlthub/cache/config.py +52 -0
  22. dlthub-0.18.0a0/dlthub/common/__init__.py +0 -0
  23. dlthub-0.18.0a0/dlthub/common/cli.py +34 -0
  24. dlthub-0.18.0a0/dlthub/common/configuration/__init__.py +0 -0
  25. dlthub-0.18.0a0/dlthub/common/constants.py +17 -0
  26. dlthub-0.18.0a0/dlthub/common/exceptions.py +5 -0
  27. dlthub-0.18.0a0/dlthub/common/license/__init__.py +14 -0
  28. dlthub-0.18.0a0/dlthub/common/license/cli.py +265 -0
  29. dlthub-0.18.0a0/dlthub/common/license/decorators.py +73 -0
  30. dlthub-0.18.0a0/dlthub/common/license/exceptions.py +99 -0
  31. dlthub-0.18.0a0/dlthub/common/license/license.py +442 -0
  32. dlthub-0.18.0a0/dlthub/current.py +4 -0
  33. dlthub-0.18.0a0/dlthub/dbt_generator/__init__.py +0 -0
  34. dlthub-0.18.0a0/dlthub/dbt_generator/cli.py +91 -0
  35. dlthub-0.18.0a0/dlthub/dbt_generator/config.py +78 -0
  36. dlthub-0.18.0a0/dlthub/dbt_generator/exceptions.py +49 -0
  37. dlthub-0.18.0a0/dlthub/dbt_generator/render.py +327 -0
  38. dlthub-0.18.0a0/dlthub/dbt_generator/templates/README.md.j2 +31 -0
  39. dlthub-0.18.0a0/dlthub/dbt_generator/templates/dbt_project.yml.j2 +29 -0
  40. dlthub-0.18.0a0/dlthub/dbt_generator/templates/main.py.j2 +22 -0
  41. dlthub-0.18.0a0/dlthub/dbt_generator/templates/requirements.txt.j2 +216 -0
  42. dlthub-0.18.0a0/dlthub/dbt_generator/templates/sources.yml.j2 +35 -0
  43. dlthub-0.18.0a0/dlthub/dbt_generator/templates/table_active_load_ids.sql.j2 +13 -0
  44. dlthub-0.18.0a0/dlthub/dbt_generator/templates/table_fact.sql.j2 +37 -0
  45. dlthub-0.18.0a0/dlthub/dbt_generator/templates/table_mart.sql.j2 +22 -0
  46. dlthub-0.18.0a0/dlthub/dbt_generator/templates/table_processed_load_ids.sql.j2 +11 -0
  47. dlthub-0.18.0a0/dlthub/dbt_generator/templates/table_staging.sql.j2 +33 -0
  48. dlthub-0.18.0a0/dlthub/dbt_generator/types.py +7 -0
  49. dlthub-0.18.0a0/dlthub/dbt_generator/utils.py +305 -0
  50. dlthub-0.18.0a0/dlthub/destinations/__init__.py +6 -0
  51. dlthub-0.18.0a0/dlthub/destinations/adapters.py +8 -0
  52. dlthub-0.18.0a0/dlthub/destinations/dataset.py +89 -0
  53. dlthub-0.18.0a0/dlthub/destinations/impl/__init__.py +0 -0
  54. dlthub-0.18.0a0/dlthub/destinations/impl/filesystem/__init__.py +0 -0
  55. dlthub-0.18.0a0/dlthub/destinations/impl/filesystem/factory.py +19 -0
  56. dlthub-0.18.0a0/dlthub/destinations/impl/iceberg/README.md +46 -0
  57. dlthub-0.18.0a0/dlthub/destinations/impl/iceberg/__init__.py +0 -0
  58. dlthub-0.18.0a0/dlthub/destinations/impl/iceberg/configuration.py +273 -0
  59. dlthub-0.18.0a0/dlthub/destinations/impl/iceberg/factory.py +85 -0
  60. dlthub-0.18.0a0/dlthub/destinations/impl/iceberg/iceberg.py +1125 -0
  61. dlthub-0.18.0a0/dlthub/destinations/impl/iceberg/iceberg_adapter.py +258 -0
  62. dlthub-0.18.0a0/dlthub/destinations/impl/iceberg/sql_client.py +311 -0
  63. dlthub-0.18.0a0/dlthub/destinations/impl/snowflake_plus/__init__.py +0 -0
  64. dlthub-0.18.0a0/dlthub/destinations/impl/snowflake_plus/configuration.py +20 -0
  65. dlthub-0.18.0a0/dlthub/destinations/impl/snowflake_plus/exceptions.py +17 -0
  66. dlthub-0.18.0a0/dlthub/destinations/impl/snowflake_plus/factory.py +203 -0
  67. dlthub-0.18.0a0/dlthub/destinations/impl/snowflake_plus/snowflake_plus.py +108 -0
  68. dlthub-0.18.0a0/dlthub/destinations/utils.py +10 -0
  69. dlthub-0.18.0a0/dlthub/legacy/__init__.py +0 -0
  70. dlthub-0.18.0a0/dlthub/legacy/transformations/__init__.py +0 -0
  71. dlthub-0.18.0a0/dlthub/legacy/transformations/base_transformation.py +135 -0
  72. dlthub-0.18.0a0/dlthub/legacy/transformations/cli.py +134 -0
  73. dlthub-0.18.0a0/dlthub/legacy/transformations/config.py +26 -0
  74. dlthub-0.18.0a0/dlthub/legacy/transformations/const.py +4 -0
  75. dlthub-0.18.0a0/dlthub/legacy/transformations/dataframes/__init__.py +203 -0
  76. dlthub-0.18.0a0/dlthub/legacy/transformations/dataframes/decorators.py +66 -0
  77. dlthub-0.18.0a0/dlthub/legacy/transformations/dataframes/templates/__init__.py +0 -0
  78. dlthub-0.18.0a0/dlthub/legacy/transformations/dataframes/templates/dataframes_header_template.py +57 -0
  79. dlthub-0.18.0a0/dlthub/legacy/transformations/dataframes/templates/dataframes_table_template.py +30 -0
  80. dlthub-0.18.0a0/dlthub/legacy/transformations/dataframes/templates/dataframes_transformation_group_template.py +4 -0
  81. dlthub-0.18.0a0/dlthub/legacy/transformations/dbt/__init__.py +52 -0
  82. dlthub-0.18.0a0/dlthub/legacy/transformations/transformations.py +19 -0
  83. dlthub-0.18.0a0/dlthub/mcp/__init__.py +4 -0
  84. dlthub-0.18.0a0/dlthub/mcp/prompts/__init__.py +1 -0
  85. dlthub-0.18.0a0/dlthub/mcp/prompts/project.py +93 -0
  86. dlthub-0.18.0a0/dlthub/mcp/resources/__init__.py +1 -0
  87. dlthub-0.18.0a0/dlthub/mcp/resources/docs.py +966 -0
  88. dlthub-0.18.0a0/dlthub/mcp/server.py +53 -0
  89. dlthub-0.18.0a0/dlthub/mcp/tools/__init__.py +1 -0
  90. dlthub-0.18.0a0/dlthub/mcp/tools/mcp_tools.py +204 -0
  91. dlthub-0.18.0a0/dlthub/mcp/tools/project.py +286 -0
  92. dlthub-0.18.0a0/dlthub/project/__init__.py +16 -0
  93. dlthub-0.18.0a0/dlthub/project/_templates/__init__.py +0 -0
  94. dlthub-0.18.0a0/dlthub/project/_templates/project/__init__.py +22 -0
  95. dlthub-0.18.0a0/dlthub/project/_templates/project/dlt.yml +19 -0
  96. dlthub-0.18.0a0/dlthub/project/_templates/project/package_init.py +41 -0
  97. dlthub-0.18.0a0/dlthub/project/_templates/project/pyproject.toml +15 -0
  98. dlthub-0.18.0a0/dlthub/project/_templates/sources/__init__.py +0 -0
  99. dlthub-0.18.0a0/dlthub/project/_templates/sources/arrow.py +39 -0
  100. dlthub-0.18.0a0/dlthub/project/_templates/sources/dataframes.py +39 -0
  101. dlthub-0.18.0a0/dlthub/project/_templates/sources/python.py +33 -0
  102. dlthub-0.18.0a0/dlthub/project/catalog.py +45 -0
  103. dlthub-0.18.0a0/dlthub/project/cli/__init__.py +0 -0
  104. dlthub-0.18.0a0/dlthub/project/cli/dataset_command.py +174 -0
  105. dlthub-0.18.0a0/dlthub/project/cli/destination_command.py +116 -0
  106. dlthub-0.18.0a0/dlthub/project/cli/formatters.py +20 -0
  107. dlthub-0.18.0a0/dlthub/project/cli/helpers.py +770 -0
  108. dlthub-0.18.0a0/dlthub/project/cli/pipeline_command.py +259 -0
  109. dlthub-0.18.0a0/dlthub/project/cli/profile_command.py +115 -0
  110. dlthub-0.18.0a0/dlthub/project/cli/project_command.py +453 -0
  111. dlthub-0.18.0a0/dlthub/project/cli/source_command.py +201 -0
  112. dlthub-0.18.0a0/dlthub/project/cli/write_state.py +120 -0
  113. dlthub-0.18.0a0/dlthub/project/config/__init__.py +0 -0
  114. dlthub-0.18.0a0/dlthub/project/config/config.py +129 -0
  115. dlthub-0.18.0a0/dlthub/project/config/config_loader.py +198 -0
  116. dlthub-0.18.0a0/dlthub/project/config/interpolation.py +45 -0
  117. dlthub-0.18.0a0/dlthub/project/config/typing.py +81 -0
  118. dlthub-0.18.0a0/dlthub/project/config/utils.py +13 -0
  119. dlthub-0.18.0a0/dlthub/project/config/yaml_loader.py +41 -0
  120. dlthub-0.18.0a0/dlthub/project/current.py +68 -0
  121. dlthub-0.18.0a0/dlthub/project/entity_factory.py +579 -0
  122. dlthub-0.18.0a0/dlthub/project/exceptions.py +84 -0
  123. dlthub-0.18.0a0/dlthub/project/pipeline_manager.py +60 -0
  124. dlthub-0.18.0a0/dlthub/project/project_context.py +460 -0
  125. dlthub-0.18.0a0/dlthub/project/tests/__init__.py +16 -0
  126. dlthub-0.18.0a0/dlthub/project/tests/fixtures.py +43 -0
  127. dlthub-0.18.0a0/dlthub/py.typed +0 -0
  128. dlthub-0.18.0a0/dlthub/sources/__init__.py +0 -0
  129. dlthub-0.18.0a0/dlthub/sources/_core_source_templates/__init__.py +0 -0
  130. dlthub-0.18.0a0/dlthub/sources/_core_source_templates/mssql_pipeline.py +91 -0
  131. dlthub-0.18.0a0/dlthub/sources/mssql/__init__.py +304 -0
  132. dlthub-0.18.0a0/dlthub/transformations/__init__.py +5 -0
  133. dlthub-0.18.0a0/dlthub/transformations/configuration.py +19 -0
  134. dlthub-0.18.0a0/dlthub/transformations/decorators.py +121 -0
  135. dlthub-0.18.0a0/dlthub/transformations/exceptions.py +26 -0
  136. dlthub-0.18.0a0/dlthub/transformations/resource.py +267 -0
  137. dlthub-0.18.0a0/dlthub/transformations/typing.py +3 -0
  138. dlthub-0.18.0a0/dlthub/version.py +6 -0
  139. 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
@@ -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
@@ -0,0 +1,9 @@
1
+ from .pipeline_runner import PipelineRunner
2
+ from .trace_resource import trace_resource
3
+ from .plus_log_collector import PlusLogCollector
4
+
5
+ __all__ = [
6
+ "PipelineRunner",
7
+ "trace_resource",
8
+ "PlusLogCollector",
9
+ ]
@@ -0,0 +1,6 @@
1
+ from dlthub.common.exceptions import DltPlusException
2
+
3
+
4
+ class RunnerException(DltPlusException):
5
+ def __init__(self, msg: str):
6
+ super().__init__(msg)