etlplus 0.3.8__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 (114) hide show
  1. etlplus-0.3.8/.editorconfig +156 -0
  2. etlplus-0.3.8/.gitattributes +13 -0
  3. etlplus-0.3.8/.github/actions/python-bootstrap/action.yml +38 -0
  4. etlplus-0.3.8/.github/workflows/ci.yml +121 -0
  5. etlplus-0.3.8/.gitignore +493 -0
  6. etlplus-0.3.8/.pre-commit-config.yaml +167 -0
  7. etlplus-0.3.8/.ruff.toml +33 -0
  8. etlplus-0.3.8/CODE_OF_CONDUCT.md +132 -0
  9. etlplus-0.3.8/CONTRIBUTING.md +137 -0
  10. etlplus-0.3.8/DEMO.md +244 -0
  11. etlplus-0.3.8/LICENSE +21 -0
  12. etlplus-0.3.8/Makefile +461 -0
  13. etlplus-0.3.8/PKG-INFO +546 -0
  14. etlplus-0.3.8/README.md +505 -0
  15. etlplus-0.3.8/REFERENCES.md +115 -0
  16. etlplus-0.3.8/docs/pipeline-guide.md +507 -0
  17. etlplus-0.3.8/docs/snippets/installation_version.md +2 -0
  18. etlplus-0.3.8/etlplus/__init__.py +43 -0
  19. etlplus-0.3.8/etlplus/__main__.py +23 -0
  20. etlplus-0.3.8/etlplus/__version__.py +14 -0
  21. etlplus-0.3.8/etlplus/api/README.md +237 -0
  22. etlplus-0.3.8/etlplus/api/__init__.py +136 -0
  23. etlplus-0.3.8/etlplus/api/auth.py +432 -0
  24. etlplus-0.3.8/etlplus/api/config.py +633 -0
  25. etlplus-0.3.8/etlplus/api/endpoint_client.py +885 -0
  26. etlplus-0.3.8/etlplus/api/errors.py +170 -0
  27. etlplus-0.3.8/etlplus/api/pagination/__init__.py +47 -0
  28. etlplus-0.3.8/etlplus/api/pagination/client.py +188 -0
  29. etlplus-0.3.8/etlplus/api/pagination/config.py +440 -0
  30. etlplus-0.3.8/etlplus/api/pagination/paginator.py +775 -0
  31. etlplus-0.3.8/etlplus/api/rate_limiting/__init__.py +38 -0
  32. etlplus-0.3.8/etlplus/api/rate_limiting/config.py +343 -0
  33. etlplus-0.3.8/etlplus/api/rate_limiting/rate_limiter.py +266 -0
  34. etlplus-0.3.8/etlplus/api/request_manager.py +589 -0
  35. etlplus-0.3.8/etlplus/api/retry_manager.py +430 -0
  36. etlplus-0.3.8/etlplus/api/transport.py +325 -0
  37. etlplus-0.3.8/etlplus/api/types.py +172 -0
  38. etlplus-0.3.8/etlplus/cli.py +868 -0
  39. etlplus-0.3.8/etlplus/config/__init__.py +56 -0
  40. etlplus-0.3.8/etlplus/config/connector.py +372 -0
  41. etlplus-0.3.8/etlplus/config/jobs.py +311 -0
  42. etlplus-0.3.8/etlplus/config/pipeline.py +328 -0
  43. etlplus-0.3.8/etlplus/config/profile.py +78 -0
  44. etlplus-0.3.8/etlplus/config/types.py +204 -0
  45. etlplus-0.3.8/etlplus/config/utils.py +120 -0
  46. etlplus-0.3.8/etlplus/enums.py +414 -0
  47. etlplus-0.3.8/etlplus/extract.py +218 -0
  48. etlplus-0.3.8/etlplus/file.py +657 -0
  49. etlplus-0.3.8/etlplus/load.py +336 -0
  50. etlplus-0.3.8/etlplus/mixins.py +62 -0
  51. etlplus-0.3.8/etlplus/py.typed +0 -0
  52. etlplus-0.3.8/etlplus/run.py +368 -0
  53. etlplus-0.3.8/etlplus/run_helpers.py +843 -0
  54. etlplus-0.3.8/etlplus/transform.py +1037 -0
  55. etlplus-0.3.8/etlplus/types.py +227 -0
  56. etlplus-0.3.8/etlplus/utils.py +638 -0
  57. etlplus-0.3.8/etlplus/validate.py +493 -0
  58. etlplus-0.3.8/etlplus/validation/__init__.py +44 -0
  59. etlplus-0.3.8/etlplus/validation/utils.py +389 -0
  60. etlplus-0.3.8/etlplus.egg-info/PKG-INFO +546 -0
  61. etlplus-0.3.8/etlplus.egg-info/SOURCES.txt +112 -0
  62. etlplus-0.3.8/etlplus.egg-info/dependency_links.txt +1 -0
  63. etlplus-0.3.8/etlplus.egg-info/entry_points.txt +2 -0
  64. etlplus-0.3.8/etlplus.egg-info/requires.txt +20 -0
  65. etlplus-0.3.8/etlplus.egg-info/top_level.txt +1 -0
  66. etlplus-0.3.8/examples/README.md +72 -0
  67. etlplus-0.3.8/examples/configs/pipeline.yml +448 -0
  68. etlplus-0.3.8/examples/data/sample.csv +6 -0
  69. etlplus-0.3.8/examples/data/sample.json +7 -0
  70. etlplus-0.3.8/examples/data/sample.xml +33 -0
  71. etlplus-0.3.8/examples/data/sample.xsd +26 -0
  72. etlplus-0.3.8/examples/data/sample.yaml +22 -0
  73. etlplus-0.3.8/examples/quickstart_python.py +48 -0
  74. etlplus-0.3.8/pyproject.toml +109 -0
  75. etlplus-0.3.8/pytest.ini +12 -0
  76. etlplus-0.3.8/setup.cfg +4 -0
  77. etlplus-0.3.8/setup.py +68 -0
  78. etlplus-0.3.8/tests/__init__.py +10 -0
  79. etlplus-0.3.8/tests/conftest.py +11 -0
  80. etlplus-0.3.8/tests/integration/conftest.py +308 -0
  81. etlplus-0.3.8/tests/integration/test_i_cli.py +348 -0
  82. etlplus-0.3.8/tests/integration/test_i_examples_data_parity.py +73 -0
  83. etlplus-0.3.8/tests/integration/test_i_pagination_strategy.py +452 -0
  84. etlplus-0.3.8/tests/integration/test_i_pipeline_smoke.py +104 -0
  85. etlplus-0.3.8/tests/integration/test_i_pipeline_yaml_load.py +51 -0
  86. etlplus-0.3.8/tests/integration/test_i_run.py +133 -0
  87. etlplus-0.3.8/tests/integration/test_i_run_profile_pagination_defaults.py +106 -0
  88. etlplus-0.3.8/tests/integration/test_i_run_profile_rate_limit_defaults.py +77 -0
  89. etlplus-0.3.8/tests/unit/api/conftest.py +193 -0
  90. etlplus-0.3.8/tests/unit/api/test_u_auth.py +320 -0
  91. etlplus-0.3.8/tests/unit/api/test_u_config.py +637 -0
  92. etlplus-0.3.8/tests/unit/api/test_u_endpoint_client.py +1490 -0
  93. etlplus-0.3.8/tests/unit/api/test_u_mocks.py +205 -0
  94. etlplus-0.3.8/tests/unit/api/test_u_pagination_client.py +177 -0
  95. etlplus-0.3.8/tests/unit/api/test_u_pagination_config.py +260 -0
  96. etlplus-0.3.8/tests/unit/api/test_u_paginator.py +386 -0
  97. etlplus-0.3.8/tests/unit/api/test_u_rate_limit_config.py +239 -0
  98. etlplus-0.3.8/tests/unit/api/test_u_rate_limiter.py +365 -0
  99. etlplus-0.3.8/tests/unit/api/test_u_request_manager.py +134 -0
  100. etlplus-0.3.8/tests/unit/api/test_u_retry_manager.py +73 -0
  101. etlplus-0.3.8/tests/unit/api/test_u_transport.py +147 -0
  102. etlplus-0.3.8/tests/unit/config/test_u_connector.py +54 -0
  103. etlplus-0.3.8/tests/unit/config/test_u_pipeline.py +194 -0
  104. etlplus-0.3.8/tests/unit/conftest.py +798 -0
  105. etlplus-0.3.8/tests/unit/test_u_cli.py +124 -0
  106. etlplus-0.3.8/tests/unit/test_u_extract.py +288 -0
  107. etlplus-0.3.8/tests/unit/test_u_file.py +100 -0
  108. etlplus-0.3.8/tests/unit/test_u_load.py +484 -0
  109. etlplus-0.3.8/tests/unit/test_u_transform.py +483 -0
  110. etlplus-0.3.8/tests/unit/test_u_utils.py +161 -0
  111. etlplus-0.3.8/tests/unit/test_u_validate.py +193 -0
  112. etlplus-0.3.8/tests/unit/validation/test_u_validation_utils.py +183 -0
  113. etlplus-0.3.8/tools/run_pipeline.py +561 -0
  114. etlplus-0.3.8/tools/update_demo_snippets.py +186 -0
@@ -0,0 +1,156 @@
1
+ # .editorconfig
2
+ # ETLPlus
3
+ #
4
+ # Copyright © 2025 Dagitali LLC. All rights reserved.
5
+ #
6
+ # The EditorConfig file. Defines coding styles and a collection of text editor
7
+ # plugins that enable editors to read the file format and adhere to defined
8
+ # styles. Helps maintain consistent coding styles for multiple developers
9
+ # working on the same project across various editors and IDEs.
10
+ #
11
+ # See:
12
+ # 1. https://editorconfig.org/#file-format-details
13
+ # 2. https://github.com/jokeyrhyme/standard-editorconfig
14
+
15
+ # Top-most EditorConfig file
16
+ root = true
17
+
18
+ # Defaults
19
+ [*]
20
+ charset = utf-8
21
+ end_of_line = lf
22
+ insert_final_newline = true
23
+ trim_trailing_whitespace = true
24
+
25
+ # Bazel
26
+ # https://bazel.build/
27
+ # https://github.com/bazelbuild/buildtools/blob/master/BUILD.bazel
28
+ [*.{bazel,bzl}]
29
+ indent_size = 4
30
+ indent_style = space
31
+
32
+ # CSS
33
+ # https://google.github.io/styleguide/htmlcssguide.xml#General_Formatting_Rules
34
+ # http://cssguidelin.es/#syntax-and-formatting
35
+ [*.css]
36
+ indent_size = 2
37
+ indent_style = space
38
+ trim_trailing_whitespace = true
39
+
40
+ # GNU Make
41
+ # https://www.gnu.org/software/make/manual/html_node/Recipe-Syntax.html
42
+ [Makefile,*.mk]
43
+ indent_style = tab
44
+
45
+ # Go
46
+ # https://golang.org/cmd/gofmt/
47
+ [{go.mod,*.go}]
48
+ indent_style = tab
49
+
50
+ # GraphQL
51
+ # https://graphql.org/learn/
52
+ # https://prettier.io
53
+ [*.graphql]
54
+ indent_size = 2
55
+ indent_style = space
56
+
57
+ # HTML
58
+ # https://google.github.io/styleguide/htmlcssguide.xml#General_Formatting_Rules
59
+ [*.{htm,html}]
60
+ indent_size = 2
61
+ indent_style = space
62
+ trim_trailing_whitespace = true
63
+
64
+ # Java
65
+ # https://google.github.io/styleguide/javaguide.html#s4.2-block-indentation
66
+ [*.java]
67
+ indent_size = 2
68
+ indent_style = space
69
+
70
+ # JavaScript, JSON, JSX, JavaScript Modules, TypeScript
71
+ # https://github.com/feross/standard
72
+ # https://prettier.io
73
+ [*.{cjs,js,json,jsx,mjs,ts,tsx}]
74
+ indent_size = 2
75
+ indent_style = space
76
+
77
+ # Kotlin
78
+ # https://android.github.io/kotlin-guides/style.html#indentation
79
+ [*.{kt,kts}]
80
+ indent_size = 4
81
+ indent_style = space
82
+
83
+ # LESS
84
+ # https://github.com/less/less-docs#less-standards
85
+ [*.less]
86
+ indent_size = 2
87
+ indent_style = space
88
+
89
+ # Lua
90
+ # http://lua-users.org/wiki/LuaStyleGuide
91
+ [*.{lua,luacheckrc}]
92
+ indent_size = 2
93
+ indent_style = space
94
+
95
+ # PHP
96
+ # http://www.php-fig.org/psr/psr-2/
97
+ [*.php]
98
+ indent_size = 4
99
+ indent_style = space
100
+
101
+ # Python
102
+ # https://www.python.org/dev/peps/pep-0008/#code-lay-out
103
+ [*.py]
104
+ indent_size = 4
105
+ indent_style = space
106
+
107
+ # Ruby
108
+ # http://www.caliban.org/ruby/rubyguide.shtml#indentation
109
+ [*.rb]
110
+ indent_size = 2
111
+ indent_style = space
112
+
113
+ # Rust
114
+ # https://github.com/rust-lang/rust/blob/master/src/doc/style/style/whitespace.md
115
+ [*.rs]
116
+ indent_size = 4
117
+ indent_style = space
118
+ insert_final_newline = false
119
+ trim_trailing_whitespace = true
120
+
121
+ # SASS
122
+ # https://sass-guidelin.es/#syntax--formatting
123
+ [*.{sass,scss}]
124
+ indent_size = 2
125
+ indent_style = space
126
+
127
+ # Shell
128
+ # https://google.github.io/styleguide/shell.xml#Indentation
129
+ [*.{bash,sh,zsh}]
130
+ indent_size = 2
131
+ indent_style = space
132
+
133
+ # Svelte
134
+ # https://github.com/sveltejs/svelte/blob/master/.editorconfig
135
+ [*.svelte]
136
+ indent_size = 2
137
+ indent_style = tab
138
+
139
+ # TOML
140
+ # https://github.com/toml-lang/toml/tree/master/examples
141
+ [*.toml]
142
+ indent_size = 2
143
+ indent_style = space
144
+
145
+ # Vue.js
146
+ # https://eslint.vuejs.org/rules/html-indent.html
147
+ # https://eslint.vuejs.org/rules/script-indent.html
148
+ [*.vue]
149
+ indent_size = 2
150
+ indent_style = space
151
+
152
+ # YAML
153
+ # http://yaml.org/spec/1.2/2009-07-21/spec.html#id2576668
154
+ [*.{yaml,yml}]
155
+ indent_size = 2
156
+ indent_style = space
@@ -0,0 +1,13 @@
1
+ # .gitattributes
2
+ # ETLPlus
3
+ #
4
+ # Copyright © 2025 Dagitali LLC. All rights reserved.
5
+ #
6
+ # An optional Git configuration file. Defines attributes per pathname.
7
+ #
8
+ # See:
9
+ # 1. https://fileinfo.com/extension/gitattributes
10
+ # 2. https://git-scm.com/docs/gitattributes
11
+
12
+ # Auto detect text files and perform LF normalization
13
+ * text=auto
@@ -0,0 +1,38 @@
1
+ # action.yml
2
+ # ETLPlus
3
+ #
4
+ # Copyright © 2025 Dagitali LLC. All rights reserved.
5
+ #
6
+ # A GitHub Actions action to set up Python and install Python package
7
+ # dependencies.
8
+
9
+ ---
10
+
11
+ name: Setup Python and Install Dependencies
12
+
13
+ description: >-
14
+ Sets up the requested Python runtime, upgrades pip, and installs the provided
15
+ dependency list to keep workflow jobs consistent.
16
+
17
+ inputs:
18
+ python-version:
19
+ description: Python version to install via actions/setup-python
20
+ required: true
21
+ python-bootstrap:
22
+ description: Arguments passed to "pip install"
23
+ required: true
24
+
25
+ runs:
26
+ using: composite
27
+ steps:
28
+ - uses: actions/setup-python@v5
29
+ with:
30
+ python-version: ${{ inputs.python-version }}
31
+
32
+ - name: Upgrade pip
33
+ shell: bash
34
+ run: python -m pip install --upgrade pip
35
+
36
+ - name: Install dependencies
37
+ shell: bash
38
+ run: pip install ${{ inputs.python-bootstrap }}
@@ -0,0 +1,121 @@
1
+ # ci.yml
2
+ # ETLPlus
3
+ #
4
+ # Copyright © 2025 Dagitali LLC. All rights reserved.
5
+ #
6
+ # A GitHub Actions workflow configuration file for Continuous Integration (CI).
7
+
8
+ ---
9
+
10
+ name: CI
11
+
12
+ on:
13
+ push:
14
+ branches: [ main, '**/feature/**', '**/fix/**', '**/chore/**' ]
15
+ tags: [ 'v*.*.*' ]
16
+ pull_request:
17
+
18
+ permissions:
19
+ contents: read
20
+ id-token: write
21
+
22
+ jobs:
23
+ lint:
24
+ runs-on: ubuntu-latest
25
+ steps:
26
+ - uses: actions/checkout@v4
27
+ with:
28
+ fetch-depth: 0
29
+ - uses: ./.github/actions/python-bootstrap
30
+ with:
31
+ python-version: '3.13'
32
+ python-bootstrap: ".[dev]"
33
+ - name: Ruff check
34
+ run: |
35
+ ruff version
36
+ ruff check .
37
+ ruff format --check .
38
+
39
+ test:
40
+ runs-on: ubuntu-latest
41
+ strategy:
42
+ matrix:
43
+ python-version: ['3.13', '3.14']
44
+ steps:
45
+ - uses: actions/checkout@v4
46
+ with:
47
+ fetch-depth: 0
48
+ - uses: ./.github/actions/python-bootstrap
49
+ with:
50
+ python-version: ${{ matrix.python-version }}
51
+ python-bootstrap: "-e .[dev,yaml]"
52
+ - name: Run tests
53
+ run: |
54
+ pytest -q
55
+
56
+ build:
57
+ name: Build distributions
58
+ runs-on: ubuntu-latest
59
+ if: startsWith(github.ref, 'refs/tags/v')
60
+ needs: [lint, test]
61
+ steps:
62
+ - uses: actions/checkout@v4
63
+ with:
64
+ fetch-depth: 0
65
+ - uses: ./.github/actions/python-bootstrap
66
+ with:
67
+ python-version: '3.13'
68
+ python-bootstrap: build
69
+ - name: Build distributions
70
+ run: |
71
+ python -m build
72
+ - name: Upload distributions
73
+ uses: actions/upload-artifact@v4
74
+ with:
75
+ name: dist-artifacts
76
+ path: dist/*
77
+ if-no-files-found: error
78
+
79
+ release:
80
+ name: Publish GitHub Release
81
+ runs-on: ubuntu-latest
82
+ if: startsWith(github.ref, 'refs/tags/v')
83
+ needs: build
84
+ permissions:
85
+ contents: write
86
+ steps:
87
+ - uses: actions/checkout@v4
88
+ with:
89
+ fetch-depth: 0
90
+ - name: Download distributions
91
+ uses: actions/download-artifact@v4
92
+ with:
93
+ name: dist-artifacts
94
+ path: dist
95
+ - name: Publish GitHub release
96
+ uses: softprops/action-gh-release@v2
97
+ with:
98
+ files: dist/*
99
+ generate_release_notes: true
100
+
101
+ publish:
102
+ name: Publish to PyPI
103
+ runs-on: ubuntu-latest
104
+ if: startsWith(github.ref, 'refs/tags/v')
105
+ needs: build
106
+ environment:
107
+ name: pypi
108
+ url: https://pypi.org/project/etlplus/
109
+ steps:
110
+ - uses: actions/checkout@v4
111
+ with:
112
+ fetch-depth: 0
113
+ - name: Download distributions
114
+ uses: actions/download-artifact@v4
115
+ with:
116
+ name: dist-artifacts
117
+ path: dist
118
+ - name: Publish to PyPI
119
+ uses: pypa/gh-action-pypi-publish@release/v1
120
+ with:
121
+ verbose: true