Skip to main content

uplint

File Safety & Integrity CLI — validate files, detect blank content, and scan for viruses in one command.

uplint inspects files the way a strict upload pipeline would: it checks that a file's real structure matches its extension, flags blank or empty documents, and (with ClamAV) scans for malware — locally or across an S3 bucket.

Installation

pip install uplint

To enable S3 bucket scanning, install the optional extra:

pip install "uplint[s3]"

Requires Python 3.11+. Virus scanning requires a running ClamAV daemon (clamd).

Quick start

# Validate a single file
uplint validate report.pdf

# Scan a whole directory
uplint scan ./uploads

# Watch a directory and validate new files as they arrive
uplint watch ./incoming

# Scan an S3 bucket (requires the [s3] extra)
uplint s3-scan my-bucket --prefix uploads/

Commands

Command What it does
uplint validate <file> Validate a single file's structure, content, and (optionally) malware.
uplint scan <dir> Recursively validate every file in a directory.
uplint s3-scan <bucket> Validate objects in an S3 bucket (needs uplint[s3]).
uplint watch <dir> Watch a directory and validate files as they are added or changed.

Run uplint --help or uplint <command> --help for all options.

What it checks

  • Structural validation — the file's binary structure matches its declared type (a .pdf really is a PDF, a .jpg has valid JPEG markers, and so on), catching corrupt files and polyglots.
  • Blank / empty detection — PDFs with no readable text, spreadsheets with no data rows, single-color images, and whitespace-only text files.
  • Virus scanning — malware, embedded scripts, and known exploit patterns via ClamAV.

Output & exit codes

Results print as a table by default, or as JSON with --json for CI/CD. uplint exits non-zero when any file fails validation, so it drops straight into a pipeline:

uplint scan ./uploads --json || exit 1

Documentation

Full docs, including S3 tuning and CI/CD integration, live at https://docs.uplint.dev.

License

MIT — see LICENSE.

Metadata

Release files for uplint 0.1.0

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

Source distribution (sdist)

Source distribution for uplint 0.1.0
File Size Uploaded
uplint-0.1.0.tar.gz 19.7 kB Details

Built distribution (wheel)

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

Total release size: 42.3 kB

Release files / uplint-0.1.0.tar.gz

Download URL uplint-0.1.0.tar.gz
Size 19.7 kB
Tags Source
SHA-256 checksum
How to use checksums
9a8343662ce649720e50d3bdec94f2af833b94ac209116eafe4fd9a06c1777d1
BLAKE2b-256 checksum
How to use checksums
1a3feba1b522f11bb6b5788a6b299018081b1e5d0ded47e9ddf845a7130de8fd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.6

Release files / uplint-0.1.0-py3-none-any.whl

Download URL uplint-0.1.0-py3-none-any.whl
Size 22.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
244ea6e7dbd7ff67531ab27e50f4da0897b95c2faf57f3539bea28a7dcfb7c98
BLAKE2b-256 checksum
How to use checksums
02e07c6ab3de421868e8fcfbed3f79a6748649e535ff979635b596cbf27b0101
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.6

Release history Release notifications | RSS feed

This release

0.1.0 This release

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