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.
Files changed (28) hide show
  1. {django-api-versioning-0.1.2/django_api_versioning.egg-info → django-api-versioning-0.1.3}/PKG-INFO +1 -1
  2. {django-api-versioning-0.1.2 → django-api-versioning-0.1.3}/django_api_versioning/decorators.py +6 -0
  3. {django-api-versioning-0.1.2 → django-api-versioning-0.1.3/django_api_versioning.egg-info}/PKG-INFO +1 -1
  4. {django-api-versioning-0.1.2 → django-api-versioning-0.1.3}/setup.py +1 -1
  5. {django-api-versioning-0.1.2 → django-api-versioning-0.1.3}/tests/test_decorators.py +34 -0
  6. {django-api-versioning-0.1.2 → django-api-versioning-0.1.3}/.pre-commit-config.yaml +0 -0
  7. {django-api-versioning-0.1.2 → django-api-versioning-0.1.3}/LICENSE +0 -0
  8. {django-api-versioning-0.1.2 → django-api-versioning-0.1.3}/MANIFEST.in +0 -0
  9. {django-api-versioning-0.1.2 → django-api-versioning-0.1.3}/README.md +0 -0
  10. {django-api-versioning-0.1.2 → django-api-versioning-0.1.3}/django_api_versioning/__init__.py +0 -0
  11. {django-api-versioning-0.1.2 → django-api-versioning-0.1.3}/django_api_versioning/exceptions.py +0 -0
  12. {django-api-versioning-0.1.2 → django-api-versioning-0.1.3}/django_api_versioning/registry.py +0 -0
  13. {django-api-versioning-0.1.2 → django-api-versioning-0.1.3}/django_api_versioning/settings.py +0 -0
  14. {django-api-versioning-0.1.2 → django-api-versioning-0.1.3}/django_api_versioning/urls.py +0 -0
  15. {django-api-versioning-0.1.2 → django-api-versioning-0.1.3}/django_api_versioning.egg-info/SOURCES.txt +0 -0
  16. {django-api-versioning-0.1.2 → django-api-versioning-0.1.3}/django_api_versioning.egg-info/dependency_links.txt +0 -0
  17. {django-api-versioning-0.1.2 → django-api-versioning-0.1.3}/django_api_versioning.egg-info/requires.txt +0 -0
  18. {django-api-versioning-0.1.2 → django-api-versioning-0.1.3}/django_api_versioning.egg-info/top_level.txt +0 -0
  19. {django-api-versioning-0.1.2 → django-api-versioning-0.1.3}/pyproject.toml +0 -0
  20. {django-api-versioning-0.1.2 → django-api-versioning-0.1.3}/pytest.ini +0 -0
  21. {django-api-versioning-0.1.2 → django-api-versioning-0.1.3}/requirements-dev.txt +0 -0
  22. {django-api-versioning-0.1.2 → django-api-versioning-0.1.3}/requirements.txt +0 -0
  23. {django-api-versioning-0.1.2 → django-api-versioning-0.1.3}/setup.cfg +0 -0
  24. {django-api-versioning-0.1.2 → django-api-versioning-0.1.3}/tests/__init__.py +0 -0
  25. {django-api-versioning-0.1.2 → django-api-versioning-0.1.3}/tests/test_exceptions.py +0 -0
  26. {django-api-versioning-0.1.2 → django-api-versioning-0.1.3}/tests/test_registry.py +0 -0
  27. {django-api-versioning-0.1.2 → django-api-versioning-0.1.3}/tests/test_settings.py +0 -0
  28. {django-api-versioning-0.1.2 → django-api-versioning-0.1.3}/tests/test_urls.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: django-api-versioning
3
- Version: 0.1.2
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,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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: django-api-versioning
3
- Version: 0.1.2
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
@@ -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.2",
8
+ version="0.1.3",
9
9
  author="Mojtaba Arvin",
10
10
  author_email="ArvinDevDay@gmail.com",
11
11
  description= (
@@ -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}"