djresttoolkit 0.14.0__tar.gz → 0.16.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {djresttoolkit-0.14.0 → djresttoolkit-0.16.0}/PKG-INFO +121 -1
- {djresttoolkit-0.14.0 → djresttoolkit-0.16.0}/README.md +120 -0
- {djresttoolkit-0.14.0 → djresttoolkit-0.16.0}/pyproject.toml +1 -1
- djresttoolkit-0.16.0/src/djresttoolkit/pagination/__init__.py +4 -0
- djresttoolkit-0.16.0/src/djresttoolkit/pagination/_page_number_pagination.py +69 -0
- djresttoolkit-0.16.0/src/djresttoolkit/pagination/_paginated_data_builder.py +65 -0
- {djresttoolkit-0.14.0 → djresttoolkit-0.16.0}/.gitignore +0 -0
- {djresttoolkit-0.14.0 → djresttoolkit-0.16.0}/LICENSE +0 -0
- {djresttoolkit-0.14.0 → djresttoolkit-0.16.0}/demo/staticfiles/admin/img/LICENSE +0 -0
- {djresttoolkit-0.14.0 → djresttoolkit-0.16.0}/src/djresttoolkit/__init__.py +0 -0
- {djresttoolkit-0.14.0 → djresttoolkit-0.16.0}/src/djresttoolkit/admin.py +0 -0
- {djresttoolkit-0.14.0 → djresttoolkit-0.16.0}/src/djresttoolkit/apps.py +0 -0
- {djresttoolkit-0.14.0 → djresttoolkit-0.16.0}/src/djresttoolkit/dbseed/__init__.py +0 -0
- {djresttoolkit-0.14.0 → djresttoolkit-0.16.0}/src/djresttoolkit/dbseed/models/__init__.py +0 -0
- {djresttoolkit-0.14.0 → djresttoolkit-0.16.0}/src/djresttoolkit/dbseed/models/_choice_field.py +0 -0
- {djresttoolkit-0.14.0 → djresttoolkit-0.16.0}/src/djresttoolkit/dbseed/models/_gen.py +0 -0
- {djresttoolkit-0.14.0 → djresttoolkit-0.16.0}/src/djresttoolkit/dbseed/models/_seed_model.py +0 -0
- {djresttoolkit-0.14.0 → djresttoolkit-0.16.0}/src/djresttoolkit/envconfig/__init__.py +0 -0
- {djresttoolkit-0.14.0 → djresttoolkit-0.16.0}/src/djresttoolkit/envconfig/_env_settings.py +0 -0
- {djresttoolkit-0.14.0 → djresttoolkit-0.16.0}/src/djresttoolkit/mail/__init__.py +0 -0
- {djresttoolkit-0.14.0 → djresttoolkit-0.16.0}/src/djresttoolkit/mail/_email_sender.py +0 -0
- {djresttoolkit-0.14.0 → djresttoolkit-0.16.0}/src/djresttoolkit/mail/_models.py +0 -0
- {djresttoolkit-0.14.0 → djresttoolkit-0.16.0}/src/djresttoolkit/mail/_types.py +0 -0
- {djresttoolkit-0.14.0 → djresttoolkit-0.16.0}/src/djresttoolkit/management/__init__.py +0 -0
- {djresttoolkit-0.14.0 → djresttoolkit-0.16.0}/src/djresttoolkit/management/commands/__init__.py +0 -0
- {djresttoolkit-0.14.0 → djresttoolkit-0.16.0}/src/djresttoolkit/management/commands/dbflush.py +0 -0
- {djresttoolkit-0.14.0 → djresttoolkit-0.16.0}/src/djresttoolkit/management/commands/dbseed.py +0 -0
- {djresttoolkit-0.14.0 → djresttoolkit-0.16.0}/src/djresttoolkit/middlewares/__init__.py +0 -0
- {djresttoolkit-0.14.0 → djresttoolkit-0.16.0}/src/djresttoolkit/middlewares/_response_time_middleware.py +0 -0
- {djresttoolkit-0.14.0 → djresttoolkit-0.16.0}/src/djresttoolkit/migrations/__init__.py +0 -0
- {djresttoolkit-0.14.0 → djresttoolkit-0.16.0}/src/djresttoolkit/models/__init__.py +0 -0
- {djresttoolkit-0.14.0 → djresttoolkit-0.16.0}/src/djresttoolkit/models/mixins/__init__.py +0 -0
- {djresttoolkit-0.14.0 → djresttoolkit-0.16.0}/src/djresttoolkit/models/mixins/_model_choice_fields_mixin.py +0 -0
- {djresttoolkit-0.14.0 → djresttoolkit-0.16.0}/src/djresttoolkit/py.typed +0 -0
- {djresttoolkit-0.14.0 → djresttoolkit-0.16.0}/src/djresttoolkit/renderers/__init__.py +0 -0
- {djresttoolkit-0.14.0 → djresttoolkit-0.16.0}/src/djresttoolkit/renderers/_throttle_info_json_renderer.py +0 -0
- {djresttoolkit-0.14.0 → djresttoolkit-0.16.0}/src/djresttoolkit/serializers/__init__.py +0 -0
- {djresttoolkit-0.14.0 → djresttoolkit-0.16.0}/src/djresttoolkit/serializers/mixins/__init__.py +0 -0
- {djresttoolkit-0.14.0 → djresttoolkit-0.16.0}/src/djresttoolkit/serializers/mixins/_absolute_url_file_mixin.py +0 -0
- {djresttoolkit-0.14.0 → djresttoolkit-0.16.0}/src/djresttoolkit/serializers/mixins/_bulk_create_mixin.py +0 -0
- {djresttoolkit-0.14.0 → djresttoolkit-0.16.0}/src/djresttoolkit/throttling/__init__.py +0 -0
- {djresttoolkit-0.14.0 → djresttoolkit-0.16.0}/src/djresttoolkit/throttling/_throttle_inspector.py +0 -0
- {djresttoolkit-0.14.0 → djresttoolkit-0.16.0}/src/djresttoolkit/urls/__init__.py +0 -0
- {djresttoolkit-0.14.0 → djresttoolkit-0.16.0}/src/djresttoolkit/urls/_build_absolute_uri.py +0 -0
- {djresttoolkit-0.14.0 → djresttoolkit-0.16.0}/src/djresttoolkit/views/__init__.py +0 -0
- {djresttoolkit-0.14.0 → djresttoolkit-0.16.0}/src/djresttoolkit/views/_api_views/__init__.py +0 -0
- {djresttoolkit-0.14.0 → djresttoolkit-0.16.0}/src/djresttoolkit/views/_api_views/_choice_fields_apiview.py +0 -0
- {djresttoolkit-0.14.0 → djresttoolkit-0.16.0}/src/djresttoolkit/views/_exceptions/__init__.py +0 -0
- {djresttoolkit-0.14.0 → djresttoolkit-0.16.0}/src/djresttoolkit/views/_exceptions/_exception_handler.py +0 -0
- {djresttoolkit-0.14.0 → djresttoolkit-0.16.0}/src/djresttoolkit/views/mixins/__init__.py +0 -0
- {djresttoolkit-0.14.0 → djresttoolkit-0.16.0}/src/djresttoolkit/views/mixins/_retrieve_object_mixin.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: djresttoolkit
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.16.0
|
4
4
|
Summary: A collection of Django and DRF utilities to simplify API development.
|
5
5
|
Project-URL: Homepage, https://github.com/shaileshpandit141/djresttoolkit
|
6
6
|
Project-URL: Documentation, https://shaileshpandit141.github.io/djresttoolkit
|
@@ -871,6 +871,126 @@ def my_view(request: HttpRequest):
|
|
871
871
|
https://example.com/api/books/123/?ref=newsletter
|
872
872
|
```
|
873
873
|
|
874
|
+
### 14. PageNumberPagination — API Reference
|
875
|
+
|
876
|
+
```python
|
877
|
+
from djresttoolkit.pagination import PageNumberPagination
|
878
|
+
```
|
879
|
+
|
880
|
+
#### Description of Page Number Pagination
|
881
|
+
|
882
|
+
- Extends **DRF’s `PageNumberPagination`** with a **cleaner metadata structure**.
|
883
|
+
- Adds support for **dynamic page size** via the `page-size` query parameter.
|
884
|
+
- Returns pagination metadata inside a `"page"` object, separate from `"results"`.
|
885
|
+
|
886
|
+
#### Features of Page Number Pagination
|
887
|
+
|
888
|
+
- Clients can control items per page using `?page-size=`.
|
889
|
+
- Structured pagination metadata:
|
890
|
+
|
891
|
+
- `current` → current page number
|
892
|
+
- `total` → total number of pages
|
893
|
+
- `size` → number of items per page
|
894
|
+
- `total_items` → total number of items across all pages
|
895
|
+
- `next` → next page URL
|
896
|
+
- `previous` → previous page URL
|
897
|
+
- Standardized API response format.
|
898
|
+
|
899
|
+
### Attributes of Page Number Pagination
|
900
|
+
|
901
|
+
- `page_size_query_param: str` → Query parameter name (`"page-size"`).
|
902
|
+
|
903
|
+
### Page Number Pagination Methods
|
904
|
+
|
905
|
+
- `get_paginated_response(data: Any) -> Response`
|
906
|
+
Returns a JSON response with both pagination metadata and results.
|
907
|
+
|
908
|
+
### Example Response of Page Number Pagination
|
909
|
+
|
910
|
+
```json
|
911
|
+
{
|
912
|
+
"page": {
|
913
|
+
"current": 1,
|
914
|
+
"total": 10,
|
915
|
+
"size": 20,
|
916
|
+
"total_items": 200,
|
917
|
+
"next": "http://api.example.com/items/?page=2&page-size=20",
|
918
|
+
"previous": null
|
919
|
+
},
|
920
|
+
"results": [
|
921
|
+
{ "id": 1, "name": "Item 1" },
|
922
|
+
{ "id": 2, "name": "Item 2" }
|
923
|
+
]
|
924
|
+
}
|
925
|
+
```
|
926
|
+
|
927
|
+
### 15. PaginatedDataBuilder — API Reference
|
928
|
+
|
929
|
+
```python
|
930
|
+
from djresttoolkit.pagination import PaginatedDataBuilder
|
931
|
+
```
|
932
|
+
|
933
|
+
---
|
934
|
+
|
935
|
+
#### Description of Paginated Data Builder
|
936
|
+
|
937
|
+
- A **builder utility** to paginate and serialize Django QuerySets using DRF.
|
938
|
+
- Uses the custom **`PageNumberPagination`** class for consistent pagination responses.
|
939
|
+
- Designed for reusability inside DRF views and APIs.
|
940
|
+
|
941
|
+
#### Features of Paginated Data Builder
|
942
|
+
|
943
|
+
- Integrates with **DRF serializers**.
|
944
|
+
- Handles **invalid pages** gracefully by raising `NotFound`.
|
945
|
+
- Returns both:
|
946
|
+
- `"page"` → pagination metadata
|
947
|
+
- `"results"` → serialized data.
|
948
|
+
- Provides **structured pagination response format**.
|
949
|
+
|
950
|
+
---
|
951
|
+
|
952
|
+
#### Initialization of Paginated Data Builder
|
953
|
+
|
954
|
+
```python
|
955
|
+
builder = PaginatedDataBuilder(
|
956
|
+
request=request,
|
957
|
+
serializer_class=MySerializer,
|
958
|
+
queryset=MyModel.objects.all()
|
959
|
+
)
|
960
|
+
```
|
961
|
+
|
962
|
+
- `request: Request` → DRF request object.
|
963
|
+
- `serializer_class: type[BaseSerializer]` → DRF serializer class for the model.
|
964
|
+
- `queryset: QuerySet` → Django queryset to paginate.
|
965
|
+
|
966
|
+
### Paginated Data Builder Methods
|
967
|
+
|
968
|
+
- `get_paginated_data() -> dict[str, Any]`
|
969
|
+
|
970
|
+
- Applies pagination to the queryset.
|
971
|
+
- Serializes the paginated results.
|
972
|
+
- Returns a dictionary with `"page"` and `"results"`.
|
973
|
+
- Raises `NotFound` if no page data is found.
|
974
|
+
|
975
|
+
### Example Response of Paginated Data Builder
|
976
|
+
|
977
|
+
```json
|
978
|
+
{
|
979
|
+
"page": {
|
980
|
+
"current": 2,
|
981
|
+
"total": 5,
|
982
|
+
"size": 20,
|
983
|
+
"total_items": 100,
|
984
|
+
"next": "http://api.example.com/items/?page=3&page-size=20",
|
985
|
+
"previous": "http://api.example.com/items/?page=1&page-size=20"
|
986
|
+
},
|
987
|
+
"results": [
|
988
|
+
{ "id": 21, "name": "Item 21" },
|
989
|
+
{ "id": 22, "name": "Item 22" }
|
990
|
+
]
|
991
|
+
}
|
992
|
+
```
|
993
|
+
|
874
994
|
## 🛠️ Planned Features
|
875
995
|
|
876
996
|
- Add more utils
|
@@ -813,6 +813,126 @@ def my_view(request: HttpRequest):
|
|
813
813
|
https://example.com/api/books/123/?ref=newsletter
|
814
814
|
```
|
815
815
|
|
816
|
+
### 14. PageNumberPagination — API Reference
|
817
|
+
|
818
|
+
```python
|
819
|
+
from djresttoolkit.pagination import PageNumberPagination
|
820
|
+
```
|
821
|
+
|
822
|
+
#### Description of Page Number Pagination
|
823
|
+
|
824
|
+
- Extends **DRF’s `PageNumberPagination`** with a **cleaner metadata structure**.
|
825
|
+
- Adds support for **dynamic page size** via the `page-size` query parameter.
|
826
|
+
- Returns pagination metadata inside a `"page"` object, separate from `"results"`.
|
827
|
+
|
828
|
+
#### Features of Page Number Pagination
|
829
|
+
|
830
|
+
- Clients can control items per page using `?page-size=`.
|
831
|
+
- Structured pagination metadata:
|
832
|
+
|
833
|
+
- `current` → current page number
|
834
|
+
- `total` → total number of pages
|
835
|
+
- `size` → number of items per page
|
836
|
+
- `total_items` → total number of items across all pages
|
837
|
+
- `next` → next page URL
|
838
|
+
- `previous` → previous page URL
|
839
|
+
- Standardized API response format.
|
840
|
+
|
841
|
+
### Attributes of Page Number Pagination
|
842
|
+
|
843
|
+
- `page_size_query_param: str` → Query parameter name (`"page-size"`).
|
844
|
+
|
845
|
+
### Page Number Pagination Methods
|
846
|
+
|
847
|
+
- `get_paginated_response(data: Any) -> Response`
|
848
|
+
Returns a JSON response with both pagination metadata and results.
|
849
|
+
|
850
|
+
### Example Response of Page Number Pagination
|
851
|
+
|
852
|
+
```json
|
853
|
+
{
|
854
|
+
"page": {
|
855
|
+
"current": 1,
|
856
|
+
"total": 10,
|
857
|
+
"size": 20,
|
858
|
+
"total_items": 200,
|
859
|
+
"next": "http://api.example.com/items/?page=2&page-size=20",
|
860
|
+
"previous": null
|
861
|
+
},
|
862
|
+
"results": [
|
863
|
+
{ "id": 1, "name": "Item 1" },
|
864
|
+
{ "id": 2, "name": "Item 2" }
|
865
|
+
]
|
866
|
+
}
|
867
|
+
```
|
868
|
+
|
869
|
+
### 15. PaginatedDataBuilder — API Reference
|
870
|
+
|
871
|
+
```python
|
872
|
+
from djresttoolkit.pagination import PaginatedDataBuilder
|
873
|
+
```
|
874
|
+
|
875
|
+
---
|
876
|
+
|
877
|
+
#### Description of Paginated Data Builder
|
878
|
+
|
879
|
+
- A **builder utility** to paginate and serialize Django QuerySets using DRF.
|
880
|
+
- Uses the custom **`PageNumberPagination`** class for consistent pagination responses.
|
881
|
+
- Designed for reusability inside DRF views and APIs.
|
882
|
+
|
883
|
+
#### Features of Paginated Data Builder
|
884
|
+
|
885
|
+
- Integrates with **DRF serializers**.
|
886
|
+
- Handles **invalid pages** gracefully by raising `NotFound`.
|
887
|
+
- Returns both:
|
888
|
+
- `"page"` → pagination metadata
|
889
|
+
- `"results"` → serialized data.
|
890
|
+
- Provides **structured pagination response format**.
|
891
|
+
|
892
|
+
---
|
893
|
+
|
894
|
+
#### Initialization of Paginated Data Builder
|
895
|
+
|
896
|
+
```python
|
897
|
+
builder = PaginatedDataBuilder(
|
898
|
+
request=request,
|
899
|
+
serializer_class=MySerializer,
|
900
|
+
queryset=MyModel.objects.all()
|
901
|
+
)
|
902
|
+
```
|
903
|
+
|
904
|
+
- `request: Request` → DRF request object.
|
905
|
+
- `serializer_class: type[BaseSerializer]` → DRF serializer class for the model.
|
906
|
+
- `queryset: QuerySet` → Django queryset to paginate.
|
907
|
+
|
908
|
+
### Paginated Data Builder Methods
|
909
|
+
|
910
|
+
- `get_paginated_data() -> dict[str, Any]`
|
911
|
+
|
912
|
+
- Applies pagination to the queryset.
|
913
|
+
- Serializes the paginated results.
|
914
|
+
- Returns a dictionary with `"page"` and `"results"`.
|
915
|
+
- Raises `NotFound` if no page data is found.
|
916
|
+
|
917
|
+
### Example Response of Paginated Data Builder
|
918
|
+
|
919
|
+
```json
|
920
|
+
{
|
921
|
+
"page": {
|
922
|
+
"current": 2,
|
923
|
+
"total": 5,
|
924
|
+
"size": 20,
|
925
|
+
"total_items": 100,
|
926
|
+
"next": "http://api.example.com/items/?page=3&page-size=20",
|
927
|
+
"previous": "http://api.example.com/items/?page=1&page-size=20"
|
928
|
+
},
|
929
|
+
"results": [
|
930
|
+
{ "id": 21, "name": "Item 21" },
|
931
|
+
{ "id": 22, "name": "Item 22" }
|
932
|
+
]
|
933
|
+
}
|
934
|
+
```
|
935
|
+
|
816
936
|
## 🛠️ Planned Features
|
817
937
|
|
818
938
|
- Add more utils
|
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
[project]
|
6
6
|
name = "djresttoolkit"
|
7
|
-
version = "0.
|
7
|
+
version = "0.16.0"
|
8
8
|
description = "A collection of Django and DRF utilities to simplify API development."
|
9
9
|
readme = { file = "README.md", content-type = "text/markdown" }
|
10
10
|
license = { file = "LICENSE" }
|
@@ -0,0 +1,69 @@
|
|
1
|
+
from typing import Any
|
2
|
+
|
3
|
+
from rest_framework.exceptions import ValidationError
|
4
|
+
from rest_framework.pagination import PageNumberPagination as DrfPageNumberPagination
|
5
|
+
from rest_framework.response import Response
|
6
|
+
|
7
|
+
|
8
|
+
class PageNumberPagination(DrfPageNumberPagination):
|
9
|
+
"""
|
10
|
+
Custom PageNumberPagination for Django REST Framework.
|
11
|
+
|
12
|
+
This pagination class extends DRF's PageNumberPagination to provide:
|
13
|
+
- Dynamic page size support via the "page-size" query parameter.
|
14
|
+
- A streamlined, structured pagination metadata format in API responses.
|
15
|
+
|
16
|
+
Features:
|
17
|
+
- Clients can control the number of items per page using the "page-size" query parameter.
|
18
|
+
- The paginated response includes a "page" object with detailed pagination metadata and a "results" list.
|
19
|
+
|
20
|
+
Paginated Response Example:
|
21
|
+
```
|
22
|
+
{
|
23
|
+
"page": {
|
24
|
+
"current": 1,
|
25
|
+
"total": 10,
|
26
|
+
"size": 20,
|
27
|
+
"total_items": 200,
|
28
|
+
"next": "http://api.example.com/items/?page=2&page-size=20",
|
29
|
+
"previous": null
|
30
|
+
},
|
31
|
+
"results": [ ... ]
|
32
|
+
}
|
33
|
+
```
|
34
|
+
|
35
|
+
Attributes:
|
36
|
+
page_size_query_param (str): Query parameter name for dynamic page size ("page-size").
|
37
|
+
|
38
|
+
Methods:
|
39
|
+
get_paginated_response(data: Any) -> Response:
|
40
|
+
Returns a standardized paginated response with metadata and results.
|
41
|
+
|
42
|
+
"""
|
43
|
+
|
44
|
+
# Allow clients to set page size via ?page-size=
|
45
|
+
page_size_query_param = "page-size"
|
46
|
+
|
47
|
+
def get_paginated_response(self, data: Any) -> Response:
|
48
|
+
page = getattr(self, "page", None)
|
49
|
+
paginator = getattr(self, "paginator", None)
|
50
|
+
request = getattr(self, "request", None)
|
51
|
+
if page is None or paginator is None or request is None:
|
52
|
+
raise ValidationError(
|
53
|
+
{"detail": "Pagination has not been properly configured."}
|
54
|
+
)
|
55
|
+
|
56
|
+
items_per_page = self.get_page_size(request)
|
57
|
+
return Response(
|
58
|
+
{
|
59
|
+
"page": {
|
60
|
+
"current": page.number,
|
61
|
+
"total": paginator.num_pages,
|
62
|
+
"size": items_per_page,
|
63
|
+
"total_items": paginator.count,
|
64
|
+
"next": self.get_next_link(),
|
65
|
+
"previous": self.get_previous_link(),
|
66
|
+
},
|
67
|
+
"results": data,
|
68
|
+
}
|
69
|
+
)
|
@@ -0,0 +1,65 @@
|
|
1
|
+
import logging
|
2
|
+
from typing import Any
|
3
|
+
|
4
|
+
from django.db.models import QuerySet
|
5
|
+
from rest_framework.exceptions import NotFound
|
6
|
+
from rest_framework.request import Request
|
7
|
+
from rest_framework.serializers import BaseSerializer
|
8
|
+
from django.db.models import Model
|
9
|
+
from ._page_number_pagination import PageNumberPagination
|
10
|
+
|
11
|
+
# Get logger from logging.
|
12
|
+
logger = logging.getLogger(__name__)
|
13
|
+
|
14
|
+
|
15
|
+
class PaginatedDataBuilder[T: Model]:
|
16
|
+
"""Builder class to handle pagination and serialization."""
|
17
|
+
|
18
|
+
def __init__(
|
19
|
+
self,
|
20
|
+
request: Request,
|
21
|
+
serializer_class: type[BaseSerializer[T]],
|
22
|
+
queryset: QuerySet[T],
|
23
|
+
) -> None:
|
24
|
+
"""Initilize the PaginatedDataBuilder class."""
|
25
|
+
self.request = request
|
26
|
+
self.serializer_class = serializer_class
|
27
|
+
self.queryset = queryset
|
28
|
+
|
29
|
+
def get_paginated_data(self) -> dict[str, Any]:
|
30
|
+
"""Paginate and serialize the queryset."""
|
31
|
+
|
32
|
+
logger.debug("Starting pagination with custom PageNumberPagination.")
|
33
|
+
paginator = PageNumberPagination()
|
34
|
+
page = paginator.paginate_queryset(
|
35
|
+
self.queryset,
|
36
|
+
self.request,
|
37
|
+
)
|
38
|
+
|
39
|
+
# If no data is returned from pagination, raise NotFound
|
40
|
+
if page is None:
|
41
|
+
logger.warning("No data returned from pagination. Possibly invalid page.")
|
42
|
+
raise NotFound("The requested records were not found.")
|
43
|
+
|
44
|
+
# Serialize the paginated data
|
45
|
+
serializer = self.serializer_class(
|
46
|
+
instance=page, # type: ignore
|
47
|
+
many=True,
|
48
|
+
context={"request": self.request},
|
49
|
+
)
|
50
|
+
|
51
|
+
# Construct the paginated response
|
52
|
+
paginated_data = {
|
53
|
+
"page": {
|
54
|
+
"current": paginator.page.number, # type: ignore
|
55
|
+
"total": paginator.page.paginator.num_pages, # type: ignore
|
56
|
+
"size": paginator.get_page_size(self.request),
|
57
|
+
"total_items": paginator.page.paginator.count, # type: ignore
|
58
|
+
"next": paginator.get_next_link(),
|
59
|
+
"previous": paginator.get_previous_link(),
|
60
|
+
},
|
61
|
+
"results": serializer.data,
|
62
|
+
}
|
63
|
+
|
64
|
+
logger.debug(f"Pagination result: {paginated_data}")
|
65
|
+
return paginated_data
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{djresttoolkit-0.14.0 → djresttoolkit-0.16.0}/src/djresttoolkit/dbseed/models/_choice_field.py
RENAMED
File without changes
|
File without changes
|
{djresttoolkit-0.14.0 → djresttoolkit-0.16.0}/src/djresttoolkit/dbseed/models/_seed_model.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
|
{djresttoolkit-0.14.0 → djresttoolkit-0.16.0}/src/djresttoolkit/management/commands/__init__.py
RENAMED
File without changes
|
{djresttoolkit-0.14.0 → djresttoolkit-0.16.0}/src/djresttoolkit/management/commands/dbflush.py
RENAMED
File without changes
|
{djresttoolkit-0.14.0 → djresttoolkit-0.16.0}/src/djresttoolkit/management/commands/dbseed.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
|
{djresttoolkit-0.14.0 → djresttoolkit-0.16.0}/src/djresttoolkit/serializers/mixins/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{djresttoolkit-0.14.0 → djresttoolkit-0.16.0}/src/djresttoolkit/throttling/_throttle_inspector.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{djresttoolkit-0.14.0 → djresttoolkit-0.16.0}/src/djresttoolkit/views/_api_views/__init__.py
RENAMED
File without changes
|
File without changes
|
{djresttoolkit-0.14.0 → djresttoolkit-0.16.0}/src/djresttoolkit/views/_exceptions/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|