diff options
| author | CoprDistGit <infra@openeuler.org> | 2023-04-11 22:59:29 +0000 |
|---|---|---|
| committer | CoprDistGit <infra@openeuler.org> | 2023-04-11 22:59:29 +0000 |
| commit | be7aaf41b62283c529be1d24974b797827e1ca96 (patch) | |
| tree | b574503be3d0be11ac20e717bd5196298d8e7ea3 | |
| parent | 97e951a3bdc0af1c523946b36ce4b76dc920a927 (diff) | |
automatic import of python-django-auto-prefetching
| -rw-r--r-- | .gitignore | 1 | ||||
| -rw-r--r-- | python-django-auto-prefetching.spec | 383 | ||||
| -rw-r--r-- | sources | 1 |
3 files changed, 385 insertions, 0 deletions
@@ -0,0 +1 @@ +/django_auto_prefetching-0.2.12.tar.gz diff --git a/python-django-auto-prefetching.spec b/python-django-auto-prefetching.spec new file mode 100644 index 0000000..ee185da --- /dev/null +++ b/python-django-auto-prefetching.spec @@ -0,0 +1,383 @@ +%global _empty_manifest_terminate_build 0 +Name: python-django-auto-prefetching +Version: 0.2.12 +Release: 1 +Summary: Tools for automatically prefetching related objects in Django and Django-rest-framework +License: MIT +URL: https://github.com/GeeWee/django-auto-prefetching +Source0: https://mirrors.nju.edu.cn/pypi/web/packages/79/0d/56491db8df963fab7929a067e576353d7f6d118613ae4e1117b0154db092/django_auto_prefetching-0.2.12.tar.gz +BuildArch: noarch + +Requires: python3-django +Requires: python3-djangorestframework + +%description + +# Django Auto-Prefetching +[](https://app.circleci.com/pipelines/github/GeeWee/django-auto-prefetching) + +*Never worry about n+1 performance problems again* + +This project aims to automatically perform the correct `select_related` and `prefetch_related` +calls for your django-rest-framework code. It does this by inspecting your serializers, seeing what fields +they use, and what models they refer to, and automatically calculating what needs to be prefetched. + +## Installation +Installation via <a href="https://pypi.org/project/django-auto-prefetching/">pip</a>: + +`pip install django-auto-prefetching` + +## AutoPrefetchViewSetMixin +This is a ViewSet mixin you can use, which will automatically prefetch the needed objects from the database, based on the ViewSets `queryset` and `serializer_class`. Under most circumstances this will be all the database optimizations you'll ever need to do: + +### Usage +Simply add it after your ModelViewSet class. + +```python +from django_auto_prefetching import AutoPrefetchViewSetMixin +from rest_framework.viewsets import ModelViewSet + +class BaseModelViewSet(AutoPrefetchViewSetMixin, ModelViewSet): + queryset = YourModel.objects.all() + serializer_class = YourModelSerializer +``` +It supports all types of relational fields (many to many, one to many, one to one etc.) out of the box. + +### Manually calling prefetch +The `AutoPrefetchViewSetMixin` cannot see what objects are being accessed in e.g. a `SerializerMethodField`. +If you use objects in there, you might need to do some additional prefetches. +If you do this and override `get_queryset`, you will have to call `prefetch` manually as the mixin code is never reached. + +```python +import django_auto_prefetching +from rest_framework.viewsets import ModelViewSet + +class BaseModelViewSet(django_auto_prefetching.AutoPrefetchViewSetMixin, ModelViewSet): + serializer_class = YourModelSerializer + + def get_queryset(self): + # Simply do the extra select_related / prefetch_related here + # and leave the mixin to do the rest of the work + queryset = YourModel.objects.all() + queryset = queryset.select_related('my_extra_field') + return django_auto_prefetching.prefetch(queryset, self.serializer_class) +``` +You can override `get_prefetchable_queryset` instead of `get_queryset` if you don't want to manually call `django_auto_prefetching.prefetch()`. Example: +```python +import django_auto_prefetching +from rest_framework.viewsets import ModelViewSet + +class BaseModelViewSet(django_auto_prefetching.AutoPrefetchViewSetMixin, ModelViewSet): + serializer_class = YourModelSerializer + + def get_prefetchable_queryset(self): + return YourModel.objects.all() +``` +Now `get_queryset()` will call our `get_prefetchable_queryset()` and will add automatic prefetches + +## Manually specifying which fields are needed + +If you need to explicitly specify some extra fields to be included or excluded, you can also override the following methods on your ViewSet to return a list or a set of fields to prefetch/exclude. + +```python +import django_auto_prefetching +from rest_framework.viewsets import ModelViewSet + +class BaseModelViewSet(django_auto_prefetching.AutoPrefetchViewSetMixin, ModelViewSet): + serializer_class = YourModelSerializer + + def get_auto_prefetch_excluded_fields(self): + return {"exclude_this_field", "and_this_field"} + + def get_auto_prefetch_extra_select_fields(self): + return {"select_related_on_this_field"} + + def get_auto_prefetch_extra_prefetch_fields(self): + return {"prefetch_related_on_this_field"} +} +``` + + +## Supported Versions + +Python: 3.7, 3.8, 3.10<br> +Django: 3.2, 4.0.4 + +Pull Requests to support other versions are welcome. + +## Maturity +The project is currently being used without issues in a medium-sized Django project (20.000 lines of code). + +## Contributing +Contributions are welcome! To get the tests running, do the following: +- Clone the repository. +- If you don't have it, install [pipenv](https://pipenv.pypa.io/en/latest/#install-pipenv-today) +- Install the dependencies with `pipenv sync --dev` +- Activate the virtualenv created by pipenv by writing `pipenv shell` +- Run the tests with `./manage.py test` + + +%package -n python3-django-auto-prefetching +Summary: Tools for automatically prefetching related objects in Django and Django-rest-framework +Provides: python-django-auto-prefetching +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-pip +%description -n python3-django-auto-prefetching + +# Django Auto-Prefetching +[](https://app.circleci.com/pipelines/github/GeeWee/django-auto-prefetching) + +*Never worry about n+1 performance problems again* + +This project aims to automatically perform the correct `select_related` and `prefetch_related` +calls for your django-rest-framework code. It does this by inspecting your serializers, seeing what fields +they use, and what models they refer to, and automatically calculating what needs to be prefetched. + +## Installation +Installation via <a href="https://pypi.org/project/django-auto-prefetching/">pip</a>: + +`pip install django-auto-prefetching` + +## AutoPrefetchViewSetMixin +This is a ViewSet mixin you can use, which will automatically prefetch the needed objects from the database, based on the ViewSets `queryset` and `serializer_class`. Under most circumstances this will be all the database optimizations you'll ever need to do: + +### Usage +Simply add it after your ModelViewSet class. + +```python +from django_auto_prefetching import AutoPrefetchViewSetMixin +from rest_framework.viewsets import ModelViewSet + +class BaseModelViewSet(AutoPrefetchViewSetMixin, ModelViewSet): + queryset = YourModel.objects.all() + serializer_class = YourModelSerializer +``` +It supports all types of relational fields (many to many, one to many, one to one etc.) out of the box. + +### Manually calling prefetch +The `AutoPrefetchViewSetMixin` cannot see what objects are being accessed in e.g. a `SerializerMethodField`. +If you use objects in there, you might need to do some additional prefetches. +If you do this and override `get_queryset`, you will have to call `prefetch` manually as the mixin code is never reached. + +```python +import django_auto_prefetching +from rest_framework.viewsets import ModelViewSet + +class BaseModelViewSet(django_auto_prefetching.AutoPrefetchViewSetMixin, ModelViewSet): + serializer_class = YourModelSerializer + + def get_queryset(self): + # Simply do the extra select_related / prefetch_related here + # and leave the mixin to do the rest of the work + queryset = YourModel.objects.all() + queryset = queryset.select_related('my_extra_field') + return django_auto_prefetching.prefetch(queryset, self.serializer_class) +``` +You can override `get_prefetchable_queryset` instead of `get_queryset` if you don't want to manually call `django_auto_prefetching.prefetch()`. Example: +```python +import django_auto_prefetching +from rest_framework.viewsets import ModelViewSet + +class BaseModelViewSet(django_auto_prefetching.AutoPrefetchViewSetMixin, ModelViewSet): + serializer_class = YourModelSerializer + + def get_prefetchable_queryset(self): + return YourModel.objects.all() +``` +Now `get_queryset()` will call our `get_prefetchable_queryset()` and will add automatic prefetches + +## Manually specifying which fields are needed + +If you need to explicitly specify some extra fields to be included or excluded, you can also override the following methods on your ViewSet to return a list or a set of fields to prefetch/exclude. + +```python +import django_auto_prefetching +from rest_framework.viewsets import ModelViewSet + +class BaseModelViewSet(django_auto_prefetching.AutoPrefetchViewSetMixin, ModelViewSet): + serializer_class = YourModelSerializer + + def get_auto_prefetch_excluded_fields(self): + return {"exclude_this_field", "and_this_field"} + + def get_auto_prefetch_extra_select_fields(self): + return {"select_related_on_this_field"} + + def get_auto_prefetch_extra_prefetch_fields(self): + return {"prefetch_related_on_this_field"} +} +``` + + +## Supported Versions + +Python: 3.7, 3.8, 3.10<br> +Django: 3.2, 4.0.4 + +Pull Requests to support other versions are welcome. + +## Maturity +The project is currently being used without issues in a medium-sized Django project (20.000 lines of code). + +## Contributing +Contributions are welcome! To get the tests running, do the following: +- Clone the repository. +- If you don't have it, install [pipenv](https://pipenv.pypa.io/en/latest/#install-pipenv-today) +- Install the dependencies with `pipenv sync --dev` +- Activate the virtualenv created by pipenv by writing `pipenv shell` +- Run the tests with `./manage.py test` + + +%package help +Summary: Development documents and examples for django-auto-prefetching +Provides: python3-django-auto-prefetching-doc +%description help + +# Django Auto-Prefetching +[](https://app.circleci.com/pipelines/github/GeeWee/django-auto-prefetching) + +*Never worry about n+1 performance problems again* + +This project aims to automatically perform the correct `select_related` and `prefetch_related` +calls for your django-rest-framework code. It does this by inspecting your serializers, seeing what fields +they use, and what models they refer to, and automatically calculating what needs to be prefetched. + +## Installation +Installation via <a href="https://pypi.org/project/django-auto-prefetching/">pip</a>: + +`pip install django-auto-prefetching` + +## AutoPrefetchViewSetMixin +This is a ViewSet mixin you can use, which will automatically prefetch the needed objects from the database, based on the ViewSets `queryset` and `serializer_class`. Under most circumstances this will be all the database optimizations you'll ever need to do: + +### Usage +Simply add it after your ModelViewSet class. + +```python +from django_auto_prefetching import AutoPrefetchViewSetMixin +from rest_framework.viewsets import ModelViewSet + +class BaseModelViewSet(AutoPrefetchViewSetMixin, ModelViewSet): + queryset = YourModel.objects.all() + serializer_class = YourModelSerializer +``` +It supports all types of relational fields (many to many, one to many, one to one etc.) out of the box. + +### Manually calling prefetch +The `AutoPrefetchViewSetMixin` cannot see what objects are being accessed in e.g. a `SerializerMethodField`. +If you use objects in there, you might need to do some additional prefetches. +If you do this and override `get_queryset`, you will have to call `prefetch` manually as the mixin code is never reached. + +```python +import django_auto_prefetching +from rest_framework.viewsets import ModelViewSet + +class BaseModelViewSet(django_auto_prefetching.AutoPrefetchViewSetMixin, ModelViewSet): + serializer_class = YourModelSerializer + + def get_queryset(self): + # Simply do the extra select_related / prefetch_related here + # and leave the mixin to do the rest of the work + queryset = YourModel.objects.all() + queryset = queryset.select_related('my_extra_field') + return django_auto_prefetching.prefetch(queryset, self.serializer_class) +``` +You can override `get_prefetchable_queryset` instead of `get_queryset` if you don't want to manually call `django_auto_prefetching.prefetch()`. Example: +```python +import django_auto_prefetching +from rest_framework.viewsets import ModelViewSet + +class BaseModelViewSet(django_auto_prefetching.AutoPrefetchViewSetMixin, ModelViewSet): + serializer_class = YourModelSerializer + + def get_prefetchable_queryset(self): + return YourModel.objects.all() +``` +Now `get_queryset()` will call our `get_prefetchable_queryset()` and will add automatic prefetches + +## Manually specifying which fields are needed + +If you need to explicitly specify some extra fields to be included or excluded, you can also override the following methods on your ViewSet to return a list or a set of fields to prefetch/exclude. + +```python +import django_auto_prefetching +from rest_framework.viewsets import ModelViewSet + +class BaseModelViewSet(django_auto_prefetching.AutoPrefetchViewSetMixin, ModelViewSet): + serializer_class = YourModelSerializer + + def get_auto_prefetch_excluded_fields(self): + return {"exclude_this_field", "and_this_field"} + + def get_auto_prefetch_extra_select_fields(self): + return {"select_related_on_this_field"} + + def get_auto_prefetch_extra_prefetch_fields(self): + return {"prefetch_related_on_this_field"} +} +``` + + +## Supported Versions + +Python: 3.7, 3.8, 3.10<br> +Django: 3.2, 4.0.4 + +Pull Requests to support other versions are welcome. + +## Maturity +The project is currently being used without issues in a medium-sized Django project (20.000 lines of code). + +## Contributing +Contributions are welcome! To get the tests running, do the following: +- Clone the repository. +- If you don't have it, install [pipenv](https://pipenv.pypa.io/en/latest/#install-pipenv-today) +- Install the dependencies with `pipenv sync --dev` +- Activate the virtualenv created by pipenv by writing `pipenv shell` +- Run the tests with `./manage.py test` + + +%prep +%autosetup -n django-auto-prefetching-0.2.12 + +%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-auto-prefetching -f filelist.lst +%dir %{python3_sitelib}/* + +%files help -f doclist.lst +%{_docdir}/* + +%changelog +* Tue Apr 11 2023 Python_Bot <Python_Bot@openeuler.org> - 0.2.12-1 +- Package Spec generated @@ -0,0 +1 @@ +1cc5b2245ad728c8e2655c32af66308e django_auto_prefetching-0.2.12.tar.gz |
