Coverage for src/backend/InvenTree/InvenTree/helpers_api.py: 88%
14 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-07 17:47 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-07 17:47 +0000
1"""Helpers for InvenTrees way of using drf viewset."""
3from rest_framework import mixins, routers, viewsets
5from InvenTree.api import BulkDeleteViewsetMixin
8class RetrieveUpdateDestroyModelViewSet(
9 mixins.RetrieveModelMixin,
10 mixins.UpdateModelMixin,
11 mixins.DestroyModelMixin,
12 mixins.ListModelMixin,
13 viewsets.GenericViewSet,
14):
15 """Viewset which provides 'retrieve', 'update', 'destroy' and 'list' actions."""
18class RetrieveDestroyModelViewSet(
19 mixins.RetrieveModelMixin,
20 mixins.DestroyModelMixin,
21 mixins.ListModelMixin,
22 viewsets.GenericViewSet,
23):
24 """Viewset which provides 'retrieve', 'destroy' and 'list' actions."""
27class InvenTreeApiRouter(routers.SimpleRouter):
28 """Custom router which adds various specific functions.
30 Currently adds the following features:
31 - support for bulk delete operations
32 """
34 def get_routes(self, viewset):
35 """Override the default get_routes method to add bulk delete support."""
36 routes = super().get_routes(viewset)
38 if issubclass(viewset, BulkDeleteViewsetMixin):
39 list_route = next(
40 (route for route in routes if route.mapping.get('get') == 'list'), None
41 )
42 list_route.mapping['delete'] = 'bulk_delete'
44 return routes
46 def get_default_basename(self, viewset):
47 """Extract the default base name from the viewset."""
48 basename = super().get_default_basename(viewset)
49 return 'api-' + basename