Skip to main content

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

Project description

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

Project details


Download files

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

Source Distribution

universal_file_validator-0.0.1.tar.gz (14.8 kB view details)

Uploaded Source

Built Distribution

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

universal_file_validator-0.0.1-py3-none-any.whl (13.7 kB view details)

Uploaded Python 3

File details

Details for the file universal_file_validator-0.0.1.tar.gz.

File metadata

  • Download URL: universal_file_validator-0.0.1.tar.gz
  • Upload date:
  • Size: 14.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.17

File hashes

Hashes for universal_file_validator-0.0.1.tar.gz
Algorithm Hash digest
SHA256 a062e4ac78491f1145804046ad8b9cfed23ba1bf3d1f0b680495d8ed973bdb10
MD5 34b9aed40e120fd576aa006b151b38f7
BLAKE2b-256 6845b51dccda6d2d5a05cf04e84481aeb763fa9732236e10a174f8246122e92c

See more details on using hashes here.

File details

Details for the file universal_file_validator-0.0.1-py3-none-any.whl.

File metadata

File hashes

Hashes for universal_file_validator-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 dc8fde13bbc78cc24d466dbe522c5488477452338e052a24a24490e965975db9
MD5 8501c9fb7ba76fa642fe53bfcd373549
BLAKE2b-256 b4d9cd13264c77b5a150ac4e35a10dec6e2b1f6049f49f63d3f9b4a1d2e752d8

See more details on using hashes here.

Supported by

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