django-api-versioning 0.1.2__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.2/django_api_versioning.egg-info → django-api-versioning-0.1.3}/PKG-INFO +1 -1
- {django-api-versioning-0.1.2 → django-api-versioning-0.1.3}/django_api_versioning/decorators.py +6 -0
- {django-api-versioning-0.1.2 → django-api-versioning-0.1.3/django_api_versioning.egg-info}/PKG-INFO +1 -1
- {django-api-versioning-0.1.2 → django-api-versioning-0.1.3}/setup.py +1 -1
- {django-api-versioning-0.1.2 → django-api-versioning-0.1.3}/tests/test_decorators.py +34 -0
- {django-api-versioning-0.1.2 → django-api-versioning-0.1.3}/.pre-commit-config.yaml +0 -0
- {django-api-versioning-0.1.2 → django-api-versioning-0.1.3}/LICENSE +0 -0
- {django-api-versioning-0.1.2 → django-api-versioning-0.1.3}/MANIFEST.in +0 -0
- {django-api-versioning-0.1.2 → django-api-versioning-0.1.3}/README.md +0 -0
- {django-api-versioning-0.1.2 → django-api-versioning-0.1.3}/django_api_versioning/__init__.py +0 -0
- {django-api-versioning-0.1.2 → django-api-versioning-0.1.3}/django_api_versioning/exceptions.py +0 -0
- {django-api-versioning-0.1.2 → django-api-versioning-0.1.3}/django_api_versioning/registry.py +0 -0
- {django-api-versioning-0.1.2 → django-api-versioning-0.1.3}/django_api_versioning/settings.py +0 -0
- {django-api-versioning-0.1.2 → django-api-versioning-0.1.3}/django_api_versioning/urls.py +0 -0
- {django-api-versioning-0.1.2 → django-api-versioning-0.1.3}/django_api_versioning.egg-info/SOURCES.txt +0 -0
- {django-api-versioning-0.1.2 → django-api-versioning-0.1.3}/django_api_versioning.egg-info/dependency_links.txt +0 -0
- {django-api-versioning-0.1.2 → django-api-versioning-0.1.3}/django_api_versioning.egg-info/requires.txt +0 -0
- {django-api-versioning-0.1.2 → django-api-versioning-0.1.3}/django_api_versioning.egg-info/top_level.txt +0 -0
- {django-api-versioning-0.1.2 → django-api-versioning-0.1.3}/pyproject.toml +0 -0
- {django-api-versioning-0.1.2 → django-api-versioning-0.1.3}/pytest.ini +0 -0
- {django-api-versioning-0.1.2 → django-api-versioning-0.1.3}/requirements-dev.txt +0 -0
- {django-api-versioning-0.1.2 → django-api-versioning-0.1.3}/requirements.txt +0 -0
- {django-api-versioning-0.1.2 → django-api-versioning-0.1.3}/setup.cfg +0 -0
- {django-api-versioning-0.1.2 → django-api-versioning-0.1.3}/tests/__init__.py +0 -0
- {django-api-versioning-0.1.2 → django-api-versioning-0.1.3}/tests/test_exceptions.py +0 -0
- {django-api-versioning-0.1.2 → django-api-versioning-0.1.3}/tests/test_registry.py +0 -0
- {django-api-versioning-0.1.2 → django-api-versioning-0.1.3}/tests/test_settings.py +0 -0
- {django-api-versioning-0.1.2 → django-api-versioning-0.1.3}/tests/test_urls.py +0 -0
{django-api-versioning-0.1.2/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
|
{django-api-versioning-0.1.2 → 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.2 → 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
|
@@ -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.2 → django-api-versioning-0.1.3}/django_api_versioning/__init__.py
RENAMED
File without changes
|
{django-api-versioning-0.1.2 → django-api-versioning-0.1.3}/django_api_versioning/exceptions.py
RENAMED
File without changes
|
{django-api-versioning-0.1.2 → django-api-versioning-0.1.3}/django_api_versioning/registry.py
RENAMED
File without changes
|
{django-api-versioning-0.1.2 → 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
|