airflow-provider-ttdu
Apache Airflow provider (unofficial, not an Apache Software Foundation project) that runs TTDU document flows from DAGs on this PC's offline runner or the TTDU hub API.
- Connection type
ttdu: Host = runner/hub URL, Password = API key, Extra{"target": "local"}or{"target": "hub"}. TtduHook(ttdu_conn_id).run_flow(flow, files, vars)TtduRunFlowOperator(flow="C", input_paths=["/in/*.pdf"], output_dir="/out", vars={...})writes the result files tooutput_dirand returns{ok, count, notes, files:[{name, size, sha256, path}]}as XCom (no file bytes in XCom).
pip install airflow-provider-ttdu. Pure standard library client. Tested on Airflow 3.4.0 (airflow dags test); Airflow 2.7+ imports are supported in code but not tested.
Example DAGs: ttdu_office_demo (A, B, C, HWP), ttdu_monthly_payroll_check (5th of month, one task per client folder), ttdu_folder_hwp_to_pdf (FileSensor → HWP → PDF).
Where do my files go?
| Target | URL | Files |
|---|---|---|
This PC (local) |
http://127.0.0.1:8790 (the TTDU office runner, ttdu serve) |
Sent only to the runner on the same PC. The runner works with outbound network blocked, so files never leave the PC. |
Hub (hub) |
https://toolsthatdontupload.com |
Files are uploaded to the TTDU hub for the run (15 MB per request). Only server-capable tools run there (e.g. pdf.merge); the office flows A/B/C/HWP answer 422 unsupported on the hub - run them on This PC. |
If the automation tool runs in Docker Desktop, use http://host.docker.internal:8790 and start the runner with --allow-docker (the "local API, allow Docker" launcher in the office package). The runner still listens on 127.0.0.1 only and still needs the API key (local-api-key.txt).
Ready flows
| id | What it does | Input | Output |
|---|---|---|---|
A |
Receipt photos → one PDF, named {client}_{date}.pdf, ≤ 1 MB |
images | 1 PDF |
B |
Payroll check (4 insurances, income tax recalculated); period read from the file name YYYY-MM_…xlsx |
1 xlsx | {client}_<payroll check>_{date}.xlsx (Korean file name) |
C |
Redact resident registration numbers, phone numbers, account numbers | PDF / images | *-redacted-clean.* |
HWP / HWP_TEXT |
HWP/HWPX → PDF / text | hwp, hwpx | PDF / txt |
| custom | any ttdu.flow/v1 JSON exported from https://workflows.toolsthatdontupload.com |
API: POST /v1/flows/run (multipart flow, vars, files; header X-API-Key) → {ok, steps, notes, outputs:[{name, mime, size, sha256, base64}]}.
License
MIT © 2026 Park Jihoon (Tools That Don't Upload). This package contains only our code. It does not include or modify the host platform's code.
Metadata
Release files for airflow-provider-ttdu 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| airflow_provider_ttdu-0.2.0.tar.gz | 8.6 kB | With provenance | Details for airflow_provider_ttdu-0.2.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| airflow_provider_ttdu-0.2.0-py3-none-any.whl | Python 3 | none | any | Details for airflow_provider_ttdu-0.2.0-py3-none-any.whl |
Total release size: 19.5 kB
Release files / airflow_provider_ttdu-0.2.0.tar.gz
| Download URL | airflow_provider_ttdu-0.2.0.tar.gz |
|---|---|
| Size | 8.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
598f2bfeb28432a4f90a0de64cce7a865e1e85bf76df281d357152c1502f412d
|
|
BLAKE2b-256 checksum How to use checksums |
b653e345d82de6595994ffbbc217462fbe6fa422fb492ef17ce6e321b381d50e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 9, 2026.
Transparency logRelease files / airflow_provider_ttdu-0.2.0-py3-none-any.whl
| Download URL | airflow_provider_ttdu-0.2.0-py3-none-any.whl |
|---|---|
| Size | 10.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d11a26e9623b249fb70e604640a338d5c2e4e57be10ccf730b6ed97cb262e88f
|
|
BLAKE2b-256 checksum How to use checksums |
0ff5bb838851734b353f92455914c00d033faeb7b9f844757388ab7eeebce6e2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 9, 2026.
Transparency logSecurity for airflow-provider-ttdu 0.2.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
Both files in this release have been uploaded with provenance metadata.
Attestation for airflow_provider_ttdu-0.2.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 9, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.