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.
Files changed (28) hide show
  1. {django-api-versioning-0.1.1/django_api_versioning.egg-info → django-api-versioning-0.1.3}/PKG-INFO +2 -2
  2. {django-api-versioning-0.1.1 → django-api-versioning-0.1.3}/django_api_versioning/decorators.py +6 -0
  3. {django-api-versioning-0.1.1 → django-api-versioning-0.1.3/django_api_versioning.egg-info}/PKG-INFO +2 -2
  4. {django-api-versioning-0.1.1 → django-api-versioning-0.1.3}/setup.py +2 -2
  5. {django-api-versioning-0.1.1 → django-api-versioning-0.1.3}/tests/test_decorators.py +34 -0
  6. {django-api-versioning-0.1.1 → django-api-versioning-0.1.3}/.pre-commit-config.yaml +0 -0
  7. {django-api-versioning-0.1.1 → django-api-versioning-0.1.3}/LICENSE +0 -0
  8. {django-api-versioning-0.1.1 → django-api-versioning-0.1.3}/MANIFEST.in +0 -0
  9. {django-api-versioning-0.1.1 → django-api-versioning-0.1.3}/README.md +0 -0
  10. {django-api-versioning-0.1.1 → django-api-versioning-0.1.3}/django_api_versioning/__init__.py +0 -0
  11. {django-api-versioning-0.1.1 → django-api-versioning-0.1.3}/django_api_versioning/exceptions.py +0 -0
  12. {django-api-versioning-0.1.1 → django-api-versioning-0.1.3}/django_api_versioning/registry.py +0 -0
  13. {django-api-versioning-0.1.1 → django-api-versioning-0.1.3}/django_api_versioning/settings.py +0 -0
  14. {django-api-versioning-0.1.1 → django-api-versioning-0.1.3}/django_api_versioning/urls.py +0 -0
  15. {django-api-versioning-0.1.1 → django-api-versioning-0.1.3}/django_api_versioning.egg-info/SOURCES.txt +0 -0
  16. {django-api-versioning-0.1.1 → django-api-versioning-0.1.3}/django_api_versioning.egg-info/dependency_links.txt +0 -0
  17. {django-api-versioning-0.1.1 → django-api-versioning-0.1.3}/django_api_versioning.egg-info/requires.txt +0 -0
  18. {django-api-versioning-0.1.1 → django-api-versioning-0.1.3}/django_api_versioning.egg-info/top_level.txt +0 -0
  19. {django-api-versioning-0.1.1 → django-api-versioning-0.1.3}/pyproject.toml +0 -0
  20. {django-api-versioning-0.1.1 → django-api-versioning-0.1.3}/pytest.ini +0 -0
  21. {django-api-versioning-0.1.1 → django-api-versioning-0.1.3}/requirements-dev.txt +0 -0
  22. {django-api-versioning-0.1.1 → django-api-versioning-0.1.3}/requirements.txt +0 -0
  23. {django-api-versioning-0.1.1 → django-api-versioning-0.1.3}/setup.cfg +0 -0
  24. {django-api-versioning-0.1.1 → django-api-versioning-0.1.3}/tests/__init__.py +0 -0
  25. {django-api-versioning-0.1.1 → django-api-versioning-0.1.3}/tests/test_exceptions.py +0 -0
  26. {django-api-versioning-0.1.1 → django-api-versioning-0.1.3}/tests/test_registry.py +0 -0
  27. {django-api-versioning-0.1.1 → django-api-versioning-0.1.3}/tests/test_settings.py +0 -0
  28. {django-api-versioning-0.1.1 → 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.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.9
18
+ Requires-Python: >=3.6
19
19
  Description-Content-Type: text/markdown
20
20
  Provides-Extra: dev
21
21
  License-File: LICENSE
@@ -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.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.9
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.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.9",
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}"