etlplus 0.16.7__tar.gz → 0.16.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 (236) hide show
  1. {etlplus-0.16.7 → etlplus-0.16.8}/CONTRIBUTING.md +10 -4
  2. {etlplus-0.16.7/etlplus.egg-info → etlplus-0.16.8}/PKG-INFO +4 -2
  3. {etlplus-0.16.7 → etlplus-0.16.8}/README.md +3 -1
  4. {etlplus-0.16.7 → etlplus-0.16.8/etlplus.egg-info}/PKG-INFO +4 -2
  5. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus.egg-info/SOURCES.txt +2 -1
  6. etlplus-0.16.8/pytest.ini +13 -0
  7. etlplus-0.16.8/tests/README.md +38 -0
  8. etlplus-0.16.7/tests/integration/test_i_pipeline_smoke.py → etlplus-0.16.8/tests/smoke/test_s_pipeline.py +6 -7
  9. etlplus-0.16.7/pytest.ini +0 -12
  10. {etlplus-0.16.7 → etlplus-0.16.8}/.coveragerc +0 -0
  11. {etlplus-0.16.7 → etlplus-0.16.8}/.editorconfig +0 -0
  12. {etlplus-0.16.7 → etlplus-0.16.8}/.gitattributes +0 -0
  13. {etlplus-0.16.7 → etlplus-0.16.8}/.github/actions/python-bootstrap/action.yml +0 -0
  14. {etlplus-0.16.7 → etlplus-0.16.8}/.github/workflows/ci.yml +0 -0
  15. {etlplus-0.16.7 → etlplus-0.16.8}/.gitignore +0 -0
  16. {etlplus-0.16.7 → etlplus-0.16.8}/.pre-commit-config.yaml +0 -0
  17. {etlplus-0.16.7 → etlplus-0.16.8}/.ruff.toml +0 -0
  18. {etlplus-0.16.7 → etlplus-0.16.8}/CODE_OF_CONDUCT.md +0 -0
  19. {etlplus-0.16.7 → etlplus-0.16.8}/DEMO.md +0 -0
  20. {etlplus-0.16.7 → etlplus-0.16.8}/LICENSE +0 -0
  21. {etlplus-0.16.7 → etlplus-0.16.8}/MANIFEST.in +0 -0
  22. {etlplus-0.16.7 → etlplus-0.16.8}/Makefile +0 -0
  23. {etlplus-0.16.7 → etlplus-0.16.8}/REFERENCES.md +0 -0
  24. {etlplus-0.16.7 → etlplus-0.16.8}/SECURITY.md +0 -0
  25. {etlplus-0.16.7 → etlplus-0.16.8}/SUPPORT.md +0 -0
  26. {etlplus-0.16.7 → etlplus-0.16.8}/docs/README.md +0 -0
  27. {etlplus-0.16.7 → etlplus-0.16.8}/docs/pipeline-guide.md +0 -0
  28. {etlplus-0.16.7 → etlplus-0.16.8}/docs/snippets/installation_version.md +0 -0
  29. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/README.md +0 -0
  30. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/__init__.py +0 -0
  31. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/__main__.py +0 -0
  32. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/__version__.py +0 -0
  33. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/api/README.md +0 -0
  34. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/api/__init__.py +0 -0
  35. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/api/auth.py +0 -0
  36. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/api/config.py +0 -0
  37. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/api/endpoint_client.py +0 -0
  38. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/api/enums.py +0 -0
  39. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/api/errors.py +0 -0
  40. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/api/pagination/__init__.py +0 -0
  41. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/api/pagination/client.py +0 -0
  42. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/api/pagination/config.py +0 -0
  43. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/api/pagination/paginator.py +0 -0
  44. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/api/rate_limiting/__init__.py +0 -0
  45. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/api/rate_limiting/config.py +0 -0
  46. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/api/rate_limiting/rate_limiter.py +0 -0
  47. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/api/request_manager.py +0 -0
  48. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/api/retry_manager.py +0 -0
  49. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/api/transport.py +0 -0
  50. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/api/types.py +0 -0
  51. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/api/utils.py +0 -0
  52. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/cli/README.md +0 -0
  53. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/cli/__init__.py +0 -0
  54. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/cli/commands.py +0 -0
  55. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/cli/constants.py +0 -0
  56. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/cli/handlers.py +0 -0
  57. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/cli/io.py +0 -0
  58. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/cli/main.py +0 -0
  59. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/cli/options.py +0 -0
  60. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/cli/state.py +0 -0
  61. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/cli/types.py +0 -0
  62. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/config.py +0 -0
  63. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/connector/__init__.py +0 -0
  64. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/connector/api.py +0 -0
  65. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/connector/connector.py +0 -0
  66. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/connector/core.py +0 -0
  67. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/connector/database.py +0 -0
  68. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/connector/enums.py +0 -0
  69. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/connector/file.py +0 -0
  70. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/connector/types.py +0 -0
  71. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/connector/utils.py +0 -0
  72. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/database/README.md +0 -0
  73. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/database/__init__.py +0 -0
  74. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/database/ddl.py +0 -0
  75. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/database/engine.py +0 -0
  76. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/database/orm.py +0 -0
  77. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/database/schema.py +0 -0
  78. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/database/types.py +0 -0
  79. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/enums.py +0 -0
  80. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/README.md +0 -0
  81. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/__init__.py +0 -0
  82. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/_imports.py +0 -0
  83. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/_io.py +0 -0
  84. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/accdb.py +0 -0
  85. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/arrow.py +0 -0
  86. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/avro.py +0 -0
  87. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/bson.py +0 -0
  88. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/cbor.py +0 -0
  89. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/cfg.py +0 -0
  90. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/conf.py +0 -0
  91. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/core.py +0 -0
  92. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/csv.py +0 -0
  93. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/dat.py +0 -0
  94. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/dta.py +0 -0
  95. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/duckdb.py +0 -0
  96. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/enums.py +0 -0
  97. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/feather.py +0 -0
  98. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/fwf.py +0 -0
  99. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/gz.py +0 -0
  100. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/hbs.py +0 -0
  101. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/hdf5.py +0 -0
  102. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/ini.py +0 -0
  103. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/ion.py +0 -0
  104. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/jinja2.py +0 -0
  105. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/json.py +0 -0
  106. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/log.py +0 -0
  107. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/mat.py +0 -0
  108. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/mdb.py +0 -0
  109. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/msgpack.py +0 -0
  110. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/mustache.py +0 -0
  111. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/nc.py +0 -0
  112. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/ndjson.py +0 -0
  113. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/numbers.py +0 -0
  114. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/ods.py +0 -0
  115. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/orc.py +0 -0
  116. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/parquet.py +0 -0
  117. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/pb.py +0 -0
  118. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/pbf.py +0 -0
  119. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/properties.py +0 -0
  120. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/proto.py +0 -0
  121. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/psv.py +0 -0
  122. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/rda.py +0 -0
  123. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/rds.py +0 -0
  124. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/sas7bdat.py +0 -0
  125. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/sav.py +0 -0
  126. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/sqlite.py +0 -0
  127. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/stub.py +0 -0
  128. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/sylk.py +0 -0
  129. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/tab.py +0 -0
  130. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/toml.py +0 -0
  131. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/tsv.py +0 -0
  132. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/txt.py +0 -0
  133. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/vm.py +0 -0
  134. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/wks.py +0 -0
  135. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/xls.py +0 -0
  136. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/xlsm.py +0 -0
  137. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/xlsx.py +0 -0
  138. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/xml.py +0 -0
  139. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/xpt.py +0 -0
  140. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/yaml.py +0 -0
  141. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/zip.py +0 -0
  142. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/zsav.py +0 -0
  143. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/mixins.py +0 -0
  144. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/ops/README.md +0 -0
  145. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/ops/__init__.py +0 -0
  146. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/ops/enums.py +0 -0
  147. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/ops/extract.py +0 -0
  148. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/ops/load.py +0 -0
  149. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/ops/run.py +0 -0
  150. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/ops/transform.py +0 -0
  151. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/ops/types.py +0 -0
  152. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/ops/utils.py +0 -0
  153. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/ops/validate.py +0 -0
  154. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/py.typed +0 -0
  155. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/templates/README.md +0 -0
  156. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/templates/__init__.py +0 -0
  157. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/templates/ddl.sql.j2 +0 -0
  158. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/templates/view.sql.j2 +0 -0
  159. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/types.py +0 -0
  160. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/utils.py +0 -0
  161. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/workflow/README.md +0 -0
  162. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/workflow/__init__.py +0 -0
  163. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/workflow/dag.py +0 -0
  164. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/workflow/jobs.py +0 -0
  165. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/workflow/profile.py +0 -0
  166. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus.egg-info/dependency_links.txt +0 -0
  167. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus.egg-info/entry_points.txt +0 -0
  168. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus.egg-info/requires.txt +0 -0
  169. {etlplus-0.16.7 → etlplus-0.16.8}/etlplus.egg-info/top_level.txt +0 -0
  170. {etlplus-0.16.7 → etlplus-0.16.8}/examples/README.md +0 -0
  171. {etlplus-0.16.7 → etlplus-0.16.8}/examples/configs/ddl_spec.yml +0 -0
  172. {etlplus-0.16.7 → etlplus-0.16.8}/examples/configs/pipeline.yml +0 -0
  173. {etlplus-0.16.7 → etlplus-0.16.8}/examples/data/sample.csv +0 -0
  174. {etlplus-0.16.7 → etlplus-0.16.8}/examples/data/sample.json +0 -0
  175. {etlplus-0.16.7 → etlplus-0.16.8}/examples/data/sample.xml +0 -0
  176. {etlplus-0.16.7 → etlplus-0.16.8}/examples/data/sample.xsd +0 -0
  177. {etlplus-0.16.7 → etlplus-0.16.8}/examples/data/sample.yaml +0 -0
  178. {etlplus-0.16.7 → etlplus-0.16.8}/examples/quickstart.py +0 -0
  179. {etlplus-0.16.7 → etlplus-0.16.8}/pyproject.toml +0 -0
  180. {etlplus-0.16.7 → etlplus-0.16.8}/setup.cfg +0 -0
  181. {etlplus-0.16.7 → etlplus-0.16.8}/setup.py +0 -0
  182. {etlplus-0.16.7 → etlplus-0.16.8}/tests/__init__.py +0 -0
  183. {etlplus-0.16.7 → etlplus-0.16.8}/tests/conftest.py +0 -0
  184. {etlplus-0.16.7 → etlplus-0.16.8}/tests/integration/conftest.py +0 -0
  185. {etlplus-0.16.7 → etlplus-0.16.8}/tests/integration/test_i_cli.py +0 -0
  186. {etlplus-0.16.7 → etlplus-0.16.8}/tests/integration/test_i_config_load.py +0 -0
  187. {etlplus-0.16.7 → etlplus-0.16.8}/tests/integration/test_i_examples_data_parity.py +0 -0
  188. {etlplus-0.16.7 → etlplus-0.16.8}/tests/integration/test_i_pagination_strategy.py +0 -0
  189. {etlplus-0.16.7 → etlplus-0.16.8}/tests/integration/test_i_run.py +0 -0
  190. {etlplus-0.16.7 → etlplus-0.16.8}/tests/integration/test_i_run_profile_pagination_defaults.py +0 -0
  191. {etlplus-0.16.7 → etlplus-0.16.8}/tests/integration/test_i_run_profile_rate_limit_defaults.py +0 -0
  192. {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/api/conftest.py +0 -0
  193. {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/api/test_u_api_auth.py +0 -0
  194. {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/api/test_u_api_config.py +0 -0
  195. {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/api/test_u_api_endpoint_client.py +0 -0
  196. {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/api/test_u_api_enums.py +0 -0
  197. {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/api/test_u_api_mocks.py +0 -0
  198. {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/api/test_u_api_pagination_client.py +0 -0
  199. {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/api/test_u_api_pagination_config.py +0 -0
  200. {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/api/test_u_api_paginator.py +0 -0
  201. {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/api/test_u_api_rate_limit_config.py +0 -0
  202. {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/api/test_u_api_rate_limiter.py +0 -0
  203. {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/api/test_u_api_request_manager.py +0 -0
  204. {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/api/test_u_api_retry_manager.py +0 -0
  205. {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/api/test_u_api_transport.py +0 -0
  206. {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/api/test_u_api_types.py +0 -0
  207. {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/api/test_u_api_utils.py +0 -0
  208. {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/cli/conftest.py +0 -0
  209. {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/cli/test_u_cli_handlers.py +0 -0
  210. {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/cli/test_u_cli_io.py +0 -0
  211. {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/cli/test_u_cli_main.py +0 -0
  212. {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/cli/test_u_cli_state.py +0 -0
  213. {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/conftest.py +0 -0
  214. {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/connector/test_u_connector_enums.py +0 -0
  215. {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/connector/test_u_connector_utils.py +0 -0
  216. {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/database/test_u_database_ddl.py +0 -0
  217. {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/database/test_u_database_engine.py +0 -0
  218. {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/database/test_u_database_orm.py +0 -0
  219. {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/database/test_u_database_schema.py +0 -0
  220. {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/file/test_u_file_core.py +0 -0
  221. {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/file/test_u_file_enums.py +0 -0
  222. {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/file/test_u_file_yaml.py +0 -0
  223. {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/ops/test_u_ops_enums.py +0 -0
  224. {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/ops/test_u_ops_extract.py +0 -0
  225. {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/ops/test_u_ops_load.py +0 -0
  226. {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/ops/test_u_ops_run.py +0 -0
  227. {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/ops/test_u_ops_transform.py +0 -0
  228. {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/ops/test_u_ops_utils.py +0 -0
  229. {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/ops/test_u_ops_validate.py +0 -0
  230. {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/test_u_config.py +0 -0
  231. {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/test_u_main.py +0 -0
  232. {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/test_u_mixins.py +0 -0
  233. {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/test_u_utils.py +0 -0
  234. {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/test_u_version.py +0 -0
  235. {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/workflow/test_u_workflow_jobs.py +0 -0
  236. {etlplus-0.16.7 → etlplus-0.16.8}/tools/update_demo_snippets.py +0 -0
@@ -14,7 +14,7 @@ email, or any other method with the owners of this repository before making a ch
14
14
  - [Type Checking](#type-checking)
15
15
  - [Typing Philosophy](#typing-philosophy)
16
16
  - [Testing](#testing)
17
- - [Unit vs. Integration](#unit-vs-integration)
17
+ - [Unit vs. Smoke vs. Integration](#unit-vs-smoke-vs-integration)
18
18
  - [Where to put tests](#where-to-put-tests)
19
19
  - [Common patterns](#common-patterns)
20
20
 
@@ -104,9 +104,9 @@ class ExampleConfig:
104
104
 
105
105
  ## Testing
106
106
 
107
- ### Unit vs. Integration
107
+ ### Unit vs. Smoke vs. Integration
108
108
 
109
- Use these guidelines to decide whether a test belongs in the unit or integration suite:
109
+ Use these guidelines to decide whether a test belongs in the unit, smoke, or integration suite:
110
110
 
111
111
  - Unit tests (put under `tests/unit/`):
112
112
  - Exercise a single function or class in isolation (no orchestration across modules).
@@ -117,13 +117,19 @@ Use these guidelines to decide whether a test belongs in the unit or integration
117
117
  - Integration tests (put under `tests/integration/`):
118
118
  - Exercise end-to-end flows across modules and boundaries (CLI `main()`, `run()` pipeline orchestration, file connectors, API client pagination wiring).
119
119
  - Can use temporary files/directories, and stub network with fakes/mocks.
120
- - Examples in this repo: CLI end-to-end, pipeline smoke tests, pagination strategy, runner defaults for pagination/rate limits, target URL composition.
120
+ - Examples in this repo: CLI end-to-end, pagination strategy, runner defaults for pagination/rate limits, target URL composition.
121
+
122
+ - Smoke tests (put under `tests/smoke/`):
123
+ - Minimal end-to-end checks for core flows; very fast and stable.
124
+ - May touch temporary files but avoid external network calls.
125
+ - Examples in this repo: pipeline smoke tests.
121
126
 
122
127
  If a test calls `etlplus.cli.main()` or `etlplus.ops.run.run()`, it is integration by default.
123
128
 
124
129
  ### Where to put tests
125
130
 
126
131
  - Unit tests live in `tests/unit/` and should import and test specific functions/classes directly.
132
+ - Smoke tests live in `tests/smoke/` and should focus on minimal end-to-end CLI/pipeline checks.
127
133
  - Integration tests live in `tests/integration/` and may simulate real usage using CLI argv, temporary files, and fake clients.
128
134
  - The `tests/integration/conftest.py` applies `@pytest.mark.integration` to all tests in that folder. You don’t need to add the marker per test.
129
135
  - Markers are declared in `pytest.ini`. Avoid introducing ad-hoc markers without adding them there.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: etlplus
3
- Version: 0.16.7
3
+ Version: 0.16.8
4
4
  Summary: A Swiss Army knife for simple ETL operations
5
5
  Home-page: https://github.com/Dagitali/ETLPlus
6
6
  Author: ETLPlus Team
@@ -722,10 +722,12 @@ pytest tests/ -v
722
722
 
723
723
  #### Test Layers
724
724
 
725
- We split tests into two layers:
725
+ We split tests into three layers:
726
726
 
727
727
  - **Unit (`tests/unit/`)**: single function or class, no real I/O, fast, uses stubs/monkeypatch
728
728
  (e.g. small helpers in `etlplus.utils`, transform + validate helpers).
729
+ - **Smoke (`tests/smoke/`)**: minimal end-to-end checks for core flows; may touch temp files but
730
+ avoids external network calls.
729
731
  - **Integration (`tests/integration/`)**: end-to-end flows (CLI `main()`, pipeline `run()`,
730
732
  pagination + rate limit defaults, file/API connector interactions) may touch temp files and use
731
733
  fake clients.
@@ -672,10 +672,12 @@ pytest tests/ -v
672
672
 
673
673
  #### Test Layers
674
674
 
675
- We split tests into two layers:
675
+ We split tests into three layers:
676
676
 
677
677
  - **Unit (`tests/unit/`)**: single function or class, no real I/O, fast, uses stubs/monkeypatch
678
678
  (e.g. small helpers in `etlplus.utils`, transform + validate helpers).
679
+ - **Smoke (`tests/smoke/`)**: minimal end-to-end checks for core flows; may touch temp files but
680
+ avoids external network calls.
679
681
  - **Integration (`tests/integration/`)**: end-to-end flows (CLI `main()`, pipeline `run()`,
680
682
  pagination + rate limit defaults, file/API connector interactions) may touch temp files and use
681
683
  fake clients.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: etlplus
3
- Version: 0.16.7
3
+ Version: 0.16.8
4
4
  Summary: A Swiss Army knife for simple ETL operations
5
5
  Home-page: https://github.com/Dagitali/ETLPlus
6
6
  Author: ETLPlus Team
@@ -722,10 +722,12 @@ pytest tests/ -v
722
722
 
723
723
  #### Test Layers
724
724
 
725
- We split tests into two layers:
725
+ We split tests into three layers:
726
726
 
727
727
  - **Unit (`tests/unit/`)**: single function or class, no real I/O, fast, uses stubs/monkeypatch
728
728
  (e.g. small helpers in `etlplus.utils`, transform + validate helpers).
729
+ - **Smoke (`tests/smoke/`)**: minimal end-to-end checks for core flows; may touch temp files but
730
+ avoids external network calls.
729
731
  - **Integration (`tests/integration/`)**: end-to-end flows (CLI `main()`, pipeline `run()`,
730
732
  pagination + rate limit defaults, file/API connector interactions) may touch temp files and use
731
733
  fake clients.
@@ -174,6 +174,7 @@ examples/data/sample.json
174
174
  examples/data/sample.xml
175
175
  examples/data/sample.xsd
176
176
  examples/data/sample.yaml
177
+ tests/README.md
177
178
  tests/__init__.py
178
179
  tests/conftest.py
179
180
  tests/integration/conftest.py
@@ -181,10 +182,10 @@ tests/integration/test_i_cli.py
181
182
  tests/integration/test_i_config_load.py
182
183
  tests/integration/test_i_examples_data_parity.py
183
184
  tests/integration/test_i_pagination_strategy.py
184
- tests/integration/test_i_pipeline_smoke.py
185
185
  tests/integration/test_i_run.py
186
186
  tests/integration/test_i_run_profile_pagination_defaults.py
187
187
  tests/integration/test_i_run_profile_rate_limit_defaults.py
188
+ tests/smoke/test_s_pipeline.py
188
189
  tests/unit/conftest.py
189
190
  tests/unit/test_u_config.py
190
191
  tests/unit/test_u_main.py
@@ -0,0 +1,13 @@
1
+ # pytest.ini
2
+ # ETLPlus
3
+ #
4
+ # Copyright © 2025 Dagitali LLC. All rights reserved.
5
+
6
+ [pytest]
7
+ testpaths = tests/unit tests/smoke tests/integration
8
+ addopts = -ra
9
+ markers =
10
+ property: property-based tests (Hypothesis) for URL composition and encoding
11
+ smoke: fast end-to-end tests covering core flows
12
+ integration: tests that exercise multiple modules or external I/O boundaries
13
+ unit: tests that isolate individual modules or functions
@@ -0,0 +1,38 @@
1
+ # Tests Overview
2
+
3
+ ETLPlus uses three categories of tests. Each category lives in its own folder and is tagged with a
4
+ pytest marker to make selection easy.
5
+
6
+ ## Unit tests (`tests/unit/`)
7
+
8
+ - Scope: single function or class in isolation
9
+ - I/O: no real file system or network I/O (use stubs/monkeypatch)
10
+ - Speed: fast, deterministic
11
+ - Marker: `unit`
12
+
13
+ ## Smoke tests (`tests/smoke/`)
14
+
15
+ - Scope: minimal end-to-end sanity checks for core flows
16
+ - I/O: may touch temp files; no external network calls
17
+ - Speed: very fast; intended to catch obvious regressions
18
+ - Marker: `smoke`
19
+
20
+ ## Integration tests (`tests/integration/`)
21
+
22
+ - Scope: cross-module workflows and CLI/pipeline paths
23
+ - I/O: may touch temp files; may use fakes/mocks for HTTP clients
24
+ - Speed: slower than unit/smoke
25
+ - Marker: `integration`
26
+
27
+ ## Running tests
28
+
29
+ ```bash
30
+ pytest tests/unit
31
+ pytest tests/smoke
32
+ pytest tests/integration
33
+
34
+ # Marker-based selection
35
+ pytest -m unit
36
+ pytest -m smoke
37
+ pytest -m integration
38
+ ```
@@ -1,9 +1,8 @@
1
1
  """
2
- :mod:`tests.integration.test_i_pipeline_smoke` module.
2
+ :mod:`tests.smoke.test_s_pipeline` module.
3
3
 
4
- Pipeline smoke integration test suite exercising a minimal file→file job via
5
- the CLI (using the deprecated-free path). Parametrized to verify both empty
6
- and non-empty inputs.
4
+ Smoke test suite exercising a minimal file→file job via the CLI. Parametrized
5
+ to verify both empty and non-empty inputs.
7
6
 
8
7
  Notes
9
8
  -----
@@ -28,14 +27,14 @@ if TYPE_CHECKING: # pragma: no cover - typing helpers only
28
27
  # SECTION: HELPERS ========================================================== #
29
28
 
30
29
 
31
- pytestmark = pytest.mark.integration
30
+ pytestmark = pytest.mark.smoke
32
31
 
33
32
 
34
33
  # SECTION: TESTS ============================================================ #
35
34
 
36
35
 
37
- class TestPipelineSmoke:
38
- """Integration test suite for file→file job via CLI."""
36
+ class TestPipeline:
37
+ """Smoke test suite for file→file job via CLI."""
39
38
 
40
39
  @pytest.mark.parametrize(
41
40
  'data_in',
etlplus-0.16.7/pytest.ini DELETED
@@ -1,12 +0,0 @@
1
- # pytest.ini
2
- # ETLPlus
3
- #
4
- # Copyright © 2025 Dagitali LLC. All rights reserved.
5
-
6
- [pytest]
7
- testpaths = tests/unit tests/integration
8
- addopts = -ra
9
- markers =
10
- property: property-based tests (Hypothesis) for URL composition and encoding
11
- integration: tests that exercise multiple modules or external I/O boundaries
12
- unit: tests that isolate individual modules or functions
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes