mentortools/libs/: file-storage-handler-abm-8.0.72540a0 metadata and description

Simple index Stable version available

File storage controller

author Vasya Svintsov
author_email v.svintsov@technokert.ru
classifiers
  • Programming Language :: Python :: 3
  • Programming Language :: Python :: 3.11
description_content_type text/markdown
requires_dist
  • dict-caster-abm (>=1.1.52868,<2.0.0)
  • file-storage-abm (>=5.0,<6.0)
  • filetype (>=1.2.0,<1.3.0)
  • furl (>=2.1.3,<2.2.0)
  • http-tools-abm (>=6.2.71450,<7.0.0)
  • pillow (>=11.3.0,<12.0.0)
  • sqlalchemy-tools-abm (>=2.1.65067,<3.0.0)
requires_python >=3.11,<4.0
File Tox results History
file_storage_handler_abm-8.0.72540a0-py3-none-any.whl
Size
34 KB
Type
Python Wheel
Python
3
file_storage_handler_abm-8.0.72540a0.tar.gz
Size
26 KB
Type
Source

FileStorageHandler

Это набор компонентов для организации различной бизнес-логики, связанной с хранением файлов

Основные понятия и компоненты:

AbstractFileStorage

Единый интерфейс для различных файловых хранилищ. Имеет две реализации: S3 и Disc.
Описан в библиотеке file-storage-abm. Используется в качестве нижнего, "физического" уровня хранения.
Удобно создавать из url с помощью get_file_storage Грубо говоря, имеет интерфейс, как у словаря dict[str, bytes]

FileKeeper

Обёртка над AbstractFileStorage, расширяющая его интерфейс с помощью базы данных.
Работает с файлами, скорее как с блоками данных - не использует имя, работает только с содержимым.
Сохраняет информацию о сохранённых файлах в FileInfo или дочерний класс (указывается в __init__).
upload идемпотентный, т.е. при повторной загрузке файла с содержимым, идентичным ранее сохранённому, ответ не меняется Грубо говоря, имеет интерфейс, как у сета set[bytes]

LinkKeeper

Обёртка над FileKeeper, сохраняющая файлы в виде именованных ссылок(LinkInfo) на содержимое (FileInfo). Работает с файлами, как с файлами - сохраняет имена, знает про расширения. При удалении последней ссылки(LinkInfo) на файл(FileInfo) удаляет и файл(в том числе с хранилища) Грубо говоря, имеет интерфейс, как у словаря dict[str, bytes]

ThumbnailProvider

Компонент, генерирующий thumbnail (небольшую картинку-превью) на основе расширения и содержимого файла

Controller

Компонент, реализующий бизнес логику с помощью вышеописанных компонентов:

HttpHandler

Предоставляет HTTP API для методов Controller'а

Предполагаемые сценарии использования

Запуск в виде модуля

Через переменные среды или аргументы запуска передаются url файлового хранилища (file_storage_url) и базы (db_url), а так же адрес для обработки запросов (listen), пример:

python -m file_storage_handler --db_url='postgresql://<log>:<pass>@<addr>/<db>' --file_storage_url='file:///tmp/storage' --listen='0.0.0.0:80'

Специфическая бизнес логика или апи на базе существующих моделей

Примеры:

В этом сценарии предполагается разработка отдельного Controller и/или HttpHandler, пример можно увидеть в entity_compatible_file_storage

Специфическая бизнес логика, требующая расширения модели данных

Примеры:

В этом сценарии предполагается разработка расширенных моделей и передача их в конструкторы FileKeeper и LinkKeeper, а так же разработка отдельного Controller и/или HttpHandler. Примера пока нет (если уже есть, то впишите, пожалуйста)