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.
- {etlplus-0.16.7 → etlplus-0.16.8}/CONTRIBUTING.md +10 -4
- {etlplus-0.16.7/etlplus.egg-info → etlplus-0.16.8}/PKG-INFO +4 -2
- {etlplus-0.16.7 → etlplus-0.16.8}/README.md +3 -1
- {etlplus-0.16.7 → etlplus-0.16.8/etlplus.egg-info}/PKG-INFO +4 -2
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus.egg-info/SOURCES.txt +2 -1
- etlplus-0.16.8/pytest.ini +13 -0
- etlplus-0.16.8/tests/README.md +38 -0
- etlplus-0.16.7/tests/integration/test_i_pipeline_smoke.py → etlplus-0.16.8/tests/smoke/test_s_pipeline.py +6 -7
- etlplus-0.16.7/pytest.ini +0 -12
- {etlplus-0.16.7 → etlplus-0.16.8}/.coveragerc +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/.editorconfig +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/.gitattributes +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/.github/actions/python-bootstrap/action.yml +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/.github/workflows/ci.yml +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/.gitignore +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/.pre-commit-config.yaml +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/.ruff.toml +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/CODE_OF_CONDUCT.md +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/DEMO.md +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/LICENSE +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/MANIFEST.in +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/Makefile +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/REFERENCES.md +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/SECURITY.md +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/SUPPORT.md +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/docs/README.md +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/docs/pipeline-guide.md +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/docs/snippets/installation_version.md +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/README.md +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/__init__.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/__main__.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/__version__.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/api/README.md +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/api/__init__.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/api/auth.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/api/config.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/api/endpoint_client.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/api/enums.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/api/errors.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/api/pagination/__init__.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/api/pagination/client.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/api/pagination/config.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/api/pagination/paginator.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/api/rate_limiting/__init__.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/api/rate_limiting/config.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/api/rate_limiting/rate_limiter.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/api/request_manager.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/api/retry_manager.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/api/transport.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/api/types.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/api/utils.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/cli/README.md +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/cli/__init__.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/cli/commands.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/cli/constants.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/cli/handlers.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/cli/io.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/cli/main.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/cli/options.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/cli/state.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/cli/types.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/config.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/connector/__init__.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/connector/api.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/connector/connector.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/connector/core.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/connector/database.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/connector/enums.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/connector/file.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/connector/types.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/connector/utils.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/database/README.md +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/database/__init__.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/database/ddl.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/database/engine.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/database/orm.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/database/schema.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/database/types.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/enums.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/README.md +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/__init__.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/_imports.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/_io.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/accdb.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/arrow.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/avro.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/bson.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/cbor.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/cfg.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/conf.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/core.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/csv.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/dat.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/dta.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/duckdb.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/enums.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/feather.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/fwf.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/gz.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/hbs.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/hdf5.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/ini.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/ion.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/jinja2.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/json.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/log.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/mat.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/mdb.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/msgpack.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/mustache.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/nc.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/ndjson.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/numbers.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/ods.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/orc.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/parquet.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/pb.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/pbf.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/properties.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/proto.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/psv.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/rda.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/rds.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/sas7bdat.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/sav.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/sqlite.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/stub.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/sylk.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/tab.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/toml.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/tsv.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/txt.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/vm.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/wks.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/xls.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/xlsm.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/xlsx.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/xml.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/xpt.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/yaml.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/zip.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/file/zsav.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/mixins.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/ops/README.md +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/ops/__init__.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/ops/enums.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/ops/extract.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/ops/load.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/ops/run.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/ops/transform.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/ops/types.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/ops/utils.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/ops/validate.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/py.typed +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/templates/README.md +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/templates/__init__.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/templates/ddl.sql.j2 +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/templates/view.sql.j2 +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/types.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/utils.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/workflow/README.md +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/workflow/__init__.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/workflow/dag.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/workflow/jobs.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus/workflow/profile.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus.egg-info/dependency_links.txt +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus.egg-info/entry_points.txt +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus.egg-info/requires.txt +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/etlplus.egg-info/top_level.txt +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/examples/README.md +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/examples/configs/ddl_spec.yml +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/examples/configs/pipeline.yml +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/examples/data/sample.csv +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/examples/data/sample.json +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/examples/data/sample.xml +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/examples/data/sample.xsd +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/examples/data/sample.yaml +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/examples/quickstart.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/pyproject.toml +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/setup.cfg +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/setup.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/tests/__init__.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/tests/conftest.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/tests/integration/conftest.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/tests/integration/test_i_cli.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/tests/integration/test_i_config_load.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/tests/integration/test_i_examples_data_parity.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/tests/integration/test_i_pagination_strategy.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/tests/integration/test_i_run.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/tests/integration/test_i_run_profile_pagination_defaults.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/tests/integration/test_i_run_profile_rate_limit_defaults.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/api/conftest.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/api/test_u_api_auth.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/api/test_u_api_config.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/api/test_u_api_endpoint_client.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/api/test_u_api_enums.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/api/test_u_api_mocks.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/api/test_u_api_pagination_client.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/api/test_u_api_pagination_config.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/api/test_u_api_paginator.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/api/test_u_api_rate_limit_config.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/api/test_u_api_rate_limiter.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/api/test_u_api_request_manager.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/api/test_u_api_retry_manager.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/api/test_u_api_transport.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/api/test_u_api_types.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/api/test_u_api_utils.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/cli/conftest.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/cli/test_u_cli_handlers.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/cli/test_u_cli_io.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/cli/test_u_cli_main.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/cli/test_u_cli_state.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/conftest.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/connector/test_u_connector_enums.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/connector/test_u_connector_utils.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/database/test_u_database_ddl.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/database/test_u_database_engine.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/database/test_u_database_orm.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/database/test_u_database_schema.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/file/test_u_file_core.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/file/test_u_file_enums.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/file/test_u_file_yaml.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/ops/test_u_ops_enums.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/ops/test_u_ops_extract.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/ops/test_u_ops_load.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/ops/test_u_ops_run.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/ops/test_u_ops_transform.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/ops/test_u_ops_utils.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/ops/test_u_ops_validate.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/test_u_config.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/test_u_main.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/test_u_mixins.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/test_u_utils.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/test_u_version.py +0 -0
- {etlplus-0.16.7 → etlplus-0.16.8}/tests/unit/workflow/test_u_workflow_jobs.py +0 -0
- {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,
|
|
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.
|
|
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
|
|
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
|
|
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.
|
|
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
|
|
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.
|
|
2
|
+
:mod:`tests.smoke.test_s_pipeline` module.
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
|
|
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.
|
|
30
|
+
pytestmark = pytest.mark.smoke
|
|
32
31
|
|
|
33
32
|
|
|
34
33
|
# SECTION: TESTS ============================================================ #
|
|
35
34
|
|
|
36
35
|
|
|
37
|
-
class
|
|
38
|
-
"""
|
|
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
|
|
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
|
{etlplus-0.16.7 → etlplus-0.16.8}/tests/integration/test_i_run_profile_pagination_defaults.py
RENAMED
|
File without changes
|
{etlplus-0.16.7 → etlplus-0.16.8}/tests/integration/test_i_run_profile_rate_limit_defaults.py
RENAMED
|
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
|