etlplus 0.16.6__py3-none-any.whl → 0.16.7__py3-none-any.whl
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/README.md +4 -4
- etlplus/api/enums.py +2 -2
- etlplus/cli/README.md +9 -7
- etlplus/cli/main.py +1 -1
- etlplus/database/README.md +7 -7
- etlplus/file/README.md +7 -5
- etlplus/file/accdb.py +2 -1
- etlplus/file/arrow.py +2 -1
- etlplus/file/bson.py +2 -1
- etlplus/file/cbor.py +2 -1
- etlplus/file/cfg.py +1 -1
- etlplus/file/conf.py +1 -1
- etlplus/file/dat.py +1 -1
- etlplus/file/dta.py +1 -1
- etlplus/file/duckdb.py +2 -1
- etlplus/file/enums.py +1 -1
- etlplus/file/fwf.py +2 -1
- etlplus/file/hbs.py +2 -1
- etlplus/file/hdf5.py +2 -1
- etlplus/file/ini.py +2 -1
- etlplus/file/ion.py +1 -1
- etlplus/file/jinja2.py +2 -1
- etlplus/file/log.py +1 -1
- etlplus/file/mat.py +1 -1
- etlplus/file/mdb.py +2 -1
- etlplus/file/msgpack.py +2 -1
- etlplus/file/mustache.py +2 -1
- etlplus/file/nc.py +1 -1
- etlplus/file/numbers.py +2 -1
- etlplus/file/ods.py +2 -1
- etlplus/file/pb.py +2 -1
- etlplus/file/pbf.py +2 -1
- etlplus/file/properties.py +2 -1
- etlplus/file/proto.py +2 -1
- etlplus/file/psv.py +2 -1
- etlplus/file/rda.py +2 -1
- etlplus/file/rds.py +1 -1
- etlplus/file/sas7bdat.py +2 -1
- etlplus/file/sav.py +1 -1
- etlplus/file/sqlite.py +2 -1
- etlplus/file/sylk.py +2 -1
- etlplus/file/tab.py +2 -1
- etlplus/file/toml.py +2 -1
- etlplus/file/vm.py +2 -1
- etlplus/file/wks.py +2 -1
- etlplus/file/xls.py +1 -1
- etlplus/file/xlsm.py +2 -2
- etlplus/file/xpt.py +2 -1
- etlplus/file/zsav.py +2 -1
- etlplus/ops/README.md +10 -9
- etlplus/templates/README.md +11 -9
- {etlplus-0.16.6.dist-info → etlplus-0.16.7.dist-info}/METADATA +32 -28
- {etlplus-0.16.6.dist-info → etlplus-0.16.7.dist-info}/RECORD +57 -57
- {etlplus-0.16.6.dist-info → etlplus-0.16.7.dist-info}/WHEEL +0 -0
- {etlplus-0.16.6.dist-info → etlplus-0.16.7.dist-info}/entry_points.txt +0 -0
- {etlplus-0.16.6.dist-info → etlplus-0.16.7.dist-info}/licenses/LICENSE +0 -0
- {etlplus-0.16.6.dist-info → etlplus-0.16.7.dist-info}/top_level.txt +0 -0
etlplus/README.md
CHANGED
|
@@ -16,8 +16,8 @@ Back to project overview: see the top-level [README](../README.md).
|
|
|
16
16
|
- [etlplus.cli](cli/README.md): Command-line interface definitions for `etlplus`
|
|
17
17
|
- [etlplus.database](database/README.md): Database engine, schema, and ORM helpers
|
|
18
18
|
- [etlplus.templates](templates/README.md): SQL and DDL template helpers
|
|
19
|
-
- [etlplus.
|
|
20
|
-
- [etlplus.workflow](
|
|
19
|
+
- [etlplus.ops](ops/README.md): Extract/validate/transform/load primitives
|
|
20
|
+
- [etlplus.workflow](workflow/README.md): Helpers for data connectors, pipelines, jobs, and
|
|
21
21
|
profiles
|
|
22
22
|
|
|
23
23
|
## Quickstart
|
|
@@ -36,7 +36,7 @@ load(filtered, "file", "output.json", file_format="json")
|
|
|
36
36
|
Use the provided classes to load and validate configuration files:
|
|
37
37
|
|
|
38
38
|
```python
|
|
39
|
-
from etlplus
|
|
39
|
+
from etlplus import Config
|
|
40
40
|
|
|
41
41
|
cfg = Config.from_yaml("pipeline.yml")
|
|
42
42
|
```
|
|
@@ -47,7 +47,7 @@ cfg = Config.from_yaml("pipeline.yml")
|
|
|
47
47
|
## Example: Loading a Pipeline Config
|
|
48
48
|
|
|
49
49
|
```python
|
|
50
|
-
from etlplus
|
|
50
|
+
from etlplus import Config
|
|
51
51
|
|
|
52
52
|
config = Config.from_yaml("configs/pipeline.yml")
|
|
53
53
|
print(config)
|
etlplus/api/enums.py
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"""
|
|
2
2
|
:mod:`etlplus.api.enums` module.
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
REST API-aligned enums and helpers.
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
7
|
from __future__ import annotations
|
|
@@ -21,7 +21,7 @@ __all__ = [
|
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
class HttpMethod(CoercibleStrEnum):
|
|
24
|
-
"""Supported HTTP verbs
|
|
24
|
+
"""Supported HTTP verbs with a helper for request-body allowance."""
|
|
25
25
|
|
|
26
26
|
# -- Constants -- #
|
|
27
27
|
|
etlplus/cli/README.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Documentation for the `etlplus.cli` subpackage: command-line interface for ETLPlus workflows.
|
|
4
4
|
|
|
5
5
|
- Provides a CLI for running ETL pipelines, jobs, and utilities
|
|
6
|
-
- Supports commands for
|
|
6
|
+
- Supports commands for extracting, transforming, validating data, and running pipelines
|
|
7
7
|
- Includes options for configuration, state, and output control
|
|
8
8
|
- Exposes handlers for custom command integration
|
|
9
9
|
|
|
@@ -17,20 +17,22 @@ Back to project overview: see the top-level [README](../../README.md).
|
|
|
17
17
|
|
|
18
18
|
## Available Commands
|
|
19
19
|
|
|
20
|
+
- **check**: Inspect pipeline configuration (jobs, sources, targets)
|
|
21
|
+
- **extract**: Extract data from files/APIs/databases
|
|
22
|
+
- **transform**: Transform records
|
|
23
|
+
- **load**: Load data to files/APIs/databases
|
|
24
|
+
- **render**: Render SQL DDL from table specs
|
|
25
|
+
- **validate**: Validate data against rules
|
|
20
26
|
- **run**: Execute a pipeline or job
|
|
21
|
-
- **validate**: Validate pipeline or config files
|
|
22
|
-
- **inspect**: Show pipeline/job details
|
|
23
27
|
|
|
24
28
|
## Command Options
|
|
25
29
|
|
|
26
|
-
|
|
27
|
-
- `--state`: Path to state file
|
|
28
|
-
- `--output`: Output file or format
|
|
30
|
+
Use `etlplus <command> --help` for the exact options supported by each command.
|
|
29
31
|
|
|
30
32
|
## Example: Running a Pipeline
|
|
31
33
|
|
|
32
34
|
```bash
|
|
33
|
-
etlplus run --config configs/pipeline.yml --
|
|
35
|
+
etlplus run --config configs/pipeline.yml --job file_to_file_customers
|
|
34
36
|
```
|
|
35
37
|
|
|
36
38
|
## See Also
|
etlplus/cli/main.py
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
Entry point helpers for the Typer-powered ``etlplus`` CLI.
|
|
5
5
|
|
|
6
6
|
This module exposes :func:`main` for the console script as well as
|
|
7
|
-
:func:`create_parser
|
|
7
|
+
:func:`create_parser`, which is kept for compatibility but now raises.
|
|
8
8
|
"""
|
|
9
9
|
|
|
10
10
|
from __future__ import annotations
|
etlplus/database/README.md
CHANGED
|
@@ -18,8 +18,8 @@ Back to project overview: see the top-level [README](../../README.md).
|
|
|
18
18
|
|
|
19
19
|
## Database Engine and Connections
|
|
20
20
|
|
|
21
|
-
-
|
|
22
|
-
-
|
|
21
|
+
- Build SQLAlchemy engines with `make_engine`
|
|
22
|
+
- Load connection strings from pipeline configs
|
|
23
23
|
|
|
24
24
|
## Schema and DDL Helpers
|
|
25
25
|
|
|
@@ -31,14 +31,14 @@ Back to project overview: see the top-level [README](../../README.md).
|
|
|
31
31
|
- Map rows to Python objects
|
|
32
32
|
- Simple CRUD helpers for tabular data
|
|
33
33
|
|
|
34
|
-
## Example:
|
|
34
|
+
## Example: Rendering DDL From a Spec
|
|
35
35
|
|
|
36
36
|
```python
|
|
37
|
-
from etlplus.database import
|
|
37
|
+
from etlplus.database import load_table_spec, render_table_sql
|
|
38
38
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
39
|
+
spec = load_table_spec("schemas/users.yml")
|
|
40
|
+
sql = render_table_sql(spec, template="ddl")
|
|
41
|
+
print(sql)
|
|
42
42
|
```
|
|
43
43
|
|
|
44
44
|
## See Also
|
etlplus/file/README.md
CHANGED
|
@@ -4,7 +4,7 @@ Documentation for the `etlplus.file` subpackage: unified file format support and
|
|
|
4
4
|
and writing data files.
|
|
5
5
|
|
|
6
6
|
- Provides a consistent interface for reading and writing files in various formats
|
|
7
|
-
-
|
|
7
|
+
- Defines many formats in `FileFormat`; read/write support varies by format
|
|
8
8
|
- Includes helpers for inferring file format and compression from filenames, extensions, or MIME
|
|
9
9
|
types
|
|
10
10
|
- Exposes a `File` class with instance methods for reading and writing data
|
|
@@ -23,7 +23,8 @@ Back to project overview: see the top-level [README](../../README.md).
|
|
|
23
23
|
|
|
24
24
|
## Supported File Formats
|
|
25
25
|
|
|
26
|
-
The following formats are
|
|
26
|
+
The following formats are implemented for reading/writing (unless noted). For the full support
|
|
27
|
+
matrix across all `FileFormat` values, see the top-level [README](../../README.md).
|
|
27
28
|
|
|
28
29
|
| Format | Description |
|
|
29
30
|
|-----------|---------------------------------------------|
|
|
@@ -37,13 +38,14 @@ The following formats are defined in `FileFormat` and supported for reading and
|
|
|
37
38
|
| parquet | Apache Parquet columnar format |
|
|
38
39
|
| tsv | Tab-separated values text files |
|
|
39
40
|
| txt | Plain text files |
|
|
40
|
-
| xls | Microsoft Excel (legacy .xls)
|
|
41
|
+
| xls | Microsoft Excel (legacy .xls; read-only) |
|
|
41
42
|
| xlsx | Microsoft Excel (modern .xlsx) |
|
|
42
43
|
| zip | ZIP-compressed files (see Compression) |
|
|
43
44
|
| xml | XML files |
|
|
44
45
|
| yaml | YAML files |
|
|
45
46
|
|
|
46
|
-
Compression formats (gz, zip) are also supported as wrappers for other formats.
|
|
47
|
+
Compression formats (gz, zip) are also supported as wrappers for other formats. Formats not listed
|
|
48
|
+
here are currently stubbed and will raise `NotImplementedError` on read/write.
|
|
47
49
|
|
|
48
50
|
## Inferring File Format and Compression
|
|
49
51
|
|
|
@@ -77,7 +79,7 @@ f.write(data)
|
|
|
77
79
|
```
|
|
78
80
|
|
|
79
81
|
- The `write()` method serializes and writes data in the appropriate format.
|
|
80
|
-
- Supports
|
|
82
|
+
- Supports the implemented formats listed above.
|
|
81
83
|
|
|
82
84
|
## File Instance Methods
|
|
83
85
|
|
etlplus/file/accdb.py
CHANGED
etlplus/file/arrow.py
CHANGED
etlplus/file/bson.py
CHANGED
etlplus/file/cbor.py
CHANGED
etlplus/file/cfg.py
CHANGED
etlplus/file/conf.py
CHANGED
etlplus/file/dat.py
CHANGED
etlplus/file/dta.py
CHANGED
etlplus/file/duckdb.py
CHANGED
etlplus/file/enums.py
CHANGED
etlplus/file/fwf.py
CHANGED
etlplus/file/hbs.py
CHANGED
etlplus/file/hdf5.py
CHANGED
etlplus/file/ini.py
CHANGED
etlplus/file/ion.py
CHANGED
etlplus/file/jinja2.py
CHANGED
etlplus/file/log.py
CHANGED
etlplus/file/mat.py
CHANGED
etlplus/file/mdb.py
CHANGED
etlplus/file/msgpack.py
CHANGED
etlplus/file/mustache.py
CHANGED
etlplus/file/nc.py
CHANGED
etlplus/file/numbers.py
CHANGED
etlplus/file/ods.py
CHANGED
etlplus/file/pb.py
CHANGED
etlplus/file/pbf.py
CHANGED
etlplus/file/properties.py
CHANGED
etlplus/file/proto.py
CHANGED
etlplus/file/psv.py
CHANGED
etlplus/file/rda.py
CHANGED
etlplus/file/rds.py
CHANGED
etlplus/file/sas7bdat.py
CHANGED
etlplus/file/sav.py
CHANGED
etlplus/file/sqlite.py
CHANGED
etlplus/file/sylk.py
CHANGED
etlplus/file/tab.py
CHANGED
etlplus/file/toml.py
CHANGED
etlplus/file/vm.py
CHANGED
etlplus/file/wks.py
CHANGED
etlplus/file/xls.py
CHANGED
etlplus/file/xlsm.py
CHANGED
etlplus/file/xpt.py
CHANGED
etlplus/file/zsav.py
CHANGED
etlplus/ops/README.md
CHANGED
|
@@ -1,14 +1,16 @@
|
|
|
1
|
-
# etlplus.ops
|
|
1
|
+
# `etlplus.ops` Subpackage
|
|
2
2
|
|
|
3
|
-
Documentation for the `etlplus.
|
|
3
|
+
Documentation for the `etlplus.ops` subpackage: core ETL primitives used by the CLI and pipeline
|
|
4
|
+
runner.
|
|
4
5
|
|
|
5
|
-
-
|
|
6
|
-
-
|
|
7
|
-
-
|
|
6
|
+
- Extract data from files, APIs, and databases (database extract is a placeholder today)
|
|
7
|
+
- Validate JSON-like data with schema-style rules
|
|
8
|
+
- Transform records (filter, map, select, sort, aggregate)
|
|
9
|
+
- Load data into files and APIs (database load is a placeholder today)
|
|
8
10
|
|
|
9
11
|
Back to project overview: see the top-level [README](../../README.md).
|
|
10
12
|
|
|
11
|
-
- [etlplus.ops
|
|
13
|
+
- [`etlplus.ops` Subpackage](#etlplusops-subpackage)
|
|
12
14
|
- [Validation Features](#validation-features)
|
|
13
15
|
- [Defining Validation Rules](#defining-validation-rules)
|
|
14
16
|
- [Example: Validating Data](#example-validating-data)
|
|
@@ -19,7 +21,6 @@ Back to project overview: see the top-level [README](../../README.md).
|
|
|
19
21
|
- Type checking (string, number, boolean, etc.)
|
|
20
22
|
- Required/optional fields
|
|
21
23
|
- Enum and pattern validation
|
|
22
|
-
- Custom rule support
|
|
23
24
|
|
|
24
25
|
## Defining Validation Rules
|
|
25
26
|
|
|
@@ -35,7 +36,7 @@ rules = {
|
|
|
35
36
|
## Example: Validating Data
|
|
36
37
|
|
|
37
38
|
```python
|
|
38
|
-
from etlplus.
|
|
39
|
+
from etlplus.ops import validate
|
|
39
40
|
|
|
40
41
|
result = validate({"name": "Alice", "age": 30}, rules)
|
|
41
42
|
if result["valid"]:
|
|
@@ -47,4 +48,4 @@ else:
|
|
|
47
48
|
## See Also
|
|
48
49
|
|
|
49
50
|
- Top-level CLI and library usage in the main [README](../../README.md)
|
|
50
|
-
- Validation utilities in [
|
|
51
|
+
- Validation utilities in [validate.py](validate.py)
|
etlplus/templates/README.md
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
# `etlplus.templates` Subpackage
|
|
2
2
|
|
|
3
|
-
Documentation for the `etlplus.templates` subpackage: SQL
|
|
3
|
+
Documentation for the `etlplus.templates` subpackage: bundled SQL/DDL templates used by the database
|
|
4
|
+
helpers.
|
|
4
5
|
|
|
5
6
|
- Provides Jinja2 templates for DDL and view generation
|
|
6
|
-
-
|
|
7
|
-
-
|
|
7
|
+
- Used by `etlplus.database.render_table_sql` and related helpers
|
|
8
|
+
- Exposed as plain template files you can reuse with your own Jinja2 setup
|
|
8
9
|
|
|
9
10
|
Back to project overview: see the top-level [README](../../README.md).
|
|
10
11
|
|
|
@@ -21,21 +22,22 @@ Back to project overview: see the top-level [README](../../README.md).
|
|
|
21
22
|
|
|
22
23
|
## Rendering Templates
|
|
23
24
|
|
|
24
|
-
|
|
25
|
+
ETLPlus does not currently expose a `render_template` helper in this package. Use the database
|
|
26
|
+
helpers instead:
|
|
25
27
|
|
|
26
28
|
```python
|
|
27
|
-
from etlplus.
|
|
29
|
+
from etlplus.database import render_table_sql, load_table_spec
|
|
28
30
|
|
|
29
|
-
|
|
31
|
+
spec = load_table_spec("schemas/users.yml")
|
|
32
|
+
sql = render_table_sql(spec, template="ddl")
|
|
30
33
|
```
|
|
31
34
|
|
|
32
35
|
## Example: Rendering a DDL Template
|
|
33
36
|
|
|
34
37
|
```python
|
|
35
|
-
from etlplus.
|
|
38
|
+
from etlplus.database import render_tables_to_string
|
|
36
39
|
|
|
37
|
-
|
|
38
|
-
sql = render_template("ddl.sql.j2", schema=schema)
|
|
40
|
+
sql = render_tables_to_string(["schemas/users.yml"], template="ddl")
|
|
39
41
|
print(sql)
|
|
40
42
|
```
|
|
41
43
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: etlplus
|
|
3
|
-
Version: 0.16.
|
|
3
|
+
Version: 0.16.7
|
|
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
|
|
@@ -141,7 +141,7 @@ ETLPlus supports Python 3.13 and above.
|
|
|
141
141
|
|
|
142
142
|
- **Extract** data from multiple sources:
|
|
143
143
|
- Files (CSV, JSON, XML, YAML)
|
|
144
|
-
- Databases (connection string support)
|
|
144
|
+
- Databases (connection string support; extract is a placeholder today)
|
|
145
145
|
- REST APIs (GET)
|
|
146
146
|
|
|
147
147
|
- **Validate** data with flexible rules:
|
|
@@ -161,7 +161,7 @@ ETLPlus supports Python 3.13 and above.
|
|
|
161
161
|
|
|
162
162
|
- **Load** data to multiple targets:
|
|
163
163
|
- Files (CSV, JSON, XML, YAML)
|
|
164
|
-
- Databases (connection string support)
|
|
164
|
+
- Databases (connection string support; load is a placeholder today)
|
|
165
165
|
- REST APIs (PATCH, POST, PUT)
|
|
166
166
|
|
|
167
167
|
## Installation
|
|
@@ -188,7 +188,7 @@ etlplus --help
|
|
|
188
188
|
etlplus --version
|
|
189
189
|
|
|
190
190
|
# One-liner: extract CSV, filter, select, and write JSON
|
|
191
|
-
etlplus extract
|
|
191
|
+
etlplus extract examples/data/sample.csv \
|
|
192
192
|
| etlplus transform --operations '{"filter": {"field": "age", "op": "gt", "value": 25}, "select": ["name", "email"]}' \
|
|
193
193
|
- temp/sample_output.json
|
|
194
194
|
```
|
|
@@ -218,8 +218,9 @@ include GET for extract and PATCH/POST/PUT for load.
|
|
|
218
218
|
|
|
219
219
|
### Databases (`database`)
|
|
220
220
|
|
|
221
|
-
Database connectors use connection strings for extraction and loading, and
|
|
222
|
-
|
|
221
|
+
Database connectors use connection strings for extraction and loading, and DDL can be rendered from
|
|
222
|
+
table specs for migrations or schema checks. Database extract/load operations are currently
|
|
223
|
+
placeholders; plan to integrate a database client in your runner.
|
|
223
224
|
|
|
224
225
|
### Files (`file`)
|
|
225
226
|
|
|
@@ -298,7 +299,7 @@ Recognized file formats are listed in the tables below. Support for reading to o
|
|
|
298
299
|
| `numbers` | N | N | Apple Numbers |
|
|
299
300
|
| `ods` | N | N | OpenDocument |
|
|
300
301
|
| `wks` | N | N | Lotus 1-2-3 |
|
|
301
|
-
| `xls` | Y |
|
|
302
|
+
| `xls` | Y | N | Microsoft Excel (BIFF; read-only) |
|
|
302
303
|
| `xlsm` | N | N | Microsoft Excel Macro-Enabled (Open XML) |
|
|
303
304
|
| `xlsx` | Y | Y | Microsoft Excel (Open XML) |
|
|
304
305
|
|
|
@@ -320,8 +321,8 @@ Recognized file formats are listed in the tables below. Support for reading to o
|
|
|
320
321
|
|
|
321
322
|
#### Logs and Event Streams
|
|
322
323
|
|
|
323
|
-
| Format |
|
|
324
|
-
| --- | --- | --- |
|
|
324
|
+
| Format | Read | Write | Description |
|
|
325
|
+
| --- | --- | --- | --- |
|
|
325
326
|
| `log` | N | N | Generic log file |
|
|
326
327
|
|
|
327
328
|
#### Data Archives
|
|
@@ -354,13 +355,15 @@ etlplus --help
|
|
|
354
355
|
etlplus --version
|
|
355
356
|
```
|
|
356
357
|
|
|
357
|
-
The CLI is implemented with Typer (Click-based).
|
|
358
|
-
on the documented commands/flags and run `etlplus <command>
|
|
358
|
+
The CLI is implemented with Typer (Click-based). The legacy argparse parser has been removed
|
|
359
|
+
(`create_parser` now raises), so rely on the documented commands/flags and run `etlplus <command>
|
|
360
|
+
--help` for current options.
|
|
359
361
|
|
|
360
362
|
**Example error messages:**
|
|
361
363
|
|
|
362
364
|
- If you omit a required argument: `Error: Missing required argument 'SOURCE'.`
|
|
363
|
-
- If you place an option before its argument: `Error: Option '--source-format' must follow the
|
|
365
|
+
- If you place an option before its argument: `Error: Option '--source-format' must follow the
|
|
366
|
+
'SOURCE' argument.`
|
|
364
367
|
|
|
365
368
|
#### Argument Order and Required Options
|
|
366
369
|
|
|
@@ -424,27 +427,27 @@ specific parser.
|
|
|
424
427
|
|
|
425
428
|
Extract from JSON file:
|
|
426
429
|
```bash
|
|
427
|
-
etlplus extract
|
|
430
|
+
etlplus extract examples/data/sample.json
|
|
428
431
|
```
|
|
429
432
|
|
|
430
433
|
Extract from CSV file:
|
|
431
434
|
```bash
|
|
432
|
-
etlplus extract
|
|
435
|
+
etlplus extract examples/data/sample.csv
|
|
433
436
|
```
|
|
434
437
|
|
|
435
438
|
Extract from XML file:
|
|
436
439
|
```bash
|
|
437
|
-
etlplus extract
|
|
440
|
+
etlplus extract examples/data/sample.xml
|
|
438
441
|
```
|
|
439
442
|
|
|
440
443
|
Extract from REST API:
|
|
441
444
|
```bash
|
|
442
|
-
etlplus extract
|
|
445
|
+
etlplus extract https://api.example.com/data
|
|
443
446
|
```
|
|
444
447
|
|
|
445
448
|
Save extracted data to file:
|
|
446
449
|
```bash
|
|
447
|
-
etlplus extract
|
|
450
|
+
etlplus extract examples/data/sample.csv > temp/sample_output.json
|
|
448
451
|
```
|
|
449
452
|
|
|
450
453
|
#### Validate Data
|
|
@@ -510,13 +513,13 @@ etlplus transform \
|
|
|
510
513
|
|
|
511
514
|
Load to JSON file:
|
|
512
515
|
```bash
|
|
513
|
-
etlplus extract
|
|
516
|
+
etlplus extract examples/data/sample.json \
|
|
514
517
|
| etlplus load temp/sample_output.json --target-type file
|
|
515
518
|
```
|
|
516
519
|
|
|
517
520
|
Load to CSV file:
|
|
518
521
|
```bash
|
|
519
|
-
etlplus extract
|
|
522
|
+
etlplus extract examples/data/sample.csv \
|
|
520
523
|
| etlplus load temp/sample_output.csv --target-type file
|
|
521
524
|
```
|
|
522
525
|
|
|
@@ -553,13 +556,13 @@ operations = {
|
|
|
553
556
|
transformed = transform(data, operations)
|
|
554
557
|
|
|
555
558
|
# Load data
|
|
556
|
-
load(transformed, "file", "temp/sample_output.json",
|
|
559
|
+
load(transformed, "file", "temp/sample_output.json", file_format="json")
|
|
557
560
|
```
|
|
558
561
|
|
|
559
562
|
For YAML-driven pipelines executed end-to-end (extract → validate → transform → load), see:
|
|
560
563
|
|
|
561
564
|
- Authoring: [`docs/pipeline-guide.md`](docs/pipeline-guide.md)
|
|
562
|
-
- Runner API and internals:
|
|
565
|
+
- Runner API and internals: see `etlplus.ops.run` docstrings and `docs/pipeline-guide.md`.
|
|
563
566
|
|
|
564
567
|
CLI quick reference for pipelines:
|
|
565
568
|
|
|
@@ -576,7 +579,7 @@ etlplus run --config examples/configs/pipeline.yml --job file_to_file_customers
|
|
|
576
579
|
|
|
577
580
|
```bash
|
|
578
581
|
# 1. Extract from CSV
|
|
579
|
-
etlplus extract
|
|
582
|
+
etlplus extract examples/data/sample.csv > temp/sample_extracted.json
|
|
580
583
|
|
|
581
584
|
# 2. Transform (filter and select fields)
|
|
582
585
|
etlplus transform \
|
|
@@ -611,7 +614,7 @@ etlplus load output.bin --target-type file --target-format csv < data.json
|
|
|
611
614
|
|
|
612
615
|
# Leave the flags off when extensions already match the desired format
|
|
613
616
|
etlplus extract data.csv --source-type file
|
|
614
|
-
etlplus load
|
|
617
|
+
etlplus load output.json --target-type file < data.json
|
|
615
618
|
```
|
|
616
619
|
|
|
617
620
|
## Transformation Operations
|
|
@@ -706,8 +709,9 @@ Looking for the HTTP client and pagination helpers? See the dedicated docs in
|
|
|
706
709
|
|
|
707
710
|
Curious how the pipeline runner composes API requests, pagination, and load calls?
|
|
708
711
|
|
|
709
|
-
- Runner overview and helpers:
|
|
710
|
-
-
|
|
712
|
+
- Runner overview and helpers: see `etlplus.ops.run` docstrings and
|
|
713
|
+
[`docs/pipeline-guide.md`](docs/pipeline-guide.md)
|
|
714
|
+
- Unified "connector" vocabulary (API/File/DB): `etlplus/connector`
|
|
711
715
|
- API/file targets reuse the same shapes as sources; API targets typically set a `method`.
|
|
712
716
|
|
|
713
717
|
### Running Tests
|
|
@@ -721,7 +725,7 @@ pytest tests/ -v
|
|
|
721
725
|
We split tests into two layers:
|
|
722
726
|
|
|
723
727
|
- **Unit (`tests/unit/`)**: single function or class, no real I/O, fast, uses stubs/monkeypatch
|
|
724
|
-
(e.g.
|
|
728
|
+
(e.g. small helpers in `etlplus.utils`, transform + validate helpers).
|
|
725
729
|
- **Integration (`tests/integration/`)**: end-to-end flows (CLI `main()`, pipeline `run()`,
|
|
726
730
|
pagination + rate limit defaults, file/API connector interactions) may touch temp files and use
|
|
727
731
|
fake clients.
|
|
@@ -808,7 +812,7 @@ Navigate to detailed documentation for each subpackage:
|
|
|
808
812
|
- [etlplus.cli](etlplus/cli/README.md): Command-line interface definitions for `etlplus`
|
|
809
813
|
- [etlplus.database](etlplus/database/README.md): Database engine, schema, and ORM helpers
|
|
810
814
|
- [etlplus.templates](etlplus/templates/README.md): SQL and DDL template helpers
|
|
811
|
-
- [etlplus.
|
|
815
|
+
- [etlplus.ops](etlplus/ops/README.md): Extract/validate/transform/load primitives
|
|
812
816
|
- [etlplus.workflow](etlplus/workflow/README.md): Helpers for data connectors, pipelines, jobs, and
|
|
813
817
|
profiles
|
|
814
818
|
|
|
@@ -824,7 +828,7 @@ Navigate to detailed documentation for each subpackage:
|
|
|
824
828
|
- API client docs: [`etlplus/api/README.md`](etlplus/api/README.md)
|
|
825
829
|
- Examples: [`examples/README.md`](examples/README.md)
|
|
826
830
|
- Pipeline authoring guide: [`docs/pipeline-guide.md`](docs/pipeline-guide.md)
|
|
827
|
-
- Runner internals: [`docs/
|
|
831
|
+
- Runner internals: see `etlplus.ops.run` docstrings and [`docs/pipeline-guide.md`](docs/pipeline-guide.md)
|
|
828
832
|
- Design notes (Mapping inputs, dict outputs): [`docs/pipeline-guide.md#design-notes-mapping-inputs-dict-outputs`](docs/pipeline-guide.md#design-notes-mapping-inputs-dict-outputs)
|
|
829
833
|
- Typing philosophy: [`CONTRIBUTING.md#typing-philosophy`](CONTRIBUTING.md#typing-philosophy)
|
|
830
834
|
- Demo and walkthrough: [`DEMO.md`](DEMO.md)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
etlplus/README.md,sha256=
|
|
1
|
+
etlplus/README.md,sha256=0q3QrboL0YCP1idUVRTw5IKDV2XPBCh44lLb-JUZBFw,1852
|
|
2
2
|
etlplus/__init__.py,sha256=yHZt-sjjfPjB_CrNhcT9bcMlZCfwiul39ZhQ2VfxpRs,318
|
|
3
3
|
etlplus/__main__.py,sha256=btoROneNiigyfBU7BSzPKZ1R9gzBMpxcpsbPwmuHwTM,479
|
|
4
4
|
etlplus/__version__.py,sha256=1E0GMK_yUWCMQFKxXjTvyMwofi0qT2k4CDNiHWiymWE,327
|
|
@@ -13,7 +13,7 @@ etlplus/api/__init__.py,sha256=eIHkdNBZv6ViB_5MhW3f3vWMYJLFoF4Tr3Wnb3O7B4E,4647
|
|
|
13
13
|
etlplus/api/auth.py,sha256=PZEJIBwLwnUGfF76s32a5GnLcpDvu4ghEd-wEAHx4rU,12260
|
|
14
14
|
etlplus/api/config.py,sha256=WmH1GOQxoBAr3vUsmYIyMbXSt7kiyNbtKjyMS1dqt-A,17653
|
|
15
15
|
etlplus/api/endpoint_client.py,sha256=UtvK4h_-fxINM-5QcumkcLJsL0Uw4L0L_4RMxC024Yk,30737
|
|
16
|
-
etlplus/api/enums.py,sha256=
|
|
16
|
+
etlplus/api/enums.py,sha256=YaeFbsmiP1uZIhRBxFjqFRyCDiVvE5KVWNtbWRUXkkQ,1142
|
|
17
17
|
etlplus/api/errors.py,sha256=8LuZfExUpZ67PPqPr6SdAmFA-wc0ocw4JHoBYyEcg0s,4664
|
|
18
18
|
etlplus/api/request_manager.py,sha256=K3tlRFflUM-_S-optnHzJx_AWcbd0ZQGVX_NytkN4zg,18690
|
|
19
19
|
etlplus/api/retry_manager.py,sha256=RV5xkmbExNHF_b-IN5RWx2wawiJzeklc9miGXPQb7U4,11326
|
|
@@ -27,13 +27,13 @@ etlplus/api/pagination/paginator.py,sha256=B0OK_0FVmUz3-lCDeKgDOqYJOoEQtjO6I5eSm
|
|
|
27
27
|
etlplus/api/rate_limiting/__init__.py,sha256=8VIjkW2wGjTFJjjAqOBSFKcKsBFuYndS4o33PLSo_q8,1072
|
|
28
28
|
etlplus/api/rate_limiting/config.py,sha256=U8T8BxrX87uFR-ksTG1FkmxoVr-FTaLIa0wWeXIcZss,9775
|
|
29
29
|
etlplus/api/rate_limiting/rate_limiter.py,sha256=qmOf15qvhFk2htMsGcHfgzATqOBd2BdrG8ShadfOIgY,7035
|
|
30
|
-
etlplus/cli/README.md,sha256=
|
|
30
|
+
etlplus/cli/README.md,sha256=FKZ5KV--khWolN0CZsmcq026HPoCkVjKHBsT2k8hBBI,1444
|
|
31
31
|
etlplus/cli/__init__.py,sha256=J97-Rv931IL1_b4AXnB7Fbbd7HKnHBpx18NQfC_kE6c,299
|
|
32
32
|
etlplus/cli/commands.py,sha256=Mbnu_YYUrOumbDjkul9x5VjP8VXW5u08xNi4nLF9Yyo,25048
|
|
33
33
|
etlplus/cli/constants.py,sha256=0F7dXIQKWUhhVu2Us527GJeknJIWpBqz7CK2e5OQgcE,1947
|
|
34
34
|
etlplus/cli/handlers.py,sha256=JdN7W7mqmQL9xyU7PkBtsQf7eu3j5-E2AhAQvbfy-4g,18470
|
|
35
35
|
etlplus/cli/io.py,sha256=tGGNQ4ecezqj-mD285fgBVrYdphdeqApsyV9VojOj1I,7836
|
|
36
|
-
etlplus/cli/main.py,sha256=
|
|
36
|
+
etlplus/cli/main.py,sha256=TwIog4jZTft86D_FEYWsNQu8XiU-MtoQFL6DNmVS_w0,5236
|
|
37
37
|
etlplus/cli/options.py,sha256=vfXT3YLh7wG1iC-aTdSg6ItMC8l6n0Lozmy53XjqLbA,1199
|
|
38
38
|
etlplus/cli/state.py,sha256=3Dq5BKct0uAvRajtc2yHbsX7wqepZOwlAMKsyvQcnqk,7918
|
|
39
39
|
etlplus/cli/types.py,sha256=tclhKVJXDqHzlTQBYKARfqMgDOcuBJ-Zej2pvFy96WM,652
|
|
@@ -46,77 +46,77 @@ etlplus/connector/enums.py,sha256=43NziUOpol4YvBtM13WJJzY1EAQOjaWESxLl7J2ZT8U,10
|
|
|
46
46
|
etlplus/connector/file.py,sha256=AsEXUHOokP2s5NQoTazF3Skz7qMj-1FNdvRZj9LfdbM,2858
|
|
47
47
|
etlplus/connector/types.py,sha256=51UPD4edtMRiRL35ZVfbmKTodhrLUiRP5P067SZGzms,953
|
|
48
48
|
etlplus/connector/utils.py,sha256=fS2hPAfuhKTg_L2xDxF5fJnsO1SuuDIiEWU7GuaJKUM,2933
|
|
49
|
-
etlplus/database/README.md,sha256=
|
|
49
|
+
etlplus/database/README.md,sha256=suWTTipq1pcswlhZT_qHaOnsgPeqMjttX3MV0w40jdY,1429
|
|
50
50
|
etlplus/database/__init__.py,sha256=AKJsDl2RHuRGPS-eXgNJeh4aSncJP5Y0yLApBF6i7i8,1052
|
|
51
51
|
etlplus/database/ddl.py,sha256=-7EAbyLkU8m3eYlHSNLFOQr1I4fPEbF0hTyByzjyvsU,7909
|
|
52
52
|
etlplus/database/engine.py,sha256=eDFnp4vzhoKuyLJSeHYpndHLUr27neS7CgdvMw8mNok,4384
|
|
53
53
|
etlplus/database/orm.py,sha256=ZCHkeVEUns2eievlFzmLyVKA3YVPea1xs6vrcUBZ7Jw,10010
|
|
54
54
|
etlplus/database/schema.py,sha256=813C0Dd3WE53KTYot4dgjAxctgKXLXx-8_Rk_4r2e28,7022
|
|
55
55
|
etlplus/database/types.py,sha256=_pkQyC14TzAlgyeIqZG4F5LWYknZbHw3TW68Auk7Ya0,795
|
|
56
|
-
etlplus/file/README.md,sha256=
|
|
56
|
+
etlplus/file/README.md,sha256=gjmreSBxq6MS8P5njTRskcQNk2RS5eMOngAUTh68VTI,3847
|
|
57
57
|
etlplus/file/__init__.py,sha256=X03bosSM-uSd6dh3ur0un6_ozFRw2Tm4PE6kVUjtXK8,475
|
|
58
58
|
etlplus/file/_imports.py,sha256=Cozv7d5G2P9PNgy2M4vrz0Wzo7hx9FTC0WcGcuVqga0,3193
|
|
59
59
|
etlplus/file/_io.py,sha256=Z3aTujy0rpbMKJHvO2UZ6bA1ohO-6ZiemyxF4GsayRc,3951
|
|
60
|
-
etlplus/file/accdb.py,sha256=
|
|
61
|
-
etlplus/file/arrow.py,sha256=
|
|
60
|
+
etlplus/file/accdb.py,sha256=6BiYRSlmJlEFyxktQk4pcEW9nWdKL59wQ6gH5YnWAfM,1718
|
|
61
|
+
etlplus/file/arrow.py,sha256=vQxcZQvQdPLw-WdrdPORqLrKaXwrX2sjJTND2Mbz5nE,1731
|
|
62
62
|
etlplus/file/avro.py,sha256=GR9GbDNcQ7TpaPKhcC6JL79XicSmNDIhH3cP0QDmLJg,4447
|
|
63
|
-
etlplus/file/bson.py,sha256=
|
|
64
|
-
etlplus/file/cbor.py,sha256
|
|
65
|
-
etlplus/file/cfg.py,sha256=
|
|
66
|
-
etlplus/file/conf.py,sha256=
|
|
63
|
+
etlplus/file/bson.py,sha256=IpR0d1JkBox6yRP-6wlS-C1Oe9VxOyj52Oo6mGDSelA,1650
|
|
64
|
+
etlplus/file/cbor.py,sha256=-6UukC1OysWcgLxO5KxRPFIMa8JON3XiYsRBEn8zqBc,1704
|
|
65
|
+
etlplus/file/cfg.py,sha256=8StrkG4b_N2My9niqQ1J8eDmCafIyg-wiDINfDbXGwk,1747
|
|
66
|
+
etlplus/file/conf.py,sha256=7GatAdy0VGmCCYL92CKBcuqIkXrgwprvnXn7i36C5pQ,1805
|
|
67
67
|
etlplus/file/core.py,sha256=IzcG4pQLq3QCQhswbgdWKxHSvmzvWzYweBrz7t6HDDo,8888
|
|
68
68
|
etlplus/file/csv.py,sha256=FTdxlVs3vsaj_t7vGY-unNiCpJI2TWuiaf2_8dJan6M,1754
|
|
69
|
-
etlplus/file/dat.py,sha256=
|
|
70
|
-
etlplus/file/dta.py,sha256=
|
|
71
|
-
etlplus/file/duckdb.py,sha256=
|
|
72
|
-
etlplus/file/enums.py,sha256=
|
|
69
|
+
etlplus/file/dat.py,sha256=ceUDuhFjwqJiO3I_T0pm1WmCr8_WhOB6-0mL-h0wx3k,1679
|
|
70
|
+
etlplus/file/dta.py,sha256=tmbhF2F5wRCoJk3nMEj4dvXzWAD-tnuNOBQL9KxIB9o,1653
|
|
71
|
+
etlplus/file/duckdb.py,sha256=lzE3Ik9gk07-YkpxwB7XY7WAJhzeiOPtjAnviINs6Jo,1668
|
|
72
|
+
etlplus/file/enums.py,sha256=48Hb0Pgt-eDC29EQK5A9kCydQtJ1aZXD7g-q0WCiCfM,11086
|
|
73
73
|
etlplus/file/feather.py,sha256=joOdQf_oIu__i8hwy5X4eK6MSqh6O0kKnub2VWD_Clg,2679
|
|
74
|
-
etlplus/file/fwf.py,sha256=
|
|
74
|
+
etlplus/file/fwf.py,sha256=uI6mjpGL0wPyiYe39j--G_6HoXEbe1yWkbyk1jRCc0c,1626
|
|
75
75
|
etlplus/file/gz.py,sha256=NfiXiE37rS2YC7dk1YC1ELbbEpzJdypIy-no9cVoaco,2641
|
|
76
|
-
etlplus/file/hbs.py,sha256=
|
|
77
|
-
etlplus/file/hdf5.py,sha256=
|
|
78
|
-
etlplus/file/ini.py,sha256=
|
|
79
|
-
etlplus/file/ion.py,sha256=
|
|
80
|
-
etlplus/file/jinja2.py,sha256
|
|
76
|
+
etlplus/file/hbs.py,sha256=gu9dffaEJDjXvNwkBNytYexf6YJB2THB0IySua6wX8o,1651
|
|
77
|
+
etlplus/file/hdf5.py,sha256=SliDFNhG14U0Bd6BlD2IkTO_PFwo7jxeauc_FNgyOy4,1661
|
|
78
|
+
etlplus/file/ini.py,sha256=qup40MuIXwcXisw4ODnzwqjvHRTaZofLhYtaZHgAaes,1738
|
|
79
|
+
etlplus/file/ion.py,sha256=LmfU1WKHDEQMShPVW1jZU5CKPRpD0qacznx_6N_ZnfE,1747
|
|
80
|
+
etlplus/file/jinja2.py,sha256=-BDMtFks3VhUQixydBM9cNqJrQZBOa_NCoYZ4xXwgdc,1667
|
|
81
81
|
etlplus/file/json.py,sha256=vY3UYjzQzmJUAY0avR2cm70hTTED4xEF38WEEj0DhDQ,2140
|
|
82
|
-
etlplus/file/log.py,sha256=
|
|
83
|
-
etlplus/file/mat.py,sha256=
|
|
84
|
-
etlplus/file/mdb.py,sha256=
|
|
85
|
-
etlplus/file/msgpack.py,sha256=
|
|
86
|
-
etlplus/file/mustache.py,sha256=
|
|
87
|
-
etlplus/file/nc.py,sha256=
|
|
82
|
+
etlplus/file/log.py,sha256=1DkPzzI2GhtYwCCBLQbCmUELuQFKJaIHpGWPYGcCMhg,1718
|
|
83
|
+
etlplus/file/mat.py,sha256=BH8jdpNc-za5Ci30rLTl0DYnFhP5w-xL_V2i7k7_YvI,1691
|
|
84
|
+
etlplus/file/mdb.py,sha256=lFqkTHmcaWNlaNkwu_qqlc7XSq82yoOBxUz_YbArfV8,1694
|
|
85
|
+
etlplus/file/msgpack.py,sha256=YU6DhPtBPULiOMHto0r_ioHqt1ILZi1OEfLye5y64-o,1695
|
|
86
|
+
etlplus/file/mustache.py,sha256=nfrmN0EZbId-3rZSvustHw3VVVO9fz03K4PILOCSklQ,1684
|
|
87
|
+
etlplus/file/nc.py,sha256=EQYwR5053a_yKNShYQ-sAWTK69goDPTrgK6F_2Puf44,1707
|
|
88
88
|
etlplus/file/ndjson.py,sha256=jpZgLZL-Vy4a6tsm5cxy0G9kW-x-X5kFSbnUn-XjIJw,2442
|
|
89
|
-
etlplus/file/numbers.py,sha256=
|
|
90
|
-
etlplus/file/ods.py,sha256=
|
|
89
|
+
etlplus/file/numbers.py,sha256=Fo58Kshl5c489H2yYsxIMWfS0Wp3e0viUyoZfVcEcQI,1647
|
|
90
|
+
etlplus/file/ods.py,sha256=DBDJh5_O19s3XEfSgfrfX5ze5-gsIqfkdvS42D91I5E,1837
|
|
91
91
|
etlplus/file/orc.py,sha256=RdK4IERoLWnGSgpBclfDmwMmtac8VYyet3Z9AFCyj2E,2612
|
|
92
92
|
etlplus/file/parquet.py,sha256=6klk-GgNnFBbsRU0J8LiGm5c67A6FcX1AEZNf-cNSPM,2768
|
|
93
|
-
etlplus/file/pb.py,sha256=
|
|
94
|
-
etlplus/file/pbf.py,sha256=
|
|
95
|
-
etlplus/file/properties.py,sha256=
|
|
96
|
-
etlplus/file/proto.py,sha256=
|
|
97
|
-
etlplus/file/psv.py,sha256=
|
|
98
|
-
etlplus/file/rda.py,sha256=
|
|
99
|
-
etlplus/file/rds.py,sha256=
|
|
100
|
-
etlplus/file/sas7bdat.py,sha256=
|
|
101
|
-
etlplus/file/sav.py,sha256=
|
|
102
|
-
etlplus/file/sqlite.py,sha256=
|
|
93
|
+
etlplus/file/pb.py,sha256=1Yb9dmU9zKT0uCSrb7towV_0l9pPUv-HKfrQEtCkBLs,1652
|
|
94
|
+
etlplus/file/pbf.py,sha256=eOGQhxgqRZ39tHAgO1ZU9J6LLQoiT6kcokujczASWJI,1657
|
|
95
|
+
etlplus/file/properties.py,sha256=DLIJNBDVhNyDZTBAui2u6KtsjSfj9-NqJ21t6QjAUaU,1755
|
|
96
|
+
etlplus/file/proto.py,sha256=cVsztidiWEMRhseZ64ODIVaWaZZwoxQgmdqtezCrB_8,1705
|
|
97
|
+
etlplus/file/psv.py,sha256=Vf99_4QXPFBQJ1Itp3p7cT1YHlgu_4eT1HQUk9_BXU8,1763
|
|
98
|
+
etlplus/file/rda.py,sha256=WCqM3vgCZa8hJYvszCenPhaflg62SuskUMC4VK4gfqs,1705
|
|
99
|
+
etlplus/file/rds.py,sha256=fVkvggU67QZniQMZQXzi-obos9xyuHwz13e62OSMfLU,1662
|
|
100
|
+
etlplus/file/sas7bdat.py,sha256=VoqHQ4BH8WEjlgl0Za6g3hfQMhNQjVxYEP5BxBAqXqc,1743
|
|
101
|
+
etlplus/file/sav.py,sha256=anStccP9vInq_44_litvWMPCGoQm-yAU0sZ0PpKsr2g,1634
|
|
102
|
+
etlplus/file/sqlite.py,sha256=nrUHC7dqwiPHsNoxRMvo7DwTiqOXxAs6TPq7HQbwdCw,1689
|
|
103
103
|
etlplus/file/stub.py,sha256=4vlqjIo_bBy69dIU2y2iy5fqnezt_bOuS218zyijQfs,1749
|
|
104
|
-
etlplus/file/sylk.py,sha256=
|
|
105
|
-
etlplus/file/tab.py,sha256=
|
|
106
|
-
etlplus/file/toml.py,sha256=
|
|
104
|
+
etlplus/file/sylk.py,sha256=PCs_cA5lap6taf9bK5JY50seixomrsQE0wUrsFvXEmc,1694
|
|
105
|
+
etlplus/file/tab.py,sha256=Hz7YjKP68OXwwd7EVl_U0O3WvsoPwerOddGL63p3-7Q,2021
|
|
106
|
+
etlplus/file/toml.py,sha256=KGxqNX7V3ajsqSagU8aIBxwMrbxFPAleLKiljyAcqNA,1663
|
|
107
107
|
etlplus/file/tsv.py,sha256=SUe-UeL3zExX2idvpHiMWuRm5VQ8AyqqlNJckc9CDCU,1776
|
|
108
108
|
etlplus/file/txt.py,sha256=Ys7MmKBOiHQnRK0Bb3VuIIny2_1Ejr-V_YdPlUfOEjc,2321
|
|
109
|
-
etlplus/file/vm.py,sha256=
|
|
110
|
-
etlplus/file/wks.py,sha256=
|
|
111
|
-
etlplus/file/xls.py,sha256=
|
|
112
|
-
etlplus/file/xlsm.py,sha256=
|
|
109
|
+
etlplus/file/vm.py,sha256=psRbD1mH5QyLNlX1txpn4eghUawdIA30aIjf-wP0szQ,1626
|
|
110
|
+
etlplus/file/wks.py,sha256=BblAhTzAXn93LK1xdkdWcYypYfZa2PxqvgVCuC_sq6w,1692
|
|
111
|
+
etlplus/file/xls.py,sha256=OK0_MZYaPWFDWbAdp-suz2wSg89px1EWT4kY2e9R3pg,1799
|
|
112
|
+
etlplus/file/xlsm.py,sha256=BDux1Tm7iccmbvtKk_X5bPET0PpF0IW9c7ympIJroEo,1775
|
|
113
113
|
etlplus/file/xlsx.py,sha256=UOwz-IIeRU2GyAI8Upx2hn7v3KPZalpIaGO9hXuaOGo,2192
|
|
114
114
|
etlplus/file/xml.py,sha256=lor8KsclDSy1tdOExL1GmYpaQVcZGRNEwOd2liiPPbk,4389
|
|
115
|
-
etlplus/file/xpt.py,sha256=
|
|
115
|
+
etlplus/file/xpt.py,sha256=9lW8ievpqF4PKPFRWH0ZlmGe7BR8TP_ETRogNQ79TOA,1739
|
|
116
116
|
etlplus/file/yaml.py,sha256=b_SxDSEQPVXQv9a9Ih4wAcI940pE5Ksy5pQE6K6ckhw,2062
|
|
117
117
|
etlplus/file/zip.py,sha256=8wnmnGW_pGTx65736CzAG67XIi5y98KxucRT8sNDeuQ,4195
|
|
118
|
-
etlplus/file/zsav.py,sha256=
|
|
119
|
-
etlplus/ops/README.md,sha256=
|
|
118
|
+
etlplus/file/zsav.py,sha256=WasYgfogIQAvm4LWkDWgeeeyYWvY4MSoh-SrScqqBOM,1701
|
|
119
|
+
etlplus/ops/README.md,sha256=SP1yW0aATvMp_HEslSjf2Hff-At96QDkfXxh3FcDbO0,1465
|
|
120
120
|
etlplus/ops/__init__.py,sha256=r5_-pPhSLCD1nq1EbN0rQrLOGpudueeIxCH_JvT2bt0,1718
|
|
121
121
|
etlplus/ops/enums.py,sha256=dC_8CfaTiB2i83Az-oG-2hkjMuAfDADNbcMF2f94UeU,4014
|
|
122
122
|
etlplus/ops/extract.py,sha256=fPk8LLjEmCZ5U59IUm15vG5aXTmduteCqtsVIlxvvxI,11022
|
|
@@ -126,7 +126,7 @@ etlplus/ops/transform.py,sha256=-41uw_pwOGsMTUYxtXaeYOmTF_fTkN-L4Q9KT1OFe78,2567
|
|
|
126
126
|
etlplus/ops/types.py,sha256=Cvp8AJzJhJ1iYjyHd7j9ZLioxE2NdK__3g6fOI0qq6Q,4198
|
|
127
127
|
etlplus/ops/utils.py,sha256=9UXym1W4qCMxBkcqCPUmI1QJ27yh1kOAbVnI1KsAGwE,10855
|
|
128
128
|
etlplus/ops/validate.py,sha256=VtMhrH6itd_PFH4IhBOndvJpxxOPI56OAJhnrSyT_6U,13323
|
|
129
|
-
etlplus/templates/README.md,sha256=
|
|
129
|
+
etlplus/templates/README.md,sha256=hkeFypVEhxygSB4H40BuGJmZHzs8DbpPnhGt9mvgY_c,1478
|
|
130
130
|
etlplus/templates/__init__.py,sha256=tsniN7XJYs3NwYxJ6c2HD5upHP3CDkLx-bQCMt97UOM,106
|
|
131
131
|
etlplus/templates/ddl.sql.j2,sha256=s8fMWvcb4eaJVXkifuib1aQPljtZ8buuyB_uA-ZdU3Q,4734
|
|
132
132
|
etlplus/templates/view.sql.j2,sha256=Iy8DHfhq5yyvrUKDxqp_aHIEXY4Tm6j4wT7YDEFWAhk,2180
|
|
@@ -135,9 +135,9 @@ etlplus/workflow/__init__.py,sha256=XgCQr684om0rONrQZ61yQ0r4qqFQL0iLAAB2Mn2BRSE,
|
|
|
135
135
|
etlplus/workflow/dag.py,sha256=-f1x8N1eb-PUuiOwEvFLmJwfR7JaMDJihlCHlhrFhgE,2937
|
|
136
136
|
etlplus/workflow/jobs.py,sha256=hLE9QJUzQaI0aOEon0P-xxxa6xHp997ANei4F310WRY,8711
|
|
137
137
|
etlplus/workflow/profile.py,sha256=FQU3bzBZ9_yjKC9kCXKN1FQDS9zjNUjtWB1r3UL95_Q,1993
|
|
138
|
-
etlplus-0.16.
|
|
139
|
-
etlplus-0.16.
|
|
140
|
-
etlplus-0.16.
|
|
141
|
-
etlplus-0.16.
|
|
142
|
-
etlplus-0.16.
|
|
143
|
-
etlplus-0.16.
|
|
138
|
+
etlplus-0.16.7.dist-info/licenses/LICENSE,sha256=MuNO63i6kWmgnV2pbP2SLqP54mk1BGmu7CmbtxMmT-U,1069
|
|
139
|
+
etlplus-0.16.7.dist-info/METADATA,sha256=F2JOWX7lBq84wFev4eeGCXXsnXuOpxulCkBMjsBoxnE,28401
|
|
140
|
+
etlplus-0.16.7.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
141
|
+
etlplus-0.16.7.dist-info/entry_points.txt,sha256=6w-2-jzuPa55spzK34h-UKh2JTEShh38adFRONNP9QE,45
|
|
142
|
+
etlplus-0.16.7.dist-info/top_level.txt,sha256=aWWF-udn_sLGuHTM6W6MLh99ArS9ROkUWO8Mi8y1_2U,8
|
|
143
|
+
etlplus-0.16.7.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|