Skip to main content

kDrive Uploader

A small tool to programmatically upload files to kDrive drop boxes, used by the author as a poor man's backup solution.

Quickstart

First install with pip then run:

pip install kdrive-uploader

# upload all files in current folder
kdrive-uploader 0000000/00000000-0000-0000-0000-000000000000

# upload a specific file
kdrive-uploader 0000000/00000000-0000-0000-0000-000000000000 README.md

The link can either be just the last part containing the ids as above or a full kDrive drop box link (in the shape https://kdrive.infomaniak.com/app/collaborate/0000000/00000000-0000-0000-0000-000000000000).

You can also run it directly using uv:

uvx kdrive-uploader --help

Or with docker (still using uv):

docker run --rm --workdir /io -v .:/io -v uv-cache:/root/ ghcr.io/astral-sh/uv:alpine uvx kdrive-uploader --help

More info

A state database (.kdu_state.sqlite3) at the root of the backed-up directory tracks each file's hash. Only new or changed files are uploaded on each run. The root is the closest parent directory that already contains a state database, or the target directory itself if none is found.

This works best for append-only cases, since kDrive drop boxes are write-only. Updates are still handled by kDrive, which creates a duplicate with (1) appended to the filename. Being write-only and append-only prevents an attacker who takes control of the server from compromising the backup.

Losing the state database would result in a full re-upload and duplicates. In such scenarios, the easiest fix is to clear the drop box first. In the future, a --fake argument could allow generating an initial state database from a local kDrive copy, which could then be deployed to the server to avoid a full re-upload.

Manual

Usage: kdrive-uploader [OPTIONS] LINK [PATH]

╭─ Arguments ────────────────────────────────────────────────────────────────────────────────────────╮
│ *    link      TEXT    [required]                                                                  │
│      path      [PATH]  [default: .]                                                                │
╰────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ──────────────────────────────────────────────────────────────────────────────────────────╮
│ --first-name                    TEXT  [default: kdrive]                                            │
│ --last-name                     TEXT  [default: uploader]                                          │
│ --email                         TEXT  [default: kdrive-uploader@ik.me]                             │
│ --dry-run       --no-dry-run          [default: no-dry-run]                                        │
│ --help                                Show this message and exit.                                  │
╰────────────────────────────────────────────────────────────────────────────────────────────────────╯

Dev quickstart

# create dev env
uv sync --dev

# install prek (git hooks manager)
uv run prek install

# run from source
cd test_data
uv run kdrive-uploader 0000000/00000000-0000-0000-0000-000000000000

Release files for kdrive-uploader 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 kdrive-uploader 0.1.1
File Size Uploaded
kdrive_uploader-0.1.1.tar.gz 4.5 kB Details

Built distribution (wheel)

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

Total release size: 9.1 kB

Release files / kdrive_uploader-0.1.1.tar.gz

Download URL kdrive_uploader-0.1.1.tar.gz
Size 4.5 kB
Tags Source
SHA-256 checksum
How to use checksums
e45861f461cc8cac5c8f5fb42eb8f27b796100a025f8960d572c9b1cb3a6b684
BLAKE2b-256 checksum
How to use checksums
b7970c5b241827ebe72f157a3c9ec7efee499eaab620db45426182ec008c1a2e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.10.12 {"installer":{"name":"uv","version":"0.10.12","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

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

Download URL kdrive_uploader-0.1.1-py3-none-any.whl
Size 4.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
be3d5e99914bffcb078850bce46bbc13067947f357e0754974ae7cb47d67ca0a
BLAKE2b-256 checksum
How to use checksums
277537501e0b01c6b2914a769f8060c5baf0cb520d85d5f74bae99bd39318f55
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.10.12 {"installer":{"name":"uv","version":"0.10.12","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

0.1.0

2 release files

0.0.4

2 release files

0.0.3

2 release files

0.0.2

2 release files

0.0.1

2 release files

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