Skip to main content

File Validator

PyPI version Build Status Python Versions License

Библиотека для валидации файлов

Библиотека предоставляет упрощенный интерфейс для валидации файлов.

Основные возможности:

  • Валидация по размеру
  • Валидация по расширению
  • Валидация по Mime типу

Установка:

pip install universal-file-validator

После установки валидатора файлов необходимо установить libmagic, для чего вам нужно выполнить следующую команду:

  • Windows:
pip install python-magic-bin
  • Debian/Ubuntu:
sudo apt-get install libmagic1
  • MacOS:
brew install libmagic

Использование:

Перед началом нужно создать экземпляр класса:

Словарь image_types можно не передавать только для валидации по размеру, для всех остальных валидаций он необходим.

image_types = {
    'image/jpeg': ['jpg', 'jpeg'],
    'image/jpg': ['jpg', 'jpeg'],
    'image/png': ['png'],
}

vc = FileValidator(
    max_size=1000,
    size_unit='килобайт',
    allowed_types=image_types,
    is_validate_extension=True,
    is_validate_mime_type=True,
    is_cross_validation=True,
)

Подробнее об аргументах:

  • max_size (int): Максимальный размер файла в указанных единицах измерения. При значении 0 валидация размера отключена. По умолчанию 0.
  • size_unit (SizeUnit | str): Единица измерения для max_size. Может быть SizeUnit enum или строкой ('B', 'KB', 'MB', 'GB', 'bytes', 'kilobytes', 'megabytes', 'gigabytes'). Поддерживает русские названия ('байт', 'килобайт', 'мегабайт', 'гигабайт'). По умолчанию SizeUnit.BYTES.
  • allowed_types (dict[str, list[str]]): Словарь разрешенных MIME типов и соответствующих им расширений файлов. Ключ - MIME тип (например, 'image/jpeg'), значение - список разрешенных расширений (например, ['jpg', 'jpeg']). При значении None валидация MIME типов, расширений и перекрестная валидация отключена. По умолчанию None. Пример:
    {
        'image/jpeg': ['jpg', 'jpeg'],
        'image/png': ['png'],
    }
    
  • is_validate_extension (bool): Включить валидацию расширений файлов. Работает только при предоставленном allowed_types. Проверяет, что у файла есть расширение и оно находится в списке разрешенных. По умолчанию True.
  • is_validate_mime_type (bool): Включить валидацию MIME типов файлов. Работает только при предоставленном allowed_types. Проверяет, что у файла есть MIME тип и он находится в списке разрешенных. По умолчанию True.
  • is_cross_validation (bool): Включить перекрестную валидацию расширения файла с его MIME типом. Работает только при предоставленном allowed_types. Проверяет, что расширение файла соответствует указанному MIME типу. По умолчанию True.

Можно валидировать по отдельности:

from file_validator import FileValidator

image_types = {
    'image/jpeg': ['jpg', 'jpeg'],
    'image/jpg': ['jpg', 'jpeg'],
    'image/png': ['png'],
}

vc = FileValidator(
    max_size=1000,
    size_unit='килобайт',
    allowed_types=image_types,
)

file_name = 'image.jpeg'

with open(file_name, 'rb') as f:
    file_content = f.read()

vc.validate_size(file_content)

extension = vc.validate_extension_exists(file_name)
vc.validate_extension_allowed(extension)

mime_type = vc.detect_mime_type(file_content)  # Так же есть асинхронный метод adetect_mime_type()
vc.validate_mime_type_allowed(mime_type)

vc.validate_extension_mime_match(extension, mime_type)

print(f'{extension=}')
print(f'{mime_type=}')
  • Если какая-то валидация будет провалена, вызовется исключение.

Можно валидировать всё сразу:

from file_validator import FileValidator

image_types = {
    'image/jpeg': ['jpg', 'jpeg'],
    'image/jpg': ['jpg', 'jpeg'],
    'image/png': ['png'],
}

vc = FileValidator(
    max_size=1000,
    size_unit='килобайт',
    allowed_types=image_types,
)

file_name = 'image.jpeg'

with open(file_name, 'rb') as f:
    file_content = f.read()

extension, mime_type = vc.validate_all(file_content, file_name)  # Так же есть асинхронный метод avalidate_all()
print(f'{extension=}')
print(f'{mime_type=}')

Запуск локально (для разработки):

Установка зависимостей

pip install -r requirements.txt

После установки валидатора файлов необходимо установить libmagic, для чего вам нужно выполнить следующую команду:

  • Windows:
pip install python-magic-bin
  • Debian/Ubuntu:
sudo apt-get install libmagic1
  • MacOS:
brew install libmagic

Запуск примеров:

python -m example.validator_steps
python -m example.validator_all

Metadata

Release files for universal-file-validator 0.0.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 universal-file-validator 0.0.1
File Size Uploaded Provenance Actions
universal_file_validator-0.0.1.tar.gz 14.8 kB Without provenance Details for universal_file_validator-0.0.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for universal-file-validator 0.0.1
File Interpreter ABI Platform Actions
universal_file_validator-0.0.1-py3-none-any.whl Python 3 none any Details for universal_file_validator-0.0.1-py3-none-any.whl

Total release size: 28.4 kB

Release files / universal_file_validator-0.0.1.tar.gz

Download URL universal_file_validator-0.0.1.tar.gz
Size 14.8 kB
Tags Source
SHA-256 checksum
How to use checksums
a062e4ac78491f1145804046ad8b9cfed23ba1bf3d1f0b680495d8ed973bdb10
BLAKE2b-256 checksum
How to use checksums
6845b51dccda6d2d5a05cf04e84481aeb763fa9732236e10a174f8246122e92c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.17

Release files / universal_file_validator-0.0.1-py3-none-any.whl

Download URL universal_file_validator-0.0.1-py3-none-any.whl
Size 13.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
dc8fde13bbc78cc24d466dbe522c5488477452338e052a24a24490e965975db9
BLAKE2b-256 checksum
How to use checksums
b4d9cd13264c77b5a150ac4e35a10dec6e2b1f6049f49f63d3f9b4a1d2e752d8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.17

Security for universal-file-validator 0.0.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.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

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