base-api-utils 1.1.103__tar.gz → 1.1.105__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.
Files changed (107) hide show
  1. {base_api_utils-1.1.103/src/base_api_utils.egg-info → base_api_utils-1.1.105}/PKG-INFO +1 -1
  2. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/pyproject.toml +1 -1
  3. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/security/shared.py +1 -2
  4. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/utils/expand_queryset_optimization_mixin.py +3 -2
  5. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/views/base_view.py +4 -1
  6. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/views/parent_children_crud.py +6 -3
  7. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/views/root_entity_crud.py +6 -3
  8. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/views/tasks_result_view.py +2 -1
  9. {base_api_utils-1.1.103 → base_api_utils-1.1.105/src/base_api_utils.egg-info}/PKG-INFO +1 -1
  10. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/LICENSE +0 -0
  11. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/README.md +0 -0
  12. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/setup.cfg +0 -0
  13. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/__init__.py +0 -0
  14. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/commands/__init__.py +0 -0
  15. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/commands/failed_task_management_mixin.py +0 -0
  16. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/domain/__init__.py +0 -0
  17. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/domain/event_message.py +0 -0
  18. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/domain/event_message_factory.py +0 -0
  19. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/domain/events.py +0 -0
  20. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/dtos/__init__.py +0 -0
  21. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/dtos/authz_user.py +0 -0
  22. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/fields/__init__.py +0 -0
  23. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/fields/email_list_field.py +0 -0
  24. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/filters/__init__.py +0 -0
  25. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/filters/base_filter.py +0 -0
  26. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/filters/custom_ordering_filter.py +0 -0
  27. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/filters/filter_utils_mixin.py +0 -0
  28. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/handlers/__init__.py +0 -0
  29. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/handlers/base_event_handler.py +0 -0
  30. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/handlers/sponsor_event_handler.py +0 -0
  31. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/handlers/sponsorship_addon_event_handler.py +0 -0
  32. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/handlers/sponsorship_event_handler.py +0 -0
  33. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/handlers/summit_event_handler.py +0 -0
  34. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/ioc/__init__.py +0 -0
  35. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/ioc/container.py +0 -0
  36. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/models/__init__.py +0 -0
  37. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/models/item_image.py +0 -0
  38. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/security/__init__.py +0 -0
  39. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/security/abstract_access_token_service.py +0 -0
  40. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/security/abstract_oauth2_api_client.py +0 -0
  41. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/security/access_token_service.py +0 -0
  42. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/security/check_sponsor_user_permissions.py +0 -0
  43. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/security/group_required.py +0 -0
  44. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/security/oauth2_authentication.py +0 -0
  45. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/security/oauth2_client_factory.py +0 -0
  46. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/security/oauth2_scope_required.py +0 -0
  47. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/security/permission_event_handler.py +0 -0
  48. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/security/user_permissions_service.py +0 -0
  49. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/serializers/__init__.py +0 -0
  50. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/serializers/base_model_serializer.py +0 -0
  51. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/serializers/email_list_char_field.py +0 -0
  52. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/serializers/nullable_slug_related_field.py +0 -0
  53. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/serializers/serializers_registry.py +0 -0
  54. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/serializers/task_result_serializer.py +0 -0
  55. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/serializers/timestamp_field.py +0 -0
  56. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/serializers/v2/__init__.py +0 -0
  57. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/serializers/v2/abstract_serializer.py +0 -0
  58. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/serializers/v2/base_model_serializer.py +0 -0
  59. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/serializers/v2/expands.py +0 -0
  60. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/serializers/v2/query_params.py +0 -0
  61. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/services/__init__.py +0 -0
  62. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/services/abstract_domain_events_service.py +0 -0
  63. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/services/abstract_event_dispatcher.py +0 -0
  64. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/services/abstract_images_service.py +0 -0
  65. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/services/abstract_sponsor_metadata_service.py +0 -0
  66. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/services/abstract_storage_service.py +0 -0
  67. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/services/abstract_summit_metadata_service.py +0 -0
  68. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/services/amqp_service.py +0 -0
  69. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/services/celery_failed.py +0 -0
  70. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/services/event_dispatcher.py +0 -0
  71. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/services/images_service.py +0 -0
  72. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/services/s3_service.py +0 -0
  73. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/services/strategies/__init__.py +0 -0
  74. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/services/strategies/abstract_task_runner_strategy.py +0 -0
  75. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/services/strategies/publish_domain_event_strategy.py +0 -0
  76. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/tests/__init__.py +0 -0
  77. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/tests/test_failed_celery_task_management.py +0 -0
  78. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/urls.py +0 -0
  79. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/utils/__init__.py +0 -0
  80. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/utils/async_helpers.py +0 -0
  81. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/utils/circuit_breaker.py +0 -0
  82. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/utils/config.py +0 -0
  83. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/utils/custom_auto_schema.py +0 -0
  84. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/utils/db_connection_helpers.py +0 -0
  85. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/utils/debounce_helpers.py +0 -0
  86. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/utils/enums.py +0 -0
  87. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/utils/env_var_eval.py +0 -0
  88. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/utils/exceptions.py +0 -0
  89. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/utils/external_errors.py +0 -0
  90. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/utils/file_lock.py +0 -0
  91. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/utils/fingerprint_helpers.py +0 -0
  92. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/utils/http_helpers.py +0 -0
  93. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/utils/inject_job.py +0 -0
  94. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/utils/model_helpers.py +0 -0
  95. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/utils/oauth2_custom_schema_base.py +0 -0
  96. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/utils/pagination.py +0 -0
  97. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/utils/rate_utils.py +0 -0
  98. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/utils/read_write_serializer_mixin.py +0 -0
  99. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/utils/serializers.py +0 -0
  100. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/utils/service_utils.py +0 -0
  101. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/utils/string.py +0 -0
  102. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/utils/tests.py +0 -0
  103. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils/views/__init__.py +0 -0
  104. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils.egg-info/SOURCES.txt +0 -0
  105. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils.egg-info/dependency_links.txt +0 -0
  106. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils.egg-info/requires.txt +0 -0
  107. {base_api_utils-1.1.103 → base_api_utils-1.1.105}/src/base_api_utils.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: base-api-utils
3
- Version: 1.1.103
3
+ Version: 1.1.105
4
4
  Summary: Django Rest Framework micro services common utilities
5
5
  Author-email: Román Gutierrez <roman@tipit.net>, Sebastian Marcet <sebastian@tipit.net>
6
6
  Project-URL: Homepage, https://github.com/fntechgit/base-api-utils
@@ -7,7 +7,7 @@ where = ["src"]
7
7
 
8
8
  [project]
9
9
  name = "base-api-utils"
10
- version = "1.1.103"
10
+ version = "1.1.105"
11
11
  dependencies = [
12
12
  "boto3",
13
13
  "celery",
@@ -11,8 +11,7 @@ _PATH_PARAMETER_COMPONENT_RE = re.compile(
11
11
  def get_path(request) -> str:
12
12
  path = simplify_regex(request.resolver_match.route)
13
13
  # Strip Django 2.0 convertors as they are incompatible with uritemplate format
14
- path = re.sub(_PATH_PARAMETER_COMPONENT_RE, r'{\g<parameter>}', path)
15
- return path.replace('{pk}', '{id}')
14
+ return re.sub(_PATH_PARAMETER_COMPONENT_RE, r'{\g<parameter>}', path)
16
15
 
17
16
  client_secret_basic_auth_method = 'client_secret_basic'
18
17
 
@@ -2,14 +2,15 @@ from typing import Any, Iterable, List, Set, Tuple
2
2
 
3
3
  from rest_framework.response import Response
4
4
 
5
- from ..serializers.v2.query_params import (
5
+ from base_api_utils.serializers.v2.query_params import (
6
6
  parse_request_trees,
7
7
  should_expand,
8
8
  subtree,
9
9
  )
10
10
 
11
11
  class ExpandQuerysetOptimizationMixin:
12
- """Auto-optimizes queryset from serializer.expand_mappings (recursive), plus runs bulk hooks for computed relations."""
12
+ # Auto-optimizes queryset from serializer.expand_mappings (recursive),
13
+ # plus runs bulk hooks for computed relations."""
13
14
 
14
15
  def _parse_trees(self):
15
16
  return parse_request_trees(self.request)
@@ -6,6 +6,10 @@ from ..utils import config, ReadWriteSerializerMixin, ExpandQuerysetOptimization
6
6
  class BaseView(ReadWriteSerializerMixin, ExpandQuerysetOptimizationMixin, ModelViewSet):
7
7
  ordering_fields = {}
8
8
 
9
+ lookup_field = 'id'
10
+
11
+ serializer_class = ReadWriteSerializerMixin
12
+
9
13
  def get_queryset(self):
10
14
  return self.queryset
11
15
 
@@ -39,5 +43,4 @@ class BaseView(ReadWriteSerializerMixin, ExpandQuerysetOptimizationMixin, ModelV
39
43
  if ordering_fields:
40
44
  queryset = queryset.order_by(*ordering_fields)
41
45
 
42
-
43
46
  return queryset
@@ -62,8 +62,9 @@ class ParentChildrenCRUDView(BaseView):
62
62
 
63
63
  @oauth2_scope_required()
64
64
  @group_required()
65
- def retrieve(self, request, pk=None, *args, **kwargs):
65
+ def retrieve(self, request, *args, **kwargs):
66
66
  parent = self._get_parent_or_404()
67
+ pk = self.kwargs.get(self.lookup_field)
67
68
  child = self._get_child_by_id(parent, pk)
68
69
  serializer = self.get_serializer(child)
69
70
  return Response(serializer.data, status=status.HTTP_200_OK)
@@ -80,18 +81,20 @@ class ParentChildrenCRUDView(BaseView):
80
81
 
81
82
  @oauth2_scope_required()
82
83
  @group_required()
83
- def update(self, request, pk=None, *args, **kwargs):
84
+ def update(self, request, *args, **kwargs):
84
85
  parent = self._get_parent_or_404()
85
86
  instance = self.get_object()
86
87
  serializer = self.get_serializer(instance, data=request.data, partial=True)
87
88
  serializer.is_valid(raise_exception=True)
89
+ pk = self.kwargs.get(self.lookup_field)
88
90
  item_child = self._update_child(parent, pk, serializer.validated_data)
89
91
  response_serializer = self.get_serializer(item_child)
90
92
  return Response(response_serializer.data, status=status.HTTP_200_OK)
91
93
 
92
94
  @oauth2_scope_required()
93
95
  @group_required()
94
- def destroy(self, request, pk=None, *args, **kwargs):
96
+ def destroy(self, request, *args, **kwargs):
95
97
  parent = self._get_parent_or_404()
98
+ pk = self.kwargs.get(self.lookup_field)
96
99
  self._delete_child(parent, pk)
97
100
  return Response(status=status.HTTP_204_NO_CONTENT)
@@ -54,7 +54,8 @@ class RootEntityCRUDView(BaseView):
54
54
 
55
55
  @oauth2_scope_required()
56
56
  @group_required()
57
- def retrieve(self, request, pk=None, *args, **kwargs):
57
+ def retrieve(self, request, *args, **kwargs):
58
+ pk = self.kwargs.get(self.lookup_field)
58
59
  entity = self._get_by_id(pk)
59
60
  serializer = self.get_serializer(entity)
60
61
  return Response(serializer.data, status=status.HTTP_200_OK)
@@ -70,16 +71,18 @@ class RootEntityCRUDView(BaseView):
70
71
 
71
72
  @oauth2_scope_required()
72
73
  @group_required()
73
- def update(self, request, pk=None, *args, **kwargs):
74
+ def update(self, request, *args, **kwargs):
74
75
  instance = self.get_object()
75
76
  serializer = self.get_serializer(instance, data=request.data, partial=True)
76
77
  serializer.is_valid(raise_exception=True)
78
+ pk = self.kwargs.get(self.lookup_field)
77
79
  entity = self._update(pk, serializer.validated_data)
78
80
  response_serializer = self.get_serializer(entity)
79
81
  return Response(response_serializer.data, status=status.HTTP_200_OK)
80
82
 
81
83
  @oauth2_scope_required()
82
84
  @group_required()
83
- def destroy(self, request, pk=None, *args, **kwargs):
85
+ def destroy(self, request, *args, **kwargs):
86
+ pk = self.kwargs.get(self.lookup_field)
84
87
  self._delete(pk)
85
88
  return Response(status=status.HTTP_204_NO_CONTENT)
@@ -16,8 +16,9 @@ class TasksResultAPIView(viewsets.ReadOnlyModelViewSet):
16
16
 
17
17
  @oauth2_scope_required()
18
18
  @group_required()
19
- def retry(self, request, pk=None, *args, **kwargs):
19
+ def retry(self, request, *args, **kwargs):
20
20
  """Rerun a failed task manually"""
21
+ pk = self.kwargs.get(self.lookup_field)
21
22
  task_result = self.get_queryset().filter(task_id=pk).first()
22
23
  if not task_result:
23
24
  return Response({"error": "Task not registered as failed"}, status=status.HTTP_404_NOT_FOUND)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: base-api-utils
3
- Version: 1.1.103
3
+ Version: 1.1.105
4
4
  Summary: Django Rest Framework micro services common utilities
5
5
  Author-email: Román Gutierrez <roman@tipit.net>, Sebastian Marcet <sebastian@tipit.net>
6
6
  Project-URL: Homepage, https://github.com/fntechgit/base-api-utils