etlplus 0.16.8__tar.gz → 0.16.9__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.8/etlplus.egg-info → etlplus-0.16.9}/PKG-INFO +3 -4
- {etlplus-0.16.8 → etlplus-0.16.9}/README.md +2 -3
- {etlplus-0.16.8 → etlplus-0.16.9}/docs/README.md +9 -4
- {etlplus-0.16.8 → etlplus-0.16.9}/docs/pipeline-guide.md +35 -11
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/cli/main.py +1 -22
- {etlplus-0.16.8 → etlplus-0.16.9/etlplus.egg-info}/PKG-INFO +3 -4
- {etlplus-0.16.8 → etlplus-0.16.9}/.coveragerc +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/.editorconfig +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/.gitattributes +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/.github/actions/python-bootstrap/action.yml +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/.github/workflows/ci.yml +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/.gitignore +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/.pre-commit-config.yaml +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/.ruff.toml +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/CODE_OF_CONDUCT.md +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/CONTRIBUTING.md +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/DEMO.md +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/LICENSE +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/MANIFEST.in +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/Makefile +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/REFERENCES.md +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/SECURITY.md +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/SUPPORT.md +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/docs/snippets/installation_version.md +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/README.md +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/__init__.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/__main__.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/__version__.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/api/README.md +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/api/__init__.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/api/auth.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/api/config.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/api/endpoint_client.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/api/enums.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/api/errors.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/api/pagination/__init__.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/api/pagination/client.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/api/pagination/config.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/api/pagination/paginator.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/api/rate_limiting/__init__.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/api/rate_limiting/config.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/api/rate_limiting/rate_limiter.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/api/request_manager.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/api/retry_manager.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/api/transport.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/api/types.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/api/utils.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/cli/README.md +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/cli/__init__.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/cli/commands.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/cli/constants.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/cli/handlers.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/cli/io.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/cli/options.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/cli/state.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/cli/types.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/config.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/connector/__init__.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/connector/api.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/connector/connector.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/connector/core.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/connector/database.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/connector/enums.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/connector/file.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/connector/types.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/connector/utils.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/database/README.md +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/database/__init__.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/database/ddl.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/database/engine.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/database/orm.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/database/schema.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/database/types.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/enums.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/README.md +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/__init__.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/_imports.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/_io.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/accdb.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/arrow.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/avro.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/bson.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/cbor.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/cfg.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/conf.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/core.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/csv.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/dat.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/dta.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/duckdb.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/enums.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/feather.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/fwf.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/gz.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/hbs.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/hdf5.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/ini.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/ion.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/jinja2.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/json.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/log.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/mat.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/mdb.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/msgpack.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/mustache.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/nc.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/ndjson.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/numbers.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/ods.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/orc.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/parquet.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/pb.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/pbf.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/properties.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/proto.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/psv.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/rda.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/rds.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/sas7bdat.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/sav.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/sqlite.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/stub.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/sylk.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/tab.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/toml.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/tsv.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/txt.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/vm.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/wks.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/xls.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/xlsm.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/xlsx.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/xml.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/xpt.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/yaml.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/zip.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/file/zsav.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/mixins.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/ops/README.md +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/ops/__init__.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/ops/enums.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/ops/extract.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/ops/load.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/ops/run.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/ops/transform.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/ops/types.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/ops/utils.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/ops/validate.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/py.typed +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/templates/README.md +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/templates/__init__.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/templates/ddl.sql.j2 +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/templates/view.sql.j2 +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/types.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/utils.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/workflow/README.md +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/workflow/__init__.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/workflow/dag.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/workflow/jobs.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus/workflow/profile.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus.egg-info/SOURCES.txt +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus.egg-info/dependency_links.txt +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus.egg-info/entry_points.txt +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus.egg-info/requires.txt +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/etlplus.egg-info/top_level.txt +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/examples/README.md +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/examples/configs/ddl_spec.yml +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/examples/configs/pipeline.yml +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/examples/data/sample.csv +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/examples/data/sample.json +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/examples/data/sample.xml +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/examples/data/sample.xsd +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/examples/data/sample.yaml +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/examples/quickstart.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/pyproject.toml +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/pytest.ini +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/setup.cfg +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/setup.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/tests/README.md +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/tests/__init__.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/tests/conftest.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/tests/integration/conftest.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/tests/integration/test_i_cli.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/tests/integration/test_i_config_load.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/tests/integration/test_i_examples_data_parity.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/tests/integration/test_i_pagination_strategy.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/tests/integration/test_i_run.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/tests/integration/test_i_run_profile_pagination_defaults.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/tests/integration/test_i_run_profile_rate_limit_defaults.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/tests/smoke/test_s_pipeline.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/tests/unit/api/conftest.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/tests/unit/api/test_u_api_auth.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/tests/unit/api/test_u_api_config.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/tests/unit/api/test_u_api_endpoint_client.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/tests/unit/api/test_u_api_enums.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/tests/unit/api/test_u_api_mocks.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/tests/unit/api/test_u_api_pagination_client.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/tests/unit/api/test_u_api_pagination_config.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/tests/unit/api/test_u_api_paginator.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/tests/unit/api/test_u_api_rate_limit_config.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/tests/unit/api/test_u_api_rate_limiter.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/tests/unit/api/test_u_api_request_manager.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/tests/unit/api/test_u_api_retry_manager.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/tests/unit/api/test_u_api_transport.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/tests/unit/api/test_u_api_types.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/tests/unit/api/test_u_api_utils.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/tests/unit/cli/conftest.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/tests/unit/cli/test_u_cli_handlers.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/tests/unit/cli/test_u_cli_io.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/tests/unit/cli/test_u_cli_main.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/tests/unit/cli/test_u_cli_state.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/tests/unit/conftest.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/tests/unit/connector/test_u_connector_enums.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/tests/unit/connector/test_u_connector_utils.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/tests/unit/database/test_u_database_ddl.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/tests/unit/database/test_u_database_engine.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/tests/unit/database/test_u_database_orm.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/tests/unit/database/test_u_database_schema.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/tests/unit/file/test_u_file_core.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/tests/unit/file/test_u_file_enums.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/tests/unit/file/test_u_file_yaml.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/tests/unit/ops/test_u_ops_enums.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/tests/unit/ops/test_u_ops_extract.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/tests/unit/ops/test_u_ops_load.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/tests/unit/ops/test_u_ops_run.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/tests/unit/ops/test_u_ops_transform.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/tests/unit/ops/test_u_ops_utils.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/tests/unit/ops/test_u_ops_validate.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/tests/unit/test_u_config.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/tests/unit/test_u_main.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/tests/unit/test_u_mixins.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/tests/unit/test_u_utils.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/tests/unit/test_u_version.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/tests/unit/workflow/test_u_workflow_jobs.py +0 -0
- {etlplus-0.16.8 → etlplus-0.16.9}/tools/update_demo_snippets.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: etlplus
|
|
3
|
-
Version: 0.16.
|
|
3
|
+
Version: 0.16.9
|
|
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
|
|
@@ -355,9 +355,8 @@ etlplus --help
|
|
|
355
355
|
etlplus --version
|
|
356
356
|
```
|
|
357
357
|
|
|
358
|
-
The CLI is implemented with Typer (Click-based). The legacy argparse parser has been removed
|
|
359
|
-
|
|
360
|
-
--help` for current options.
|
|
358
|
+
The CLI is implemented with Typer (Click-based). The legacy argparse parser has been removed, so
|
|
359
|
+
rely on the documented commands/flags and run `etlplus <command> --help` for current options.
|
|
361
360
|
|
|
362
361
|
**Example error messages:**
|
|
363
362
|
|
|
@@ -305,9 +305,8 @@ etlplus --help
|
|
|
305
305
|
etlplus --version
|
|
306
306
|
```
|
|
307
307
|
|
|
308
|
-
The CLI is implemented with Typer (Click-based). The legacy argparse parser has been removed
|
|
309
|
-
|
|
310
|
-
--help` for current options.
|
|
308
|
+
The CLI is implemented with Typer (Click-based). The legacy argparse parser has been removed, so
|
|
309
|
+
rely on the documented commands/flags and run `etlplus <command> --help` for current options.
|
|
311
310
|
|
|
312
311
|
**Example error messages:**
|
|
313
312
|
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
# Documentation Notes
|
|
2
2
|
|
|
3
|
+
- [Documentation Notes](#documentation-notes)
|
|
4
|
+
- [CLI Parser Status](#cli-parser-status)
|
|
5
|
+
- [Migration Hints](#migration-hints)
|
|
6
|
+
|
|
3
7
|
## CLI Parser Status
|
|
4
|
-
|
|
5
|
-
|
|
8
|
+
|
|
9
|
+
- The CLI is Typer/Click-only. The historical `argparse` parser has been removed.
|
|
6
10
|
- Downstream tools should invoke the Typer app exported at `etlplus.cli.commands.app` (e.g., `python
|
|
7
11
|
-m etlplus` or `etlplus ...`).
|
|
8
12
|
- Handler functions still accept keyword arguments; the legacy namespace shim is temporary and will
|
|
@@ -10,8 +14,9 @@
|
|
|
10
14
|
handlers with explicit keyword arguments if you integrate programmatically.
|
|
11
15
|
|
|
12
16
|
## Migration Hints
|
|
13
|
-
|
|
14
|
-
|
|
17
|
+
|
|
18
|
+
- Replace any `argparse`-based integrations with Typer invocations (`etlplus` binary or `app`
|
|
19
|
+
directly).
|
|
15
20
|
- If you maintained custom subcommands around the old parser, port them to Typer by attaching to
|
|
16
21
|
`app` or wrapping the `etlplus` executable.
|
|
17
22
|
- Tests and examples now target the Typer surface; expect argparse-focused helpers (e.g., namespace
|
|
@@ -3,15 +3,39 @@
|
|
|
3
3
|
This guide explains how to author an ETLPlus pipeline YAML, using the example at `in/pipeline.yml`
|
|
4
4
|
as a reference.
|
|
5
5
|
|
|
6
|
+
- [Pipeline Authoring Guide](#pipeline-authoring-guide)
|
|
7
|
+
- [Overview](#overview)
|
|
8
|
+
- [Running a Pipeline from YAML (CLI)](#running-a-pipeline-from-yaml-cli)
|
|
9
|
+
- [Top-Level Structure](#top-level-structure)
|
|
10
|
+
- [APIs](#apis)
|
|
11
|
+
- [Profiles, base\_path, and auth](#profiles-base_path-and-auth)
|
|
12
|
+
- [Runner behavior with `base_path` (sources and targets)](#runner-behavior-with-base_path-sources-and-targets)
|
|
13
|
+
- [Databases](#databases)
|
|
14
|
+
- [File Systems](#file-systems)
|
|
15
|
+
- [Sources](#sources)
|
|
16
|
+
- [Validations](#validations)
|
|
17
|
+
- [Transforms](#transforms)
|
|
18
|
+
- [Targets](#targets)
|
|
19
|
+
- [Connector Parsing and Extension](#connector-parsing-and-extension)
|
|
20
|
+
- [Jobs](#jobs)
|
|
21
|
+
- [Running Pipelines (CLI and Python)](#running-pipelines-cli-and-python)
|
|
22
|
+
- [CLI: `etlplus check` (Inspect) and `etlplus run` (Execute)](#cli-etlplus-check-inspect-and-etlplus-run-execute)
|
|
23
|
+
- [Python: `etlplus.ops.run.run`](#python-etlplusopsrunrun)
|
|
24
|
+
- [Tips](#tips)
|
|
25
|
+
- [Design notes: Mapping inputs, dict outputs](#design-notes-mapping-inputs-dict-outputs)
|
|
26
|
+
- [Merge Semantics (Python 3.13)](#merge-semantics-python-313)
|
|
27
|
+
- [Extending Config Shapes](#extending-config-shapes)
|
|
28
|
+
|
|
29
|
+
## Overview
|
|
30
|
+
|
|
6
31
|
ETLPlus focuses on simple, JSON-first ETL. The pipeline file is a declarative description that your
|
|
7
32
|
runner (a script, Makefile, CI job) can parse and execute using ETLPlus primitives: `extract`,
|
|
8
33
|
`validate`, `transform`, and `load`.
|
|
9
34
|
|
|
10
|
-
CLI note: ETLPlus uses Typer for command parsing. The legacy argparse parser has been removed
|
|
11
|
-
|
|
12
|
-
--help`) when wiring your runner.
|
|
35
|
+
CLI note: ETLPlus uses Typer for command parsing. The legacy argparse parser has been removed. Use
|
|
36
|
+
the documented `etlplus` commands and flags (check `etlplus --help`) when wiring your runner.
|
|
13
37
|
|
|
14
|
-
## Running a
|
|
38
|
+
## Running a Pipeline from YAML (CLI)
|
|
15
39
|
|
|
16
40
|
Use the built-in `etlplus run` command to execute jobs defined in a pipeline YAML. The command reads
|
|
17
41
|
your config, resolves vars and env placeholders, then runs the requested job:
|
|
@@ -30,7 +54,7 @@ etlplus run --config examples/configs/pipeline.yml --job api_to_file_github_repo
|
|
|
30
54
|
For scripted usage inside a larger Python project, prefer importing the Python API directly (e.g.,
|
|
31
55
|
`extract`, `transform`, `validate`, `load`) instead of invoking the CLI subprocess.
|
|
32
56
|
|
|
33
|
-
## Top-
|
|
57
|
+
## Top-Level Structure
|
|
34
58
|
|
|
35
59
|
A pipeline file typically includes:
|
|
36
60
|
|
|
@@ -205,7 +229,7 @@ databases:
|
|
|
205
229
|
Note: Database extract/load in ETLPlus is minimal today; consider this a placeholder for
|
|
206
230
|
orchestration that calls into DB clients.
|
|
207
231
|
|
|
208
|
-
## File
|
|
232
|
+
## File Systems
|
|
209
233
|
|
|
210
234
|
Point to local/cloud locations and logical folders:
|
|
211
235
|
|
|
@@ -362,7 +386,7 @@ targets:
|
|
|
362
386
|
Content-Type: application/json
|
|
363
387
|
```
|
|
364
388
|
|
|
365
|
-
## Connector
|
|
389
|
+
## Connector Parsing and Extension
|
|
366
390
|
|
|
367
391
|
Under the hood, source and target entries are parsed via a single tolerant constructor that looks at
|
|
368
392
|
the `type` field and builds a concrete connector dataclass:
|
|
@@ -405,12 +429,12 @@ Notes:
|
|
|
405
429
|
- `depends_on` is optional and can be a string or list of job names.
|
|
406
430
|
- Jobs without dependencies run first when ordered as a DAG.
|
|
407
431
|
|
|
408
|
-
## Running
|
|
432
|
+
## Running Pipelines (CLI and Python)
|
|
409
433
|
|
|
410
434
|
Once you have a pipeline YAML, you can run jobs either from the
|
|
411
435
|
command line or directly from Python.
|
|
412
436
|
|
|
413
|
-
### CLI: `etlplus check` (
|
|
437
|
+
### CLI: `etlplus check` (Inspect) and `etlplus run` (Execute)
|
|
414
438
|
|
|
415
439
|
List jobs or show a summary from a pipeline file:
|
|
416
440
|
|
|
@@ -508,7 +532,7 @@ Any]` rather than `dict[str, Any]` for inputs. Why?
|
|
|
508
532
|
|
|
509
533
|
Practically, you can pass a plain `dict` everywhere and it will work.
|
|
510
534
|
|
|
511
|
-
### Merge
|
|
535
|
+
### Merge Semantics (Python 3.13)
|
|
512
536
|
|
|
513
537
|
We use the dict union operator for clarity:
|
|
514
538
|
|
|
@@ -521,7 +545,7 @@ Header precedence (lowest → highest):
|
|
|
521
545
|
2. `profiles.<name>.headers`
|
|
522
546
|
3. API top-level `headers`
|
|
523
547
|
|
|
524
|
-
### Extending
|
|
548
|
+
### Extending Config Shapes
|
|
525
549
|
|
|
526
550
|
When adding new config objects or fields:
|
|
527
551
|
|
|
@@ -3,15 +3,13 @@
|
|
|
3
3
|
|
|
4
4
|
Entry point helpers for the Typer-powered ``etlplus`` CLI.
|
|
5
5
|
|
|
6
|
-
This module exposes :func:`main` for the console script
|
|
7
|
-
:func:`create_parser`, which is kept for compatibility but now raises.
|
|
6
|
+
This module exposes :func:`main` for the console script.
|
|
8
7
|
"""
|
|
9
8
|
|
|
10
9
|
from __future__ import annotations
|
|
11
10
|
|
|
12
11
|
import contextlib
|
|
13
12
|
import sys
|
|
14
|
-
import warnings
|
|
15
13
|
|
|
16
14
|
import click
|
|
17
15
|
import typer
|
|
@@ -121,25 +119,6 @@ def _is_unknown_command_error(
|
|
|
121
119
|
# SECTION: FUNCTIONS ======================================================== #
|
|
122
120
|
|
|
123
121
|
|
|
124
|
-
def create_parser() -> object:
|
|
125
|
-
"""
|
|
126
|
-
Deprecated legacy entrypoint.
|
|
127
|
-
|
|
128
|
-
The argparse-based parser has been removed. Use the Typer-powered
|
|
129
|
-
``etlplus`` CLI instead (``etlplus.cli.commands.app``).
|
|
130
|
-
"""
|
|
131
|
-
warnings.warn(
|
|
132
|
-
'create_parser is deprecated and no longer returns an argparse '
|
|
133
|
-
'parser. Use the Typer CLI entrypoint instead.',
|
|
134
|
-
DeprecationWarning,
|
|
135
|
-
stacklevel=2,
|
|
136
|
-
)
|
|
137
|
-
raise RuntimeError(
|
|
138
|
-
'The legacy argparse parser has been removed. Invoke the Typer-based '
|
|
139
|
-
'CLI via `etlplus` or import `etlplus.cli.commands.app`.',
|
|
140
|
-
)
|
|
141
|
-
|
|
142
|
-
|
|
143
122
|
def main(
|
|
144
123
|
argv: list[str] | None = None,
|
|
145
124
|
) -> int:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: etlplus
|
|
3
|
-
Version: 0.16.
|
|
3
|
+
Version: 0.16.9
|
|
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
|
|
@@ -355,9 +355,8 @@ etlplus --help
|
|
|
355
355
|
etlplus --version
|
|
356
356
|
```
|
|
357
357
|
|
|
358
|
-
The CLI is implemented with Typer (Click-based). The legacy argparse parser has been removed
|
|
359
|
-
|
|
360
|
-
--help` for current options.
|
|
358
|
+
The CLI is implemented with Typer (Click-based). The legacy argparse parser has been removed, so
|
|
359
|
+
rely on the documented commands/flags and run `etlplus <command> --help` for current options.
|
|
361
360
|
|
|
362
361
|
**Example error messages:**
|
|
363
362
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.8 → etlplus-0.16.9}/tests/integration/test_i_run_profile_pagination_defaults.py
RENAMED
|
File without changes
|
{etlplus-0.16.8 → etlplus-0.16.9}/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
|
|
File without changes
|