The django-minio-backend provides a wrapper around the MinIO Python Library.
Project description
django-minio-backend
The django-minio-backend provides a wrapper around the MinIO Python SDK. See minio/minio-py for the source.
Integration
- Get and install the package:
pip install django-minio-backend
- Add
django_minio_backend
toINSTALLED_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.
- 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_EXTERNAL_ENDPOINT = "external-minio.your-company.co.uk" # Default is same as MINIO_ENDPOINT
MINIO_EXTERNAL_ENDPOINT_USE_HTTPS = True # Default is same as MINIO_USE_HTTPS
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]] = []
- 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)
- Initialize the buckets & set their public policy (OPTIONAL):
Thisdjango-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 fromprivate
(default) topublic
.
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for django-minio-backend-2.7.1.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 34d61e001b4589644999b57404de426b21cf89f935a48ae97278f39d5f446b64 |
|
MD5 | eda9e849bd42c8b3315275ec0619449e |
|
BLAKE2b-256 | 82b40b94f052988cdda724220bcaf40724128b9b2c28dc30e7db3513a8cb1b9d |
Hashes for django_minio_backend-2.7.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 922a4995025416e311962f2ea1e395981b71ab2464ac0bff75b64e54976c92c2 |
|
MD5 | fcdc3b5c4e65b41bc9000bfe60ad0fb3 |
|
BLAKE2b-256 | 10d36ae103c51310777ea8b1011a3f20e802810a6f52c62fa7c0492992ee237c |