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.
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_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.0 or later
- Python 3.6.0 or later
Note: This library relies heavily on PEP 484 -- Type Hints which was introduced in Python 3.5.0.
Contribution
To build a new package, execute the following command:
python setup.py sdist
Local Test Environment
To setup your local test environment, execute the following steps:
- Clone the repository
git clone git@github.com:theriverman/django-minio-backend.git
- Move to
example_app
:
cd django-minio-backend/example_app
- Create the virtual environment:
pipenv install --dev
Note: On Windows, you might be required to move to the parent directory (cd ..
) and execute the above command there.
3. Activate the virtual environment (if not active yet):
pipenv shell
- Apply migrations:
python manage.py migrate
- Start Django
python manage.py runserver
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
Hashes for django-minio-backend-2.3.1.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4261b0347c916b877cf7df159a0097729a2610094de71c76c8706d1e398580af |
|
MD5 | 2c389a1cb86b0d9d785ea68d74b88f8d |
|
BLAKE2b-256 | b92c71bd4ad6009af5a8873182ba82603ca67f9a1d45618043d42e4106ccfbfb |