@@ -212,43 +212,35 @@ JWT_SETTINGS = { DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' STORAGES = { - 'default': { - 'BACKEND': 'django_minio_backend.models.MinioBackend', - 'OPTIONS': { - 'MINIO_ENDPOINT': env.str('MINIO_ENDPOINT', default='s3:9000'), - 'MINIO_USE_HTTPS': env.bool('MINIO_USE_HTTPS', default=False), - 'MINIO_EXTERNAL_ENDPOINT': env.str('MINIO_EXTERNAL_ENDPOINT', default='localhost:9000'), - 'MINIO_EXTERNAL_ENDPOINT_USE_HTTPS': env.bool( - 'MINIO_EXTERNAL_ENDPOINT_USE_HTTPS', default=False - ), - 'MINIO_ACCESS_KEY': env.str('MINIO_ACCESS_KEY'), - 'MINIO_SECRET_KEY': env.str('MINIO_SECRET_KEY'), - 'MINIO_PRIVATE_BUCKETS': [ - 'air-messages', - 'air-media', - 'air-achievements', - 'air-templates-pictures', - 'air-stories', - 'air-profiles', - 'air-models', - 'air-media-presets', - 'air-voices', - ], - 'MINIO_PUBLIC_BUCKETS': [], - 'MINIO_DEFAULT_BUCKET': 'air-media', - 'MINIO_CONSISTENCY_CHECK_ON_START': False, - 'MINIO_BUCKET_CHECK_ON_SAVE': False, - 'MINIO_MULTIPART_UPLOAD': False, - 'MINIO_MULTIPART_THRESHOLD': 6 * 1024 * 1024, - 'MINIO_MULTIPART_PART_SIZE': 6 * 1024 * 1024, - 'MINIO_URL_CACHING_ENABLED': True, - 'MINIO_URL_CACHE_TIMEOUT': 60 * 60 * 8, - 'MINIO_URL_CACHE_PREFIX': 'minio_url_', - }, - }, + 'default': {'BACKEND': 'django_minio_backend.models.MinioBackend'}, 'staticfiles': {'BACKEND': 'django.contrib.staticfiles.storage.StaticFilesStorage'}, } + +MINIO_BUCKET_CHECK_ON_SAVE = env.bool('MINIO_BUCKET_CHECK_ON_SAVE', default=False) +MINIO_ENDPOINT = env.str('MINIO_ENDPOINT') +MINIO_USE_HTTPS = env.bool('MINIO_USE_HTTPS', default=False) +MINIO_EXTERNAL_ENDPOINT = env.str('MINIO_EXTERNAL_ENDPOINT', default='localhost:9000') +MINIO_EXTERNAL_ENDPOINT_USE_HTTPS = env.bool('MINIO_EXTERNAL_ENDPOINT_USE_HTTPS', default=False) + +MINIO_ACCESS_KEY = env.str('MINIO_ACCESS_KEY') +MINIO_SECRET_KEY = env.str('MINIO_SECRET_KEY') +MINIO_PRIVATE_BUCKETS = [ + 'air-messages', + 'air-achievements', + 'air-templates-pictures', + 'air-stories', + 'air-profiles', + 'air-models', + 'air-media-presets', + 'air-voices', +] +MINIO_STATIC_FILES_BUCKET = 'air-static' +MINIO_PRIVATE_BUCKETS.append(MINIO_STATIC_FILES_BUCKET) + +MINIO_MEDIA_FILES_BUCKET = 'air-media' +MINIO_PRIVATE_BUCKETS.append(MINIO_MEDIA_FILES_BUCKET) + SPECTACULAR_SETTINGS = { 'TITLE': 'AIR', 'DESCRIPTION': 'AIR Project API conf', @@ -5,7 +5,7 @@ from django.utils.translation import gettext_lazy as _ from minio import Minio from minio.commonconfig import CopySource -from backend import settings +from django.conf import settings class MinIOService: @@ -26,10 +26,10 @@ class MinIOService: def __init__(self): self.minio = Minio( - endpoint=settings.STORAGES['default']['OPTIONS']['MINIO_ENDPOINT'], - access_key=settings.STORAGES['default']['OPTIONS']['MINIO_ACCESS_KEY'], - secret_key=settings.STORAGES['default']['OPTIONS']['MINIO_SECRET_KEY'], - secure=settings.STORAGES['default']['OPTIONS']['MINIO_USE_HTTPS'], + endpoint=settings.MINIO_ENDPOINT, + access_key=settings.MINIO_ACCESS_KEY, + secret_key=settings.MINIO_SECRET_KEY, + secure=settings.MINIO_USE_HTTPS ) def put_object(self, obj: BytesIO, filename: str, dest: str) -> str: @@ -19,7 +19,7 @@ RUN --mount=target=/var/lib/apt/lists,type=cache,sharing=locked \ --mount=target=/var/cache/apt,type=cache,sharing=locked \ rm -f /etc/apt/apt.conf.d/docker-clean \ && apt-get update \ - && apt-get -y --no-install-recommends install gettext antiword ffmpeg + && apt-get -y --no-install-recommends install gettext antiword ffmpeg git RUN --mount=from=ghcr.io/astral-sh/uv,source=/uv,target=/bin/uv \ --mount=type=cache,target=/root/.cache/uv \ @@ -8,13 +8,13 @@ dependencies = [ "channels[daphne]==4.2.0", "deepl==1.21.1", "dj-rest-auth==4.0.1", - "django==5.0", + "django==5.0.*", "django-cacheops==7.0.2", "django-celery-beat>=2.9.0", "django-cors-headers==4.2.0", "django-filter==23.2", "django-import-export==4.0.9", - "django-minio-backend==4.5.0", + "django-minio-backend", "django-ninja==1.3.0", "django-oauth-toolkit==2.3.0", "django-ordered-model==3.7.4", @@ -38,7 +38,7 @@ dependencies = [ "langchain-openai==0.3.6", "langchainhub==0.1.15", "langserve[client]==0.0.46", - "minio==7.2.20", + "minio>=7.0,<=8.0", "mutagen==1.47.0", "openpyxl==3.1.2", "pillow==12.2.0", @@ -127,6 +127,9 @@ line-ending = "lf" docstring-code-format = false docstring-code-line-length = "dynamic" +[tool.uv.sources] +django-minio-backend = { git = "https://github.com/theriverman/django-minio-backend", tag = "3.7.0" } + [tool.ruff.lint.per-file-ignores] "__init__.py" = ["E402", "F401"] "**/{tests,docs,tools}/*" = ["E402"] @@ -336,13 +336,13 @@ requires-dist = [ { name = "channels-redis", specifier = "==4.2.1" }, { name = "deepl", specifier = "==1.21.1" }, { name = "dj-rest-auth", specifier = "==4.0.1" }, - { name = "django", specifier = "==5.0" }, + { name = "django", specifier = "==5.0.*" }, { name = "django-cacheops", specifier = "==7.0.2" }, { name = "django-celery-beat", specifier = ">=2.9.0" }, { name = "django-cors-headers", specifier = "==4.2.0" }, { name = "django-filter", specifier = "==23.2" }, { name = "django-import-export", specifier = "==4.0.9" }, - { name = "django-minio-backend", specifier = "==4.5.0" }, + { name = "django-minio-backend", git = "https://github.com/theriverman/django-minio-backend?tag=3.7.0" }, { name = "django-ninja", specifier = "==1.3.0" }, { name = "django-oauth-toolkit", specifier = "==2.3.0" }, { name = "django-ordered-model", specifier = "==3.7.4" }, @@ -366,7 +366,7 @@ requires-dist = [ { name = "langchain-openai", specifier = "==0.3.6" }, { name = "langchainhub", specifier = "==0.1.15" }, { name = "langserve", extras = ["client"], specifier = "==0.0.46" }, - { name = "minio", specifier = "==7.2.20" }, + { name = "minio", specifier = ">=7.0,<=8.0" }, { name = "mutagen", specifier = "==1.47.0" }, { name = "openpyxl", specifier = "==3.1.2" }, { name = "pillow", specifier = "==12.2.0" }, @@ -960,16 +960,11 @@ wheels = [ [[package]] name = "django-minio-backend" -version = "4.5.0" -source = { registry = "https://pypi.org/simple" } +version = "3.7.0" +source = { git = "https://github.com/theriverman/django-minio-backend?tag=3.7.0#fbf88ff82c95e8c404e71404aa73b636d3a72e1e" } dependencies = [ { name = "django" }, { name = "minio" }, - { name = "pillow" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/50/c2/342a11b4762ff5f8dd614ef43c4f68a1f2eb0fca7fe23e092453a5df1e16/django_minio_backend-4.5.0.tar.gz", hash = "sha256:21e9e699cbd1f87d361ee4a661f3f08b59ca5004a8479181d7f166e8c1507216", size = 19877, upload-time = "2025-12-23T22:50:26.905Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9e/3f/92cfc7af3d1da960e743bbbf56485b8c47ae67d7597d12b7b1c35353ca95/django_minio_backend-4.5.0-py3-none-any.whl", hash = "sha256:ea66a88960e88ae9dbaf3a2a1f6ce259bd8f213f4e937459e503753b01dfed9d", size = 23588, upload-time = "2025-12-23T22:50:25.977Z" }, ] [[package]]