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.0.tar.gz (13.8 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.0-py3-none-any.whl (12.8 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for uploadkit_security-0.2.0.tar.gz
Algorithm Hash digest
SHA256 5b4d834144dee9d1353c80f6af3666ad1987e81ec19d02b6c0b6e7c24e5c50be
MD5 941cce4797eb506db9bdaad276fa13e4
BLAKE2b-256 8467e1f5c10825d1d5909410d43723eb15b003909fa076deb83c7a183867c266

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for uploadkit_security-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 67e8d8d67aad28c9663bf861f430a04795ad269ece57d2d4b3706cbe39f5d9cd
MD5 6f1ff7193ebfe1004e0915ca6ea2851f
BLAKE2b-256 973c7e2ea3c69a002d6280015133aeaf0d407d91434ab976f729a53c74e8f374

See more details on using hashes here.

Release history Release notifications | RSS feed

0.2.1

2 files

This release

0.2.0 This release

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