Skip to main content

uploadkit-security

Reusable security validators for UploadKit.

What problem does this solve?

Filename, extension, MIME, size, and checksum checks that plug into UploadPolicy.validators without modifying UploadKit Core.

When to use it

Use when uploads need a standard security validation stack.

When not to use it

  • Do not put antivirus here (see uploadkit-clamav).
  • Do not put image/PDF/office-specific checks here (see feature packages).

Installation

Requires Python 3.10+.

pip install uploadkit-security

For comprehensive MIME detection via libmagic:

pip install 'uploadkit-security[magic]'

System dependency (libmagic)

python-magic needs the OS libmagic library. Install it before using the [magic] extra:

OS Package
Ubuntu / Debian libmagic1
Fedora / RHEL file-libs
Alpine libmagic
macOS (Homebrew) libmagic
# Ubuntu / Debian
sudo apt install libmagic1

# Fedora / RHEL
sudo dnf install file-libs

# Alpine
sudo apk add libmagic

# macOS (Homebrew)
brew install libmagic

Without libmagic / python-magic, MIME checks still work via the built-in signature table for common types (images, PDF, ZIP/OOXML, etc.).

Quick Start

from uploadkit import Uploader, UploadPolicy
from uploadkit_security import ChecksumValidator, default_validators

policy = UploadPolicy(
    max_size=10 * 1024 * 1024,
    allowed_extensions=frozenset({"png", "jpg"}),
    allowed_mime_types=frozenset({"image/png", "image/jpeg"}),
    validators=default_validators(),
)
uploader = Uploader(policy, storage=my_storage)

Customize the validator stack

# All stock defaults
validators=default_validators()

# All stock defaults except checksum
validators=default_validators(exclude=ChecksumValidator)

# Only selected stock validators
validators=default_validators(include=(FileSizeValidator, FileNameValidator))

# Clear stock defaults — use only your own
validators=default_validators(include=(), extra=(MyValidator(), OtherValidator()))

# Mix stock + custom
validators=default_validators(
    include=(FileSizeValidator, ExtensionValidator),
    extra=(MyValidator(),),
)

# Or pass validators directly (no helper)
validators=(MyValidator(),)
validators=()  # no checks

Architecture

Validators implement the Core Validator protocol and attach side-channel attributes (uploader_mime_type, uploader_sha256) that Core reads when building UploadResult.

Separate async classes implement AsyncStreamingValidator for AsyncUploader (begin / feed / finalize) and write mime/sha256 onto UploadContext.

from uploadkit import UploadPolicy
from uploadkit_security import default_async_validators

policy = UploadPolicy(
    max_size=10 * 1024 * 1024,
    async_validators=default_async_validators(),
)

Public API

Symbol Kind
FileSizeValidator Public
ExtensionValidator Public
MimeTypeValidator Public
FileNameValidator Public
ChecksumValidator Public
default_validators Public
AsyncFileSizeValidator Public
AsyncExtensionValidator Public
AsyncMimeTypeValidator Public
AsyncFileNameValidator Public
AsyncChecksumValidator Public
default_async_validators Public
sanitize_filename / detect_mime_type Public

Changelog

See CHANGELOG.md.

Contributing

See CONTRIBUTING.md.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

uploadkit_security-0.2.1.tar.gz (14.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

uploadkit_security-0.2.1-py3-none-any.whl (12.8 kB view details)

Uploaded Python 3

File details

Details for the file uploadkit_security-0.2.1.tar.gz.

File metadata

  • Download URL: uploadkit_security-0.2.1.tar.gz
  • Upload date:
  • Size: 14.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for uploadkit_security-0.2.1.tar.gz
Algorithm Hash digest
SHA256 f95a5668570666e99e1866303ad28987d54c2196fa66b08739711dcca49372c7
MD5 9079e52ecbaf5ff913b9e8430ac2e287
BLAKE2b-256 82e98e1f8fcb41d5a7ccb8f6f19c5bc361abfc75634a10ff5239f5720a6b7262

See more details on using hashes here.

File details

Details for the file uploadkit_security-0.2.1-py3-none-any.whl.

File metadata

File hashes

Hashes for uploadkit_security-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 5e12d3efd8087590ffd904010afd554184f2701f4fd46828013d7936e7ce2bc2
MD5 1f9e4aa2bd134142369d95ae48a220ed
BLAKE2b-256 f5fae05d048f6d5c51eb47a260ee39a7f574703b7cce96b3ab6f612eb099cb80

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.2.1 This release

2 files

0.2.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page