Skip to main content

The django-minio-backend provides a wrapper around the MinIO Python Library.

Project description

django-app-tests publish-py-dist-to-pypi PYPI

django-minio-backend

The django-minio-backend provides a wrapper around the MinIO Python SDK. See minio/minio-py for the source.

Integration

  1. Get and install the package:
pip install django-minio-backend
  1. Add django_minio_backend to INSTALLED_APPS:
INSTALLED_APPS = [
    # '...'
    'django_minio_backend',  # https://github.com/theriverman/django-minio-backend
]

If you would like to enable on-start consistency check, install via DjangoMinioBackendConfig:

INSTALLED_APPS = [
    # '...'
    'django_minio_backend.apps.DjangoMinioBackendConfig',  # https://github.com/theriverman/django-minio-backend
]

Then add the following parameter to your settings file:

MINIO_CONSISTENCY_CHECK_ON_START = True

Note: The on-start consistency check equals to manually calling python manage.py initialize_buckets.
It is recommended to turn off this feature during development by setting MINIO_CONSISTENCY_CHECK_ON_START to False, because this operation can noticeably slow down Django's boot time when many buckets are configured.

  1. Add the following parameters to your settings.py:
from datetime import timedelta
from typing import List, Tuple

MINIO_ENDPOINT = 'minio.your-company.co.uk'
MINIO_ACCESS_KEY = 'yourMinioAccessKey'
MINIO_SECRET_KEY = 'yourVeryS3cr3tP4ssw0rd'
MINIO_USE_HTTPS = True
MINIO_URL_EXPIRY_HOURS = timedelta(days=1)  # Default is 7 days (longest) if not defined
MINIO_CONSISTENCY_CHECK_ON_START = True
MINIO_PRIVATE_BUCKETS = [
    'django-backend-dev-private',
]
MINIO_PUBLIC_BUCKETS = [
    'django-backend-dev-public',
]
MINIO_POLICY_HOOKS: List[Tuple[str, dict]] = []
  1. Implement your own Attachment handler and integrate django-minio-backend:
from django.db import models
from django_minio_backend import MinioBackend, iso_date_prefix

class PrivateAttachment(models.Model):   
    file = models.FileField(verbose_name="Object Upload",
                            storage=MinioBackend(bucket_name='django-backend-dev-private'),
                            upload_to=iso_date_prefix)
  1. Initialize the buckets & set their public policy (OPTIONAL):
    This django-admin command creates both the private and public buckets in case one of them does not exists, and sets the public bucket's privacy policy from private(default) to public.
python manage.py initialize_buckets

Code reference: initialize_buckets.py.

Health Check

To check the connection link between Django and MinIO, use the provided MinioBackend.is_minio_available() method.
It returns a MinioServerStatus instance which can be quickly evaluated as boolean.

Example:

from django_minio_backend import MinioBackend

minio_available = MinioBackend('').is_minio_available()  # An empty string is fine this time
if minio_available:
    print("OK")
else:
    print("NOK")
    print(minio_available.details)

Policy Hooks

You can configure django-minio-backend to automatically execute a set of pre-defined policy hooks.
Policy hooks can be defined in settings.py by adding MINIO_POLICY_HOOKS which must be a list of tuples.
Policy hooks are automatically picked up by the initialize_buckets management command.

For an exemplary policy, see the implementation of def set_bucket_to_public(self) in django_minio_backend/models.py or the contents of examples/policy_hook.example.py.

Consistency Check On Start

When enabled, the initialize_buckets management command gets called automatically when Django starts.
This command connects to the configured minIO server and checks if all buckets defined in settings.py.
In case a bucket is missing or its configuration differs, it gets created and corrected.

Reference Implementation

For a reference implementation, see Examples.

Compatibility

  • Django 2.2 or later
  • Python 3.6.0 or later
  • MinIO SDK 7.0.2 or later

Note: This library relies heavily on PEP 484 -- Type Hints which was introduced in Python 3.5.0.

Contribution

Please find the details in CONTRIBUTE.md

Copyright

  • theriverman/django-minio-backend licensed under the MIT License
  • minio/minio-py is licensed under the Apache License 2.0

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

django-minio-backend-2.6.0.tar.gz (18.7 kB view details)

Uploaded Source

Built Distribution

django_minio_backend-2.6.0-py3-none-any.whl (21.1 kB view details)

Uploaded Python 3

File details

Details for the file django-minio-backend-2.6.0.tar.gz.

File metadata

  • Download URL: django-minio-backend-2.6.0.tar.gz
  • Upload date:
  • Size: 18.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/54.1.1 requests-toolbelt/0.9.1 tqdm/4.59.0 CPython/3.9.2

File hashes

Hashes for django-minio-backend-2.6.0.tar.gz
Algorithm Hash digest
SHA256 c118c51706db5bd3dc4796dfa44331dd0c3e81e3905ea1fc430e4d915d24bf92
MD5 07a949aceb9580bce328a5a39b213874
BLAKE2b-256 54eb6169a82796bcf46a9beb3ab372ff8f6378042b9a09655ab102df15c501df

See more details on using hashes here.

File details

Details for the file django_minio_backend-2.6.0-py3-none-any.whl.

File metadata

  • Download URL: django_minio_backend-2.6.0-py3-none-any.whl
  • Upload date:
  • Size: 21.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/54.1.1 requests-toolbelt/0.9.1 tqdm/4.59.0 CPython/3.9.2

File hashes

Hashes for django_minio_backend-2.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 cf4dcb3c9b06341addeb6156e996bb0cd941cfad0ac59f774c134bef16d32eae
MD5 1f53c82beb142be72f9b9a27e81303b2
BLAKE2b-256 ce74c4f5abed7bad7c68bab9a3802b3553e2495a7a1542e1101de9dc2b73f449

See more details on using hashes here.

Supported by

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