Skip to main content

daggydata

Upload datasets to Daggy from a script, a notebook or cron, with an API key: one file, several files, a hive-partitioned folder, or a pandas or polars DataFrame straight from memory, up to 25 GB. CSV, TSV, JSON and Parquet are supported. Bytes go straight to storage in parallel parts, interrupted uploads resume where they stopped, and only requests is needed, no cloud credentials.

pip install daggydata

The package installs the daggy command and imports as daggy.

Create an API key on the API keys page of the Daggy app, then:

export DAGGY_API_KEY=daggy_prod_...
daggy upload sales ./sales.parquet
daggy upload events ./events/ --overwrite --description "Clickstream"
import daggy  # reads DAGGY_API_KEY

ds = daggy.upload("sales", "./sales.parquet")
print(ds.name, ds.num_obs, "rows")

What gets uploaded

  • A file is uploaded under its name, with anything outside [A-Za-z0-9_.-] replaced (Q3 sales.csv → Q3_sales.csv).
  • A folder becomes one dataset. Hive folders like region=west/ become columns. Marker files (_SUCCESS, .crc, _temporary/) are skipped.
  • Formats: .parquet .pq .csv .tsv .txt .json .ndjson .jsonl, one format per upload, uncompressed.
  • --overwrite (overwrite=True) replaces an existing dataset; without it, an existing name is refused. Appends are not supported.
Limit Value
Size per upload 25 GiB
Files per upload 200
Open uploads at once 5
Paths in a folder [A-Za-z0-9_.=/-], at most 8 levels

From a DataFrame

pip install "daggydata[pandas]"   # adds pyarrow; polars needs nothing extra
ds = daggy.upload("sales", df)   # pandas or polars DataFrame, or a pyarrow Table

Any object with __arrow_c_stream__ (DuckDB relations, ibis tables, ...) works too, with pyarrow installed. The table is written to a temporary Parquet file (it needs free space in $TMPDIR), uploaded, and deleted. A pandas index is kept as a column only when every level is named (df.set_index("date") keeps date; the leftover integer index of a filtered frame is dropped).

A table can't be resumed. If an upload fails, call daggy.upload again, with overwrite=True if the dataset was already created.

Resuming

The session id is printed (logged, from Python) before any data is sent. If a run is killed or a part keeps failing, run it again with the id; only the missing parts are sent:

daggy upload sales ./sales.parquet --resume <session_id>
try:
    daggy.upload("sales", "./sales.parquet")
except daggy.UploadError as e:
    print(e.code, e.session_id, e.final_state)
    # final_state None or "uploading": daggy.upload(..., resume=e.session_id)

UploadError has status, code, message, session_id and final_state (None for a refused request or a failed part, otherwise failed, aborted or uploading). From Python, progress goes to the daggy logger: logging.basicConfig(level=logging.INFO) shows it.

Options

CLI Python
--overwrite overwrite=True replace an existing dataset
--description D description="D" dataset description (≤ 10,000 characters)
--resume SID resume="SID" finish an earlier upload
--workers N workers=N parallel part uploads (default 8)
--api URL api_url="URL" API address; default from the key (DAGGY_API_URL also works)
DAGGY_API_KEY api_key="..." the key

CLI exit codes: 0 done; 1 the upload ended failed/aborted or needs --resume; 2 bad usage, a refused request or a part that kept failing; 130 interrupted.

License

MIT

Metadata

Release files for daggydata 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for daggydata 0.1.1
File Size Uploaded Provenance
daggydata-0.1.1.tar.gz 9.6 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for daggydata 0.1.1
File Interpreter ABI Platform
daggydata-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 21.5 kB

Release files / daggydata-0.1.1.tar.gz

Download URL daggydata-0.1.1.tar.gz
Size 9.6 kB
Tags Source
SHA-256 checksum
How to use checksums
e47b67edfcc78b893fbc5e2bc9b9c684f97e67edc9e88316c33e93caf0088ef1
BLAKE2b-256 checksum
How to use checksums
359fcdf65fe4cb9bbed7d0f6dd530d7de042ad84636d57c38c9da97f5b642b58
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.7.4

Release files / daggydata-0.1.1-py3-none-any.whl

Download URL daggydata-0.1.1-py3-none-any.whl
Size 11.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d1551d7b497f7baf9c679ac68013ac124014f316b9a440807cc28945ad392184
BLAKE2b-256 checksum
How to use checksums
2f817be63ad4f40b8f457ba1ec95c345b3143b3c9255657a0bb848194e211655
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.7.4

Security for daggydata 0.1.1

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.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A 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.

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page