django-api-versioning 0.1.1__tar.gz → 0.1.3__tar.gz
Sign up to get free protection for your applications and to get access to all the features.
- {django-api-versioning-0.1.1/django_api_versioning.egg-info → django-api-versioning-0.1.3}/PKG-INFO +2 -2
- {django-api-versioning-0.1.1 → django-api-versioning-0.1.3}/django_api_versioning/decorators.py +6 -0
- {django-api-versioning-0.1.1 → django-api-versioning-0.1.3/django_api_versioning.egg-info}/PKG-INFO +2 -2
- {django-api-versioning-0.1.1 → django-api-versioning-0.1.3}/setup.py +2 -2
- {django-api-versioning-0.1.1 → django-api-versioning-0.1.3}/tests/test_decorators.py +34 -0
- {django-api-versioning-0.1.1 → django-api-versioning-0.1.3}/.pre-commit-config.yaml +0 -0
- {django-api-versioning-0.1.1 → django-api-versioning-0.1.3}/LICENSE +0 -0
- {django-api-versioning-0.1.1 → django-api-versioning-0.1.3}/MANIFEST.in +0 -0
- {django-api-versioning-0.1.1 → django-api-versioning-0.1.3}/README.md +0 -0
- {django-api-versioning-0.1.1 → django-api-versioning-0.1.3}/django_api_versioning/__init__.py +0 -0
- {django-api-versioning-0.1.1 → django-api-versioning-0.1.3}/django_api_versioning/exceptions.py +0 -0
- {django-api-versioning-0.1.1 → django-api-versioning-0.1.3}/django_api_versioning/registry.py +0 -0
- {django-api-versioning-0.1.1 → django-api-versioning-0.1.3}/django_api_versioning/settings.py +0 -0
- {django-api-versioning-0.1.1 → django-api-versioning-0.1.3}/django_api_versioning/urls.py +0 -0
- {django-api-versioning-0.1.1 → django-api-versioning-0.1.3}/django_api_versioning.egg-info/SOURCES.txt +0 -0
- {django-api-versioning-0.1.1 → django-api-versioning-0.1.3}/django_api_versioning.egg-info/dependency_links.txt +0 -0
- {django-api-versioning-0.1.1 → django-api-versioning-0.1.3}/django_api_versioning.egg-info/requires.txt +0 -0
- {django-api-versioning-0.1.1 → django-api-versioning-0.1.3}/django_api_versioning.egg-info/top_level.txt +0 -0
- {django-api-versioning-0.1.1 → django-api-versioning-0.1.3}/pyproject.toml +0 -0
- {django-api-versioning-0.1.1 → django-api-versioning-0.1.3}/pytest.ini +0 -0
- {django-api-versioning-0.1.1 → django-api-versioning-0.1.3}/requirements-dev.txt +0 -0
- {django-api-versioning-0.1.1 → django-api-versioning-0.1.3}/requirements.txt +0 -0
- {django-api-versioning-0.1.1 → django-api-versioning-0.1.3}/setup.cfg +0 -0
- {django-api-versioning-0.1.1 → django-api-versioning-0.1.3}/tests/__init__.py +0 -0
- {django-api-versioning-0.1.1 → django-api-versioning-0.1.3}/tests/test_exceptions.py +0 -0
- {django-api-versioning-0.1.1 → django-api-versioning-0.1.3}/tests/test_registry.py +0 -0
- {django-api-versioning-0.1.1 → django-api-versioning-0.1.3}/tests/test_settings.py +0 -0
- {django-api-versioning-0.1.1 → django-api-versioning-0.1.3}/tests/test_urls.py +0 -0
{django-api-versioning-0.1.1/django_api_versioning.egg-info → django-api-versioning-0.1.3}/PKG-INFO
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: django-api-versioning
|
3
|
-
Version: 0.1.
|
3
|
+
Version: 0.1.3
|
4
4
|
Summary: Django API versioning decorator provides a solution for managing multiple API versions within the Django framework, enabling versioning through URLs with backward compatibility and automatically registering routes.
|
5
5
|
Home-page: https://github.com/mojtaba-arvin/django-api-versioning
|
6
6
|
Author: Mojtaba Arvin
|
@@ -15,7 +15,7 @@ Classifier: Development Status :: 3 - Alpha
|
|
15
15
|
Classifier: Intended Audience :: Developers
|
16
16
|
Classifier: License :: OSI Approved :: MIT License
|
17
17
|
Classifier: Operating System :: OS Independent
|
18
|
-
Requires-Python: >=3.
|
18
|
+
Requires-Python: >=3.6
|
19
19
|
Description-Content-Type: text/markdown
|
20
20
|
Provides-Extra: dev
|
21
21
|
License-File: LICENSE
|
{django-api-versioning-0.1.1 → django-api-versioning-0.1.3}/django_api_versioning/decorators.py
RENAMED
@@ -1,5 +1,6 @@
|
|
1
1
|
from functools import wraps
|
2
2
|
from typing import Callable, Optional, List
|
3
|
+
from django.views import View
|
3
4
|
from .settings import api_settings as settings
|
4
5
|
from .registry import registry
|
5
6
|
from .exceptions import InvalidVersionError, VersionRangeError, VersionTypeError
|
@@ -41,8 +42,13 @@ def endpoint(
|
|
41
42
|
"""
|
42
43
|
|
43
44
|
def decorator(func: Callable) -> Callable:
|
45
|
+
|
44
46
|
@wraps(func)
|
45
47
|
def view(*args, **kwargs):
|
48
|
+
# Check if the view is a class-based view (CBV)
|
49
|
+
if isinstance(func, type) and issubclass(func, View):
|
50
|
+
# For class-based views, ensure it's called as a method
|
51
|
+
return func.as_view()(*args, **kwargs)
|
46
52
|
return func(*args, **kwargs)
|
47
53
|
|
48
54
|
# Read API versioning settings
|
{django-api-versioning-0.1.1 → django-api-versioning-0.1.3/django_api_versioning.egg-info}/PKG-INFO
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: django-api-versioning
|
3
|
-
Version: 0.1.
|
3
|
+
Version: 0.1.3
|
4
4
|
Summary: Django API versioning decorator provides a solution for managing multiple API versions within the Django framework, enabling versioning through URLs with backward compatibility and automatically registering routes.
|
5
5
|
Home-page: https://github.com/mojtaba-arvin/django-api-versioning
|
6
6
|
Author: Mojtaba Arvin
|
@@ -15,7 +15,7 @@ Classifier: Development Status :: 3 - Alpha
|
|
15
15
|
Classifier: Intended Audience :: Developers
|
16
16
|
Classifier: License :: OSI Approved :: MIT License
|
17
17
|
Classifier: Operating System :: OS Independent
|
18
|
-
Requires-Python: >=3.
|
18
|
+
Requires-Python: >=3.6
|
19
19
|
Description-Content-Type: text/markdown
|
20
20
|
Provides-Extra: dev
|
21
21
|
License-File: LICENSE
|
@@ -5,7 +5,7 @@ with open("README.md", "r", encoding="utf-8") as fh:
|
|
5
5
|
|
6
6
|
setup(
|
7
7
|
name="django-api-versioning",
|
8
|
-
version="0.1.
|
8
|
+
version="0.1.3",
|
9
9
|
author="Mojtaba Arvin",
|
10
10
|
author_email="ArvinDevDay@gmail.com",
|
11
11
|
description= (
|
@@ -29,7 +29,7 @@ setup(
|
|
29
29
|
"License :: OSI Approved :: MIT License",
|
30
30
|
"Operating System :: OS Independent",
|
31
31
|
],
|
32
|
-
python_requires=">=3.
|
32
|
+
python_requires=">=3.6",
|
33
33
|
install_requires=[
|
34
34
|
"Django>=3.2",
|
35
35
|
],
|
@@ -1,10 +1,13 @@
|
|
1
1
|
import pytest
|
2
2
|
from unittest.mock import patch
|
3
|
+
from django.http import JsonResponse
|
4
|
+
from django.views import View
|
3
5
|
from django_api_versioning.settings import api_settings as settings
|
4
6
|
from django_api_versioning.registry import registry
|
5
7
|
from django_api_versioning.decorators import endpoint
|
6
8
|
from django_api_versioning.exceptions import InvalidVersionError, VersionTypeError, VersionRangeError
|
7
9
|
|
10
|
+
|
8
11
|
@pytest.fixture(autouse=True)
|
9
12
|
def clear_registered_routes():
|
10
13
|
"""Clear the registry before each test to ensure isolation."""
|
@@ -86,3 +89,34 @@ def test_missing_api_version_settings():
|
|
86
89
|
@endpoint("users", version=2)
|
87
90
|
def test_view():
|
88
91
|
pass
|
92
|
+
|
93
|
+
def test_class_based_view(mock_settings):
|
94
|
+
# Create a class-based view and decorate it with the `endpoint` decorator
|
95
|
+
@endpoint("users", version=2)
|
96
|
+
class UsersView(View):
|
97
|
+
def get(self, request):
|
98
|
+
return JsonResponse({"message": "API Version 2 Users"})
|
99
|
+
|
100
|
+
# Register the view and check if the route is correctly registered
|
101
|
+
registered_routes = [str(p.pattern) for p in registry.urlpatterns]
|
102
|
+
assert "api/v2/users" in registered_routes, f"Route for version 2 is missing: {registered_routes}"
|
103
|
+
|
104
|
+
def test_class_based_view_with_invalid_version(mock_settings):
|
105
|
+
# Test invalid version for class-based view
|
106
|
+
with pytest.raises(InvalidVersionError):
|
107
|
+
@endpoint("users", version=4)
|
108
|
+
class UsersView(View):
|
109
|
+
def get(self, request):
|
110
|
+
return JsonResponse({"message": "API Version 4 Users"})
|
111
|
+
|
112
|
+
def test_class_based_view_with_backward_compatibility(mock_settings):
|
113
|
+
# Test class-based view with backward compatibility
|
114
|
+
@endpoint("users", version=3)
|
115
|
+
class UsersView(View):
|
116
|
+
def get(self, request):
|
117
|
+
return JsonResponse({"message": "API Version 3 Users"})
|
118
|
+
|
119
|
+
registered_routes = [str(p.pattern) for p in registry.urlpatterns]
|
120
|
+
# Assert that versions 1, 2, and 3 are registered for backward compatibility
|
121
|
+
for version in range(1, 4):
|
122
|
+
assert f"api/v{version}/users" in registered_routes, f"Missing route for v{version}: {registered_routes}"
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{django-api-versioning-0.1.1 → django-api-versioning-0.1.3}/django_api_versioning/__init__.py
RENAMED
File without changes
|
{django-api-versioning-0.1.1 → django-api-versioning-0.1.3}/django_api_versioning/exceptions.py
RENAMED
File without changes
|
{django-api-versioning-0.1.1 → django-api-versioning-0.1.3}/django_api_versioning/registry.py
RENAMED
File without changes
|
{django-api-versioning-0.1.1 → django-api-versioning-0.1.3}/django_api_versioning/settings.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|