From a5cd189c375ce703cd1960d7491dd4b9251e8f2d Mon Sep 17 00:00:00 2001 From: CoprDistGit Date: Fri, 5 May 2023 10:13:37 +0000 Subject: automatic import of python-django-s3-file-field --- .gitignore | 1 + python-django-s3-file-field.spec | 529 +++++++++++++++++++++++++++++++++++++++ sources | 1 + 3 files changed, 531 insertions(+) create mode 100644 python-django-s3-file-field.spec create mode 100644 sources diff --git a/.gitignore b/.gitignore index e69de29..0f03837 100644 --- a/.gitignore +++ b/.gitignore @@ -0,0 +1 @@ +/django-s3-file-field-0.3.2.tar.gz diff --git a/python-django-s3-file-field.spec b/python-django-s3-file-field.spec new file mode 100644 index 0000000..0dd3a47 --- /dev/null +++ b/python-django-s3-file-field.spec @@ -0,0 +1,529 @@ +%global _empty_manifest_terminate_build 0 +Name: python-django-s3-file-field +Version: 0.3.2 +Release: 1 +Summary: A django widget library for securely uploading files directly to S3 (or MinIO). +License: Apache 2.0 +URL: https://github.com/girder/django-s3-file-field +Source0: https://mirrors.nju.edu.cn/pypi/web/packages/99/0d/d93079697b0b8df5132c70f0c015688730d68830706d107f7c627f7e187e/django-s3-file-field-0.3.2.tar.gz +BuildArch: noarch + +Requires: python3-django +Requires: python3-djangorestframework +Requires: python3-django-storages[boto3] +Requires: python3-boto3 +Requires: python3-django-minio-storage +Requires: python3-minio +Requires: python3-pytest + +%description +# django-s3-file-field +[![PyPI](https://img.shields.io/pypi/v/django-s3-file-field)](https://pypi.org/project/django-s3-file-field/) + +django-s3-file-field is a Django library for uploading files directly to +[AWS S3](https://aws.amazon.com/s3/) or [MinIO](https://min.io/) Storage from HTTP clients +(browsers, CLIs, etc.). + +### Benefits +django-s3-file-field makes long-running file transfers (with large files or slow connections) +more efficient, as the file content is no longer proxied through the Django server. This also frees +Django from needing to maintain active HTTP requests during file upload, decreasing server load and +facilitating deployment to environments like +[Heroku, which have short, strict request timeouts](https://devcenter.heroku.com/articles/request-timeout). + +### Scope +The principal API of django-s3-file-field is the `S3FileField`, which is a subclass of +[Django's `FileField`](https://docs.djangoproject.com/en/4.1/ref/models/fields/#filefield). +django-s3-file-field does not affect any operations other than uploading from external HTTP +clients; for all other file operations (downloading, uploading from the Python API, etc.), refer to +[Django's file management documentation](https://docs.djangoproject.com/en/4.1/topics/files/). + +django-s3-file-field supports both the creation and modification (by overwrite) of +`S3FileField`-containing `Model` instances. +It supports server-rendered views, via the Forms API, with Form `Field` and `Widget` subclasses +which will automatically be used for `ModelForm` instances. +It also supports RESTful APIs, via Django Rest Framework's Serializer API, with a +Serializer `Field` subclass which will automatically be used for `ModelSerializer` instances. + +## Installation +django-s3-file-field must be used with a compatible Django Storage, which are: +* `S3Boto3Storage` in [django-storages](https://django-storages.readthedocs.io/), + for [AWS S3](https://aws.amazon.com/s3/) +* `MinioStorage` or `MinioMediaStorage` in [django-minio-storage](https://django-minio-storage.readthedocs.io/), + for [MinIO](https://min.io/) + +After the appropriate Storage is installed and configured, install django-s3-file-field, using the +corresponding extra: +```bash +pip install django-s3-file-field[boto3] +``` +or +```bash +pip install django-s3-file-field[minio] +``` + +Enable django-s3-file-field as an installed Django app: +```python +# settings.py +INSTALLED_APPS = [ + ..., + 's3_file_field', +] +``` + +Add django-s3-file-field's URLconf to the root URLconf; the path prefix (`'api/s3-upload/'`) +can be changed arbitrarily as desired: +```python +# urls.py +from django.urls import include, path + +urlpatterns = [ + ..., + path('api/s3-upload/', include('s3_file_field.urls')), +] +``` + +## Usage +For all usage, define an `S3FileField` on a Django `Model`, instead of a `FileField`: +```python +from django.db import models +from s3_file_field import S3FileField + +class Resource(models.Model): + blob = S3FileField() +``` + +### Django Forms +When defining a +[Django `ModelForm`](https://docs.djangoproject.com/en/4.1/topics/forms/modelforms/), +the appropriate Form `Field` will be automatically used: +```python +from django.forms import ModelForm +from .models import Resource + +class ResourceForm(ModelForm): + class Meta: + model = Resource + fields = ['blob'] +``` + +Forms using django-s3-file-field include additional +[assets](https://docs.djangoproject.com/en/4.1/topics/forms/media/), which it's essential to render +along with the Form. Typically, this can be done in any Form-containing Template as: +``` + + {# Assuming the Form is availible in context as "form" #} + {{ form.media }} + +``` + +### Django Rest Framework +When defining a +[Django Rest Frameowrk `ModelSerializer`](https://www.django-rest-framework.org/api-guide/serializers/#modelserializer), +the appropriate Serializer `Field` will be automatically used: +```python +from rest_framework import serializers +from .models import Resource + +class ResourceSerializer(serializers.ModelSerializer): + class Meta: + model = Resource + fields = ['blob'] +``` + +Clients interacting with these RESTful APIs will need to use a corresponding django-s3-file-field +client library. Client libraries (and associated documentation) are available for: +* [Python](python-client/README.md) +* [Javascript / TypeScript](javascript-client/README.md) + +### Pytest +When installed, django-s3-file-field makes several +[Pytest fixtures](https://docs.pytest.org/en/latest/explanation/fixtures.html) automatically +available for use. + +The `s3ff_field_value` fixture will return a valid input value for Django `ModelForm` or +Django Rest Framework `ModelSerializer` subclasses: +```python +from .forms import ResourceForm + +def test_resource_form(s3ff_field_value): + form = ResourceForm(data={'blob': s3ff_field_value}) + assert form.is_valid() +``` + +Alternatively, the `s3ff_field_value_factory` fixture transforms a `File` object into a valid input +value (for Django `ModelForm` or Django Rest Framework `ModelSerializer` subclasses), providing +more control over the uploaded file: +```python +from django.core.files.storage import default_storage +from rest_framework.test import APIClient + +def test_resource_create(s3ff_field_value_factory): + client = APIClient() + stored_file = default_storage.open('some_existing_file.txt') + s3ff_field_value = s3ff_field_value_factory(stored_file) + resp = client.post('/resource', data={'blob': s3ff_field_value}) + assert resp.status_code == 201 +``` + + + + +%package -n python3-django-s3-file-field +Summary: A django widget library for securely uploading files directly to S3 (or MinIO). +Provides: python-django-s3-file-field +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-pip +%description -n python3-django-s3-file-field +# django-s3-file-field +[![PyPI](https://img.shields.io/pypi/v/django-s3-file-field)](https://pypi.org/project/django-s3-file-field/) + +django-s3-file-field is a Django library for uploading files directly to +[AWS S3](https://aws.amazon.com/s3/) or [MinIO](https://min.io/) Storage from HTTP clients +(browsers, CLIs, etc.). + +### Benefits +django-s3-file-field makes long-running file transfers (with large files or slow connections) +more efficient, as the file content is no longer proxied through the Django server. This also frees +Django from needing to maintain active HTTP requests during file upload, decreasing server load and +facilitating deployment to environments like +[Heroku, which have short, strict request timeouts](https://devcenter.heroku.com/articles/request-timeout). + +### Scope +The principal API of django-s3-file-field is the `S3FileField`, which is a subclass of +[Django's `FileField`](https://docs.djangoproject.com/en/4.1/ref/models/fields/#filefield). +django-s3-file-field does not affect any operations other than uploading from external HTTP +clients; for all other file operations (downloading, uploading from the Python API, etc.), refer to +[Django's file management documentation](https://docs.djangoproject.com/en/4.1/topics/files/). + +django-s3-file-field supports both the creation and modification (by overwrite) of +`S3FileField`-containing `Model` instances. +It supports server-rendered views, via the Forms API, with Form `Field` and `Widget` subclasses +which will automatically be used for `ModelForm` instances. +It also supports RESTful APIs, via Django Rest Framework's Serializer API, with a +Serializer `Field` subclass which will automatically be used for `ModelSerializer` instances. + +## Installation +django-s3-file-field must be used with a compatible Django Storage, which are: +* `S3Boto3Storage` in [django-storages](https://django-storages.readthedocs.io/), + for [AWS S3](https://aws.amazon.com/s3/) +* `MinioStorage` or `MinioMediaStorage` in [django-minio-storage](https://django-minio-storage.readthedocs.io/), + for [MinIO](https://min.io/) + +After the appropriate Storage is installed and configured, install django-s3-file-field, using the +corresponding extra: +```bash +pip install django-s3-file-field[boto3] +``` +or +```bash +pip install django-s3-file-field[minio] +``` + +Enable django-s3-file-field as an installed Django app: +```python +# settings.py +INSTALLED_APPS = [ + ..., + 's3_file_field', +] +``` + +Add django-s3-file-field's URLconf to the root URLconf; the path prefix (`'api/s3-upload/'`) +can be changed arbitrarily as desired: +```python +# urls.py +from django.urls import include, path + +urlpatterns = [ + ..., + path('api/s3-upload/', include('s3_file_field.urls')), +] +``` + +## Usage +For all usage, define an `S3FileField` on a Django `Model`, instead of a `FileField`: +```python +from django.db import models +from s3_file_field import S3FileField + +class Resource(models.Model): + blob = S3FileField() +``` + +### Django Forms +When defining a +[Django `ModelForm`](https://docs.djangoproject.com/en/4.1/topics/forms/modelforms/), +the appropriate Form `Field` will be automatically used: +```python +from django.forms import ModelForm +from .models import Resource + +class ResourceForm(ModelForm): + class Meta: + model = Resource + fields = ['blob'] +``` + +Forms using django-s3-file-field include additional +[assets](https://docs.djangoproject.com/en/4.1/topics/forms/media/), which it's essential to render +along with the Form. Typically, this can be done in any Form-containing Template as: +``` + + {# Assuming the Form is availible in context as "form" #} + {{ form.media }} + +``` + +### Django Rest Framework +When defining a +[Django Rest Frameowrk `ModelSerializer`](https://www.django-rest-framework.org/api-guide/serializers/#modelserializer), +the appropriate Serializer `Field` will be automatically used: +```python +from rest_framework import serializers +from .models import Resource + +class ResourceSerializer(serializers.ModelSerializer): + class Meta: + model = Resource + fields = ['blob'] +``` + +Clients interacting with these RESTful APIs will need to use a corresponding django-s3-file-field +client library. Client libraries (and associated documentation) are available for: +* [Python](python-client/README.md) +* [Javascript / TypeScript](javascript-client/README.md) + +### Pytest +When installed, django-s3-file-field makes several +[Pytest fixtures](https://docs.pytest.org/en/latest/explanation/fixtures.html) automatically +available for use. + +The `s3ff_field_value` fixture will return a valid input value for Django `ModelForm` or +Django Rest Framework `ModelSerializer` subclasses: +```python +from .forms import ResourceForm + +def test_resource_form(s3ff_field_value): + form = ResourceForm(data={'blob': s3ff_field_value}) + assert form.is_valid() +``` + +Alternatively, the `s3ff_field_value_factory` fixture transforms a `File` object into a valid input +value (for Django `ModelForm` or Django Rest Framework `ModelSerializer` subclasses), providing +more control over the uploaded file: +```python +from django.core.files.storage import default_storage +from rest_framework.test import APIClient + +def test_resource_create(s3ff_field_value_factory): + client = APIClient() + stored_file = default_storage.open('some_existing_file.txt') + s3ff_field_value = s3ff_field_value_factory(stored_file) + resp = client.post('/resource', data={'blob': s3ff_field_value}) + assert resp.status_code == 201 +``` + + + + +%package help +Summary: Development documents and examples for django-s3-file-field +Provides: python3-django-s3-file-field-doc +%description help +# django-s3-file-field +[![PyPI](https://img.shields.io/pypi/v/django-s3-file-field)](https://pypi.org/project/django-s3-file-field/) + +django-s3-file-field is a Django library for uploading files directly to +[AWS S3](https://aws.amazon.com/s3/) or [MinIO](https://min.io/) Storage from HTTP clients +(browsers, CLIs, etc.). + +### Benefits +django-s3-file-field makes long-running file transfers (with large files or slow connections) +more efficient, as the file content is no longer proxied through the Django server. This also frees +Django from needing to maintain active HTTP requests during file upload, decreasing server load and +facilitating deployment to environments like +[Heroku, which have short, strict request timeouts](https://devcenter.heroku.com/articles/request-timeout). + +### Scope +The principal API of django-s3-file-field is the `S3FileField`, which is a subclass of +[Django's `FileField`](https://docs.djangoproject.com/en/4.1/ref/models/fields/#filefield). +django-s3-file-field does not affect any operations other than uploading from external HTTP +clients; for all other file operations (downloading, uploading from the Python API, etc.), refer to +[Django's file management documentation](https://docs.djangoproject.com/en/4.1/topics/files/). + +django-s3-file-field supports both the creation and modification (by overwrite) of +`S3FileField`-containing `Model` instances. +It supports server-rendered views, via the Forms API, with Form `Field` and `Widget` subclasses +which will automatically be used for `ModelForm` instances. +It also supports RESTful APIs, via Django Rest Framework's Serializer API, with a +Serializer `Field` subclass which will automatically be used for `ModelSerializer` instances. + +## Installation +django-s3-file-field must be used with a compatible Django Storage, which are: +* `S3Boto3Storage` in [django-storages](https://django-storages.readthedocs.io/), + for [AWS S3](https://aws.amazon.com/s3/) +* `MinioStorage` or `MinioMediaStorage` in [django-minio-storage](https://django-minio-storage.readthedocs.io/), + for [MinIO](https://min.io/) + +After the appropriate Storage is installed and configured, install django-s3-file-field, using the +corresponding extra: +```bash +pip install django-s3-file-field[boto3] +``` +or +```bash +pip install django-s3-file-field[minio] +``` + +Enable django-s3-file-field as an installed Django app: +```python +# settings.py +INSTALLED_APPS = [ + ..., + 's3_file_field', +] +``` + +Add django-s3-file-field's URLconf to the root URLconf; the path prefix (`'api/s3-upload/'`) +can be changed arbitrarily as desired: +```python +# urls.py +from django.urls import include, path + +urlpatterns = [ + ..., + path('api/s3-upload/', include('s3_file_field.urls')), +] +``` + +## Usage +For all usage, define an `S3FileField` on a Django `Model`, instead of a `FileField`: +```python +from django.db import models +from s3_file_field import S3FileField + +class Resource(models.Model): + blob = S3FileField() +``` + +### Django Forms +When defining a +[Django `ModelForm`](https://docs.djangoproject.com/en/4.1/topics/forms/modelforms/), +the appropriate Form `Field` will be automatically used: +```python +from django.forms import ModelForm +from .models import Resource + +class ResourceForm(ModelForm): + class Meta: + model = Resource + fields = ['blob'] +``` + +Forms using django-s3-file-field include additional +[assets](https://docs.djangoproject.com/en/4.1/topics/forms/media/), which it's essential to render +along with the Form. Typically, this can be done in any Form-containing Template as: +``` + + {# Assuming the Form is availible in context as "form" #} + {{ form.media }} + +``` + +### Django Rest Framework +When defining a +[Django Rest Frameowrk `ModelSerializer`](https://www.django-rest-framework.org/api-guide/serializers/#modelserializer), +the appropriate Serializer `Field` will be automatically used: +```python +from rest_framework import serializers +from .models import Resource + +class ResourceSerializer(serializers.ModelSerializer): + class Meta: + model = Resource + fields = ['blob'] +``` + +Clients interacting with these RESTful APIs will need to use a corresponding django-s3-file-field +client library. Client libraries (and associated documentation) are available for: +* [Python](python-client/README.md) +* [Javascript / TypeScript](javascript-client/README.md) + +### Pytest +When installed, django-s3-file-field makes several +[Pytest fixtures](https://docs.pytest.org/en/latest/explanation/fixtures.html) automatically +available for use. + +The `s3ff_field_value` fixture will return a valid input value for Django `ModelForm` or +Django Rest Framework `ModelSerializer` subclasses: +```python +from .forms import ResourceForm + +def test_resource_form(s3ff_field_value): + form = ResourceForm(data={'blob': s3ff_field_value}) + assert form.is_valid() +``` + +Alternatively, the `s3ff_field_value_factory` fixture transforms a `File` object into a valid input +value (for Django `ModelForm` or Django Rest Framework `ModelSerializer` subclasses), providing +more control over the uploaded file: +```python +from django.core.files.storage import default_storage +from rest_framework.test import APIClient + +def test_resource_create(s3ff_field_value_factory): + client = APIClient() + stored_file = default_storage.open('some_existing_file.txt') + s3ff_field_value = s3ff_field_value_factory(stored_file) + resp = client.post('/resource', data={'blob': s3ff_field_value}) + assert resp.status_code == 201 +``` + + + + +%prep +%autosetup -n django-s3-file-field-0.3.2 + +%build +%py3_build + +%install +%py3_install +install -d -m755 %{buildroot}/%{_pkgdocdir} +if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi +if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi +if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi +if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi +pushd %{buildroot} +if [ -d usr/lib ]; then + find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/lib64 ]; then + find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/bin ]; then + find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/sbin ]; then + find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst +fi +touch doclist.lst +if [ -d usr/share/man ]; then + find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst +fi +popd +mv %{buildroot}/filelist.lst . +mv %{buildroot}/doclist.lst . + +%files -n python3-django-s3-file-field -f filelist.lst +%dir %{python3_sitelib}/* + +%files help -f doclist.lst +%{_docdir}/* + +%changelog +* Fri May 05 2023 Python_Bot - 0.3.2-1 +- Package Spec generated diff --git a/sources b/sources new file mode 100644 index 0000000..5ad9752 --- /dev/null +++ b/sources @@ -0,0 +1 @@ +9f00da607d39284ff3ca0e66cd06a61e django-s3-file-field-0.3.2.tar.gz -- cgit v1.2.3