Fri Mar 22 18:45:23 2024 UTC (66d)
py-djangorestframework: updated to 3.15.1

3.15.1

Fix SearchFilter handling of quoted and comma separated strings, when .get_search_terms is being called into by a custom class. See
Revert number of 3.15.0 issues which included unintended side-effects. See

3.15.0

Django 5.0 and Python 3.12 support
Use POST method instead of GET to perform logout in browsable API [9208]
Added jQuery 3.7.1 support & dropped previous version
Use str as default path converter
Document support for http.HTTPMethod in the @action decorator added in Python 3.11
Update exceptions.md
Partial serializer should not have required fields
Propagate 'default' from model field to serializer field.
Allow to override child.run_validation call in ListSerializer
Align SearchFilter behaviour to django.contrib.admin search
Class name added to unknown field error
Fix: Pagination response schemas.
Fix choices in ChoiceField to support IntEnum
Fix SearchFilter rendering search field with invalid value
Fix OpenAPI Schema yaml rendering for timedelta
Fix NamespaceVersioning ignoring DEFAULT_VERSION on non-None namespaces
Added Deprecation Warnings for CoreAPI
Removed usage of field.choices that triggered full table load
Permit mixed casing of string values for BooleanField validation
Fixes BrowsableAPIRenderer for usage with ListSerializer.
Change semantic of OR of two permission classes
Remove dependency on pytz
Make set_value a method within Serializer
Fix URLPathVersioning reverse fallback
Warn about Decimal type in min_value and max_value arguments of DecimalField
Fix mapping for choice values
Refactor read function to use context manager for file handling
Fix: fallback on CursorPagination ordering if unset on the view
Replaced OrderedDict with dict
Refactor get_field_info method to include max_digits and decimal_places attributes in SimpleMetadata class
Implement __eq__ for validators
Ensure CursorPagination respects nulls in the ordering field
Use ZoneInfo as primary source of timezone data
Add username search field for TokenAdmin
Handle Nested Relation in SlugRelatedField when many=False
Bump version of jQuery to 3.6.4 & updated ref links
Support UniqueConstraint
Allow Request, Response, Field, and GenericAPIView to be subscriptable. This allows the classes to be made generic for type checking.
Feat: Add some changes to ValidationError to support django style validation errors
Fix Respect can_read_model permission in DjangoModelPermissions
Add SimplePathRouter
Re-prefetch related objects after updating
Fix FilePathField required argument
Raise ImproperlyConfigured exception if basename is not unique
Use PrimaryKeyRelatedField pkfield in openapi
replace partition with split in BasicAuthentication
Fix BooleanField's allow_null behavior
Handle Django's ValidationErrors in ListField
Remove a bit of inline CSS. Add CSP nonce where it might be required and is available
Use autocomplete widget for user selection in Token admin
Make browsable API compatible with strong CSP
Avoid inline script execution for injecting CSRF token
Mitigate global dependency on inflection
Register Django urls
Implemented Verbose Name Translation for TokenProxy
Properly handle OverflowError in DurationField deserialization
Fix OpenAPI operation name plural appropriately
Represent SafeString as plain string on schema rendering
Fix 8771 - Checking for authentication even if _ignore_model_permissions = True
Fix 404 when page query parameter is empty string
Fixes instance check in ListSerializer.to_representation
FloatField will crash if the input is a number that is too big
Add missing DurationField to SimpleMetada label_lookup
Add support for Python 3.11
Make request consistently available in pagination classes
Possibility to remove trailing zeros on DecimalFields representation
Add a method for getting serializer field name (OpenAPI)
Add __eq__ method for OperandHolder class
Avoid importing django.test package when not testing
Preserve exception messages for wrapped Django exceptions
Include examples and format to OpenAPI schema of CursorPagination
Fix infinite recursion with deepcopy on Request
Refactor: Replace try/except with contextlib.suppress()
Minor fix to SerializeMethodField docstring
Minor refactor: Unnecessary use of list() function
Unnecessary list comprehension
Use correct class to indicate present deprecation


(adam)
diff -r1.37 -r1.38 pkgsrc/www/py-djangorestframework/Makefile
diff -r1.18 -r1.19 pkgsrc/www/py-djangorestframework/PLIST
diff -r1.28 -r1.29 pkgsrc/www/py-djangorestframework/distinfo

cvs diff -r1.37 -r1.38 pkgsrc/www/py-djangorestframework/Makefile (expand / switch to unified diff)

--- pkgsrc/www/py-djangorestframework/Makefile 2023/09/28 22:26:33 1.37
+++ pkgsrc/www/py-djangorestframework/Makefile 2024/03/22 18:45:23 1.38
@@ -1,23 +1,27 @@ @@ -1,23 +1,27 @@
1# $NetBSD: Makefile,v 1.37 2023/09/28 22:26:33 joerg Exp $ 1# $NetBSD: Makefile,v 1.38 2024/03/22 18:45:23 adam Exp $
2 2
3DISTNAME= djangorestframework-3.14.0 3DISTNAME= djangorestframework-3.15.1
4PKGNAME= ${PYPKGPREFIX}-${DISTNAME} 4PKGNAME= ${PYPKGPREFIX}-${DISTNAME}
5CATEGORIES= www python 5CATEGORIES= www python
6MASTER_SITES= ${MASTER_SITE_PYPI:=d/djangorestframework/} 6MASTER_SITES= ${MASTER_SITE_PYPI:=d/djangorestframework/}
7 7
8MAINTAINER= adam@NetBSD.org 8MAINTAINER= adam@NetBSD.org
9HOMEPAGE= https://www.django-rest-framework.org/ 9HOMEPAGE= https://www.django-rest-framework.org/
10COMMENT= Lightweight REST framework for Django 10COMMENT= Lightweight REST framework for Django
11LICENSE= modified-bsd 11LICENSE= modified-bsd
12 12
 13TOOL_DEPENDS+= ${PYPKGPREFIX}-setuptools-[0-9]*:../../devel/py-setuptools
 14TOOL_DEPENDS+= ${PYPKGPREFIX}-wheel-[0-9]*:../../devel/py-wheel
13DEPENDS+= ${PYPKGPREFIX}-django>=3:../../www/py-django3 15DEPENDS+= ${PYPKGPREFIX}-django>=3:../../www/py-django3
14DEPENDS+= ${PYPKGPREFIX}-pytz>0:../../time/py-pytz 
15 
16EXTRACT_USING= bsdtar 
17 16
18USE_LANGUAGES= # none 17USE_LANGUAGES= # none
19 18
20PYTHON_VERSIONS_INCOMPATIBLE= 27 19PYTHON_VERSIONS_INCOMPATIBLE= 27
21 20
22.include "../../lang/python/egg.mk" 21.include "../../lang/python/pyversion.mk"
 22.if ${PYTHON_VERSION} < 309
 23DEPENDS+= ${PYPKGPREFIX}-backports.zoneinfo-[0-9]*:../../time/py-backports.zoneinfo
 24.endif
 25
 26.include "../../lang/python/wheel.mk"
23.include "../../mk/bsd.pkg.mk" 27.include "../../mk/bsd.pkg.mk"

cvs diff -r1.18 -r1.19 pkgsrc/www/py-djangorestframework/PLIST (expand / switch to unified diff)

--- pkgsrc/www/py-djangorestframework/PLIST 2023/08/05 06:19:18 1.18
+++ pkgsrc/www/py-djangorestframework/PLIST 2024/03/22 18:45:23 1.19
@@ -1,20 +1,19 @@ @@ -1,20 +1,19 @@
1@comment $NetBSD: PLIST,v 1.18 2023/08/05 06:19:18 adam Exp $ 1@comment $NetBSD: PLIST,v 1.19 2024/03/22 18:45:23 adam Exp $
2${PYSITELIB}/${EGG_INFODIR}/PKG-INFO 2${PYSITELIB}/${WHEEL_INFODIR}/LICENSE.md
3${PYSITELIB}/${EGG_INFODIR}/SOURCES.txt 3${PYSITELIB}/${WHEEL_INFODIR}/METADATA
4${PYSITELIB}/${EGG_INFODIR}/dependency_links.txt 4${PYSITELIB}/${WHEEL_INFODIR}/RECORD
5${PYSITELIB}/${EGG_INFODIR}/not-zip-safe 5${PYSITELIB}/${WHEEL_INFODIR}/WHEEL
6${PYSITELIB}/${EGG_INFODIR}/requires.txt 6${PYSITELIB}/${WHEEL_INFODIR}/top_level.txt
7${PYSITELIB}/${EGG_INFODIR}/top_level.txt 
8${PYSITELIB}/rest_framework/__init__.py 7${PYSITELIB}/rest_framework/__init__.py
9${PYSITELIB}/rest_framework/__init__.pyc 8${PYSITELIB}/rest_framework/__init__.pyc
10${PYSITELIB}/rest_framework/__init__.pyo 9${PYSITELIB}/rest_framework/__init__.pyo
11${PYSITELIB}/rest_framework/apps.py 10${PYSITELIB}/rest_framework/apps.py
12${PYSITELIB}/rest_framework/apps.pyc 11${PYSITELIB}/rest_framework/apps.pyc
13${PYSITELIB}/rest_framework/apps.pyo 12${PYSITELIB}/rest_framework/apps.pyo
14${PYSITELIB}/rest_framework/authentication.py 13${PYSITELIB}/rest_framework/authentication.py
15${PYSITELIB}/rest_framework/authentication.pyc 14${PYSITELIB}/rest_framework/authentication.pyc
16${PYSITELIB}/rest_framework/authentication.pyo 15${PYSITELIB}/rest_framework/authentication.pyo
17${PYSITELIB}/rest_framework/authtoken/__init__.py 16${PYSITELIB}/rest_framework/authtoken/__init__.py
18${PYSITELIB}/rest_framework/authtoken/__init__.pyc 17${PYSITELIB}/rest_framework/authtoken/__init__.pyc
19${PYSITELIB}/rest_framework/authtoken/__init__.pyo 18${PYSITELIB}/rest_framework/authtoken/__init__.pyo
20${PYSITELIB}/rest_framework/authtoken/admin.py 19${PYSITELIB}/rest_framework/authtoken/admin.py
@@ -31,26 +30,29 @@ ${PYSITELIB}/rest_framework/authtoken/ma @@ -31,26 +30,29 @@ ${PYSITELIB}/rest_framework/authtoken/ma
31${PYSITELIB}/rest_framework/authtoken/management/commands/__init__.pyo 30${PYSITELIB}/rest_framework/authtoken/management/commands/__init__.pyo
32${PYSITELIB}/rest_framework/authtoken/management/commands/drf_create_token.py 31${PYSITELIB}/rest_framework/authtoken/management/commands/drf_create_token.py
33${PYSITELIB}/rest_framework/authtoken/management/commands/drf_create_token.pyc 32${PYSITELIB}/rest_framework/authtoken/management/commands/drf_create_token.pyc
34${PYSITELIB}/rest_framework/authtoken/management/commands/drf_create_token.pyo 33${PYSITELIB}/rest_framework/authtoken/management/commands/drf_create_token.pyo
35${PYSITELIB}/rest_framework/authtoken/migrations/0001_initial.py 34${PYSITELIB}/rest_framework/authtoken/migrations/0001_initial.py
36${PYSITELIB}/rest_framework/authtoken/migrations/0001_initial.pyc 35${PYSITELIB}/rest_framework/authtoken/migrations/0001_initial.pyc
37${PYSITELIB}/rest_framework/authtoken/migrations/0001_initial.pyo 36${PYSITELIB}/rest_framework/authtoken/migrations/0001_initial.pyo
38${PYSITELIB}/rest_framework/authtoken/migrations/0002_auto_20160226_1747.py 37${PYSITELIB}/rest_framework/authtoken/migrations/0002_auto_20160226_1747.py
39${PYSITELIB}/rest_framework/authtoken/migrations/0002_auto_20160226_1747.pyc 38${PYSITELIB}/rest_framework/authtoken/migrations/0002_auto_20160226_1747.pyc
40${PYSITELIB}/rest_framework/authtoken/migrations/0002_auto_20160226_1747.pyo 39${PYSITELIB}/rest_framework/authtoken/migrations/0002_auto_20160226_1747.pyo
41${PYSITELIB}/rest_framework/authtoken/migrations/0003_tokenproxy.py 40${PYSITELIB}/rest_framework/authtoken/migrations/0003_tokenproxy.py
42${PYSITELIB}/rest_framework/authtoken/migrations/0003_tokenproxy.pyc 41${PYSITELIB}/rest_framework/authtoken/migrations/0003_tokenproxy.pyc
43${PYSITELIB}/rest_framework/authtoken/migrations/0003_tokenproxy.pyo 42${PYSITELIB}/rest_framework/authtoken/migrations/0003_tokenproxy.pyo
 43${PYSITELIB}/rest_framework/authtoken/migrations/0004_alter_tokenproxy_options.py
 44${PYSITELIB}/rest_framework/authtoken/migrations/0004_alter_tokenproxy_options.pyc
 45${PYSITELIB}/rest_framework/authtoken/migrations/0004_alter_tokenproxy_options.pyo
44${PYSITELIB}/rest_framework/authtoken/migrations/__init__.py 46${PYSITELIB}/rest_framework/authtoken/migrations/__init__.py
45${PYSITELIB}/rest_framework/authtoken/migrations/__init__.pyc 47${PYSITELIB}/rest_framework/authtoken/migrations/__init__.pyc
46${PYSITELIB}/rest_framework/authtoken/migrations/__init__.pyo 48${PYSITELIB}/rest_framework/authtoken/migrations/__init__.pyo
47${PYSITELIB}/rest_framework/authtoken/models.py 49${PYSITELIB}/rest_framework/authtoken/models.py
48${PYSITELIB}/rest_framework/authtoken/models.pyc 50${PYSITELIB}/rest_framework/authtoken/models.pyc
49${PYSITELIB}/rest_framework/authtoken/models.pyo 51${PYSITELIB}/rest_framework/authtoken/models.pyo
50${PYSITELIB}/rest_framework/authtoken/serializers.py 52${PYSITELIB}/rest_framework/authtoken/serializers.py
51${PYSITELIB}/rest_framework/authtoken/serializers.pyc 53${PYSITELIB}/rest_framework/authtoken/serializers.pyc
52${PYSITELIB}/rest_framework/authtoken/serializers.pyo 54${PYSITELIB}/rest_framework/authtoken/serializers.pyo
53${PYSITELIB}/rest_framework/authtoken/views.py 55${PYSITELIB}/rest_framework/authtoken/views.py
54${PYSITELIB}/rest_framework/authtoken/views.pyc 56${PYSITELIB}/rest_framework/authtoken/views.pyc
55${PYSITELIB}/rest_framework/authtoken/views.pyo 57${PYSITELIB}/rest_framework/authtoken/views.pyo
56${PYSITELIB}/rest_framework/checks.py 58${PYSITELIB}/rest_framework/checks.py
@@ -231,27 +233,28 @@ ${PYSITELIB}/rest_framework/static/rest_ @@ -231,27 +233,28 @@ ${PYSITELIB}/rest_framework/static/rest_
231${PYSITELIB}/rest_framework/static/rest_framework/fonts/glyphicons-halflings-regular.eot 233${PYSITELIB}/rest_framework/static/rest_framework/fonts/glyphicons-halflings-regular.eot
232${PYSITELIB}/rest_framework/static/rest_framework/fonts/glyphicons-halflings-regular.svg 234${PYSITELIB}/rest_framework/static/rest_framework/fonts/glyphicons-halflings-regular.svg
233${PYSITELIB}/rest_framework/static/rest_framework/fonts/glyphicons-halflings-regular.ttf 235${PYSITELIB}/rest_framework/static/rest_framework/fonts/glyphicons-halflings-regular.ttf
234${PYSITELIB}/rest_framework/static/rest_framework/fonts/glyphicons-halflings-regular.woff 236${PYSITELIB}/rest_framework/static/rest_framework/fonts/glyphicons-halflings-regular.woff
235${PYSITELIB}/rest_framework/static/rest_framework/fonts/glyphicons-halflings-regular.woff2 237${PYSITELIB}/rest_framework/static/rest_framework/fonts/glyphicons-halflings-regular.woff2
236${PYSITELIB}/rest_framework/static/rest_framework/img/glyphicons-halflings-white.png 238${PYSITELIB}/rest_framework/static/rest_framework/img/glyphicons-halflings-white.png
237${PYSITELIB}/rest_framework/static/rest_framework/img/glyphicons-halflings.png 239${PYSITELIB}/rest_framework/static/rest_framework/img/glyphicons-halflings.png
238${PYSITELIB}/rest_framework/static/rest_framework/img/grid.png 240${PYSITELIB}/rest_framework/static/rest_framework/img/grid.png
239${PYSITELIB}/rest_framework/static/rest_framework/js/ajax-form.js 241${PYSITELIB}/rest_framework/static/rest_framework/js/ajax-form.js
240${PYSITELIB}/rest_framework/static/rest_framework/js/bootstrap.min.js 242${PYSITELIB}/rest_framework/static/rest_framework/js/bootstrap.min.js
241${PYSITELIB}/rest_framework/static/rest_framework/js/coreapi-0.1.1.js 243${PYSITELIB}/rest_framework/static/rest_framework/js/coreapi-0.1.1.js
242${PYSITELIB}/rest_framework/static/rest_framework/js/csrf.js 244${PYSITELIB}/rest_framework/static/rest_framework/js/csrf.js
243${PYSITELIB}/rest_framework/static/rest_framework/js/default.js 245${PYSITELIB}/rest_framework/static/rest_framework/js/default.js
244${PYSITELIB}/rest_framework/static/rest_framework/js/jquery-3.5.1.min.js 246${PYSITELIB}/rest_framework/static/rest_framework/js/jquery-3.7.1.min.js
 247${PYSITELIB}/rest_framework/static/rest_framework/js/load-ajax-form.js
245${PYSITELIB}/rest_framework/static/rest_framework/js/prettify-min.js 248${PYSITELIB}/rest_framework/static/rest_framework/js/prettify-min.js
246${PYSITELIB}/rest_framework/status.py 249${PYSITELIB}/rest_framework/status.py
247${PYSITELIB}/rest_framework/status.pyc 250${PYSITELIB}/rest_framework/status.pyc
248${PYSITELIB}/rest_framework/status.pyo 251${PYSITELIB}/rest_framework/status.pyo
249${PYSITELIB}/rest_framework/templates/rest_framework/admin.html 252${PYSITELIB}/rest_framework/templates/rest_framework/admin.html
250${PYSITELIB}/rest_framework/templates/rest_framework/admin/detail.html 253${PYSITELIB}/rest_framework/templates/rest_framework/admin/detail.html
251${PYSITELIB}/rest_framework/templates/rest_framework/admin/dict_value.html 254${PYSITELIB}/rest_framework/templates/rest_framework/admin/dict_value.html
252${PYSITELIB}/rest_framework/templates/rest_framework/admin/list.html 255${PYSITELIB}/rest_framework/templates/rest_framework/admin/list.html
253${PYSITELIB}/rest_framework/templates/rest_framework/admin/list_value.html 256${PYSITELIB}/rest_framework/templates/rest_framework/admin/list_value.html
254${PYSITELIB}/rest_framework/templates/rest_framework/admin/simple_list_value.html 257${PYSITELIB}/rest_framework/templates/rest_framework/admin/simple_list_value.html
255${PYSITELIB}/rest_framework/templates/rest_framework/api.html 258${PYSITELIB}/rest_framework/templates/rest_framework/api.html
256${PYSITELIB}/rest_framework/templates/rest_framework/base.html 259${PYSITELIB}/rest_framework/templates/rest_framework/base.html
257${PYSITELIB}/rest_framework/templates/rest_framework/docs/auth/basic.html 260${PYSITELIB}/rest_framework/templates/rest_framework/docs/auth/basic.html
@@ -358,26 +361,29 @@ ${PYSITELIB}/rest_framework/utils/json.p @@ -358,26 +361,29 @@ ${PYSITELIB}/rest_framework/utils/json.p
358${PYSITELIB}/rest_framework/utils/json.pyo 361${PYSITELIB}/rest_framework/utils/json.pyo
359${PYSITELIB}/rest_framework/utils/mediatypes.py 362${PYSITELIB}/rest_framework/utils/mediatypes.py
360${PYSITELIB}/rest_framework/utils/mediatypes.pyc 363${PYSITELIB}/rest_framework/utils/mediatypes.pyc
361${PYSITELIB}/rest_framework/utils/mediatypes.pyo 364${PYSITELIB}/rest_framework/utils/mediatypes.pyo
362${PYSITELIB}/rest_framework/utils/model_meta.py 365${PYSITELIB}/rest_framework/utils/model_meta.py
363${PYSITELIB}/rest_framework/utils/model_meta.pyc 366${PYSITELIB}/rest_framework/utils/model_meta.pyc
364${PYSITELIB}/rest_framework/utils/model_meta.pyo 367${PYSITELIB}/rest_framework/utils/model_meta.pyo
365${PYSITELIB}/rest_framework/utils/representation.py 368${PYSITELIB}/rest_framework/utils/representation.py
366${PYSITELIB}/rest_framework/utils/representation.pyc 369${PYSITELIB}/rest_framework/utils/representation.pyc
367${PYSITELIB}/rest_framework/utils/representation.pyo 370${PYSITELIB}/rest_framework/utils/representation.pyo
368${PYSITELIB}/rest_framework/utils/serializer_helpers.py 371${PYSITELIB}/rest_framework/utils/serializer_helpers.py
369${PYSITELIB}/rest_framework/utils/serializer_helpers.pyc 372${PYSITELIB}/rest_framework/utils/serializer_helpers.pyc
370${PYSITELIB}/rest_framework/utils/serializer_helpers.pyo 373${PYSITELIB}/rest_framework/utils/serializer_helpers.pyo
 374${PYSITELIB}/rest_framework/utils/timezone.py
 375${PYSITELIB}/rest_framework/utils/timezone.pyc
 376${PYSITELIB}/rest_framework/utils/timezone.pyo
371${PYSITELIB}/rest_framework/utils/urls.py 377${PYSITELIB}/rest_framework/utils/urls.py
372${PYSITELIB}/rest_framework/utils/urls.pyc 378${PYSITELIB}/rest_framework/utils/urls.pyc
373${PYSITELIB}/rest_framework/utils/urls.pyo 379${PYSITELIB}/rest_framework/utils/urls.pyo
374${PYSITELIB}/rest_framework/validators.py 380${PYSITELIB}/rest_framework/validators.py
375${PYSITELIB}/rest_framework/validators.pyc 381${PYSITELIB}/rest_framework/validators.pyc
376${PYSITELIB}/rest_framework/validators.pyo 382${PYSITELIB}/rest_framework/validators.pyo
377${PYSITELIB}/rest_framework/versioning.py 383${PYSITELIB}/rest_framework/versioning.py
378${PYSITELIB}/rest_framework/versioning.pyc 384${PYSITELIB}/rest_framework/versioning.pyc
379${PYSITELIB}/rest_framework/versioning.pyo 385${PYSITELIB}/rest_framework/versioning.pyo
380${PYSITELIB}/rest_framework/views.py 386${PYSITELIB}/rest_framework/views.py
381${PYSITELIB}/rest_framework/views.pyc 387${PYSITELIB}/rest_framework/views.pyc
382${PYSITELIB}/rest_framework/views.pyo 388${PYSITELIB}/rest_framework/views.pyo
383${PYSITELIB}/rest_framework/viewsets.py 389${PYSITELIB}/rest_framework/viewsets.py

cvs diff -r1.28 -r1.29 pkgsrc/www/py-djangorestframework/distinfo (expand / switch to unified diff)

--- pkgsrc/www/py-djangorestframework/distinfo 2023/08/05 06:19:18 1.28
+++ pkgsrc/www/py-djangorestframework/distinfo 2024/03/22 18:45:23 1.29
@@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
1$NetBSD: distinfo,v 1.28 2023/08/05 06:19:18 adam Exp $ 1$NetBSD: distinfo,v 1.29 2024/03/22 18:45:23 adam Exp $
2 2
3BLAKE2s (djangorestframework-3.14.0.tar.gz) = bf269384949a15269c7235c3dd8aba67cad1f88518b0956978d5c657c8611799 3BLAKE2s (djangorestframework-3.15.1.tar.gz) = 708e87473566322797f3e5ac8d286dbc0403b492bb536c154c6bba4696379c9d
4SHA512 (djangorestframework-3.14.0.tar.gz) = 063dde9eaaf6adede1b1ce75ec9f61581639e7f0795052019bcf9b9cc02318bd2f5fd825e6893aa2f7353c601e6792f8a52c26351bbb1e930aa841faca61f385 4SHA512 (djangorestframework-3.15.1.tar.gz) = 153039f7b970075bec10f20557a9de7d1c259e7d83fbe374174a25048a1a129a075cfd3cc90363b0e4bc9511061582f788610c15544ccb49a72c7fc28a9ed6f1
5Size (djangorestframework-3.14.0.tar.gz) = 1055343 bytes 5Size (djangorestframework-3.15.1.tar.gz) = 1066194 bytes