class SimpleRouterEx(routers.SimpleRouter): include_root_view = True include_format_suffixes = True default_schema_renderers = None routes = [ # routers.Route( # url=r'^{prefix}$', # mapping={'get': 'list'}, # name='{basename}-list', # detail=False, # initkwargs={'suffix': 'List'} # ), routers.Route(url=r'^{prefix}/{lookup}$', mapping={'get': 'retrieve'}, name='{basename}-detail', detail=True, initkwargs={'suffix': 'Detail'}), routers.DynamicRoute(url=r'^{prefix}/{lookup}/{url_path}$', name='{basename}-{url_name}', detail=True, initkwargs={}), routers.DynamicRoute(url=r'^{prefix}/{url_path}/{lookup}$', name='{basename}-{url_name}', detail=False, initkwargs={}) ]
class SignalsRouterVersion1(routers.DefaultRouter): APIRootView = SignalsAPIRootViewVersion1 # Overriding the `routes` attribute from the default DRF `routes`. We do this to control the # usage of trailing slashes for different routes. In DRF you can only add or remove the # trailing slash for all routes... routes = [ # List route. routers.Route( url=r'^{prefix}/$', mapping={ 'get': 'list', 'post': 'create', 'put': 'update', 'patch': 'partial_update', 'delete': 'destroy', }, name='{basename}-list', detail=False, initkwargs={'suffix': 'List'} ), # Dynamically generated list routes. Generated using # @action(detail=False) decorator on methods of the viewset. routers.DynamicRoute( url=r'^{prefix}/{url_path}$', name='{basename}-{url_name}', detail=False, initkwargs={} ), # Detail route. routers.Route( url=r'^{prefix}/{lookup}$', mapping={ 'get': 'retrieve', 'put': 'update', 'patch': 'partial_update', 'delete': 'destroy' }, name='{basename}-detail', detail=True, initkwargs={'suffix': 'Instance'} ), # Dynamically generated detail routes. Generated using # @action(detail=True) decorator on methods of the viewset. routers.DynamicRoute( url=r'^{prefix}/{lookup}/{url_path}$', name='{basename}-{url_name}', detail=True, initkwargs={} ), ]
class SingletonRouter(routers.SimpleRouter): """Same as default router but without detail route and GET, POST, PUT, PATCH and DELETE maps to same url as list. See CurrentUserViewset for usages. This allows GenericViewSet to be used against a singleton resource. If `/me` endpoint represents currently logged in user you are able to `GET /me`, `PUT /me`, `DELETE /me` and can also add any list_routes like `POST /me/change-avatar`. """ routes = [ # Mapping for list, create, update, partial_update and delete function to http verb. routers.Route( url=r"^{prefix}{trailing_slash}$", mapping={ "get": "list", "post": "create", "patch": "partial_update", "put": "update", "delete": "destroy", }, name="{basename}", detail=False, initkwargs={"suffix": ""}, ), # Dynamically generated list routes. # Generated using @action decorator # on methods of the viewset. routers.DynamicRoute( url=r"^{prefix}/{url_path}$", name="{basename}-{url_name}", detail=False, initkwargs={}, ), ]
class RestRouter(routers.DefaultRouter): schema_title = "PeeringDB API" schema_url = "" schema_renderers = None routes = [ # List route. routers.Route( url=r"^{prefix}{trailing_slash}$", mapping={ "get": "list", "post": "create" }, name="{basename}-list", detail=False, initkwargs={"suffix": "List"}, ), # Detail route. routers.Route( url=r"^{prefix}/{lookup}{trailing_slash}$", mapping={ "get": "retrieve", "put": "update", "patch": "partial_update", "delete": "destroy", }, name="{basename}-detail", detail=True, initkwargs={"suffix": "Instance"}, ), routers.DynamicRoute( url=r"^{prefix}/{lookup}/{methodnamehyphen}$", name="{basename}-{methodnamehyphen}", detail=True, initkwargs={}, ), # Dynamically generated routes. # Generated using @action or @link decorators on methods of the # viewset. routers.Route( url=r"^{prefix}/{lookup}/{methodname}{trailing_slash}$", mapping={ "{httpmethod}": "{methodname}", }, name="{basename}-{methodnamehyphen}", detail=False, initkwargs={}, ), ] def __init__(self, trailing_slash=False): self.trailing_slash = trailing_slash and "/" or "" super(routers.DefaultRouter, self).__init__(trailing_slash=False)
class OrdersRouter(routers.SimpleRouter): routes = [ routers.DynamicRoute(url=r'^{prefix}/{url_path}$', name='{basename}-{url_name}', detail=True, initkwargs={}), routers.Route(url=r'^{prefix}$', mapping={'post': 'create'}, name='{basename}-detail', detail=True, initkwargs={'suffix': 'Detail'}) ]
class CurrentUserRouter(routers.SimpleRouter): routes = [ routers.Route( url=r"^{prefix}$", mapping={"get": "retrieve", "put": "update", "patch": "partial_update", "delete": "destroy"}, name="{basename}-detail", detail=True, initkwargs={"suffix": "Detail"}, ), routers.DynamicRoute( url=r"^{prefix}/{url_path}$", name="{basename}-{url_name}", detail=True, initkwargs={} ), ]
class CustomRouter(routers.SimpleRouter): routes = [ routers.Route(url=r'^{prefix}$', mapping={'get': 'list'}, name='{basename}-kasra', detail=False, initkwargs={'suffix': 'List'}), routers.Route(url=r'^{prefix}/{lookup}$', mapping={'get': 'retrieve'}, name='{basename}-detail', detail=True, initkwargs={'suffix': 'Detail'}), routers.DynamicRoute(url=r'^{prefix}/{lookup}/{url_path}$', name='{basename}-{url_name}', detail=True, initkwargs={}) ]
class CustomRestRouter(rest_route.DefaultRouter): include_format_suffixes = False routes = [ # List route. rest_route.Route(url=r'^{prefix}/list$', mapping={ 'get': 'list', }, name='{basename}.list', detail=False, initkwargs={'suffix': 'List'}), rest_route.Route(url=r'^{prefix}/save$', mapping={'post': 'save'}, name='{basename}.save', detail=True, initkwargs={}), rest_route.Route(url=r'^{prefix}/delete$', mapping={'post': 'delete'}, name='{basename}.delete', detail=False, initkwargs={}), rest_route.Route(url=r'^{prefix}/edit$', mapping={ 'get': 'edit', }, name='{basename}.edit', detail=True, initkwargs={}), rest_route.Route(url=r'^{prefix}/metadata$', mapping={ 'get': 'metadata', 'options': 'metadata', }, name='{basename}.metadata', detail=True, initkwargs={}), # Dynamically generated list routes. Generated using # @action(detail=False) decorator on methods of the viewset. rest_route.DynamicRoute(url=r'^{prefix}/{url_path}$', name='{basename}.{url_name}', detail=False, initkwargs={}) ]
class StorageRouter(routers.SimpleRouter): routes = [ routers.Route( url=r'^{prefix}/{lookup}{trailing_slash}$', mapping={ 'get': 'list_or_retrieve', 'post': 'create', 'put': 'update', 'delete': 'destroy' }, name='{basename}-detail', detail=True, initkwargs={'suffix': 'Instance'} ), # Dynamically generated detail routes. Generated using # @action(detail=True) decorator on methods of the viewset. routers.DynamicRoute( url=r'^{prefix}/{lookup}/{url_path}{trailing_slash}$', name='{basename}-{url_name}', detail=True, initkwargs={} ), ]
class Router(routers.SimpleRouter): routes = [ # Dynamically generated list routes. # Generated using @action decorator # on methods of the viewset. routers.DynamicRoute( url=r"^{prefix}/{url_path}{trailing_slash}$", name="{basename}-{url_name}", detail=True, initkwargs={}, ), # Dynamically generated detail routes. # Generated using @action decorator on methods of the viewset. routers.DynamicRoute( url=r"^{prefix}/{lookup}/{url_path}{trailing_slash}$", name="{basename}-{url_name}", detail=True, initkwargs={}, ), ] def get_routes(self, viewset): ret = super().get_routes(viewset) lookup_field = getattr(viewset, "lookup_field", None) if lookup_field: # List route. ret.append( routers.Route( url=r"^{prefix}{trailing_slash}$", mapping={ "get": "list", "post": "create" }, name="{basename}-list", detail=False, initkwargs={"suffix": "List"}, )) detail_url_regex = r"^{prefix}/{lookup}{trailing_slash}$" if not lookup_field: detail_url_regex = r"^{prefix}{trailing_slash}$" # Detail route. ret.append( routers.Route( url=detail_url_regex, mapping={ "get": "retrieve", "put": "update", "patch": "partial_update", "delete": "destroy", }, name="{basename}-detail", detail=True, initkwargs={"suffix": "Instance"}, )) return ret def get_lookup_regex(self, viewset, lookup_prefix=""): lookup_fields = getattr(viewset, "lookup_fields", None) if lookup_fields: base_regex = "(?P<{lookup_prefix}{lookup_url_kwarg}>[^/.]+)" return "/".join( map( lambda x: base_regex.format(lookup_prefix=lookup_prefix, lookup_url_kwarg=x), lookup_fields, )) return super().get_lookup_regex(viewset, lookup_prefix)
from django.urls import path, include from rest_framework import routers from .views import TaskViewSet, TaskStatusViewSet, TaskTagViewSet, GroupTaskViewSet router = routers.DefaultRouter() router.register(r'status', TaskStatusViewSet, 'status') router.register(r'tags', TaskTagViewSet, 'tags') router.register(r'group', GroupTaskViewSet, 'group-tasks') router.register(r'', TaskViewSet, 'tasks') router.routes.append( routers.DynamicRoute(url=r'^{prefix}/{url_path}$', name='{basename}-{url_name}', detail=False, initkwargs={})) app_name = 's-tasks' urlpatterns = [ path(r'', include(router.urls)), ]
class Router(routers.SimpleRouter): routes = [ # Dynamically generated list routes. # Generated using @list_route decorator # on methods of the viewset. routers.DynamicRoute( url=r'^{prefix}/{url_path}{trailing_slash}$', name='{basename}-{url_name}', detail=True, initkwargs={}, ), # Dynamically generated detail routes. # Generated using @detail_route decorator on methods of the viewset. routers.DynamicRoute( url=r'^{prefix}/{lookup}/{url_path}{trailing_slash}$', name='{basename}-{url_name}', detail=True, initkwargs={}, ), ] def get_routes(self, viewset): ret = super().get_routes(viewset) lookup_field = getattr(viewset, 'lookup_field', None) if lookup_field: # List route. ret.append(routers.Route( url=r'^{prefix}{trailing_slash}$', mapping={ 'get': 'list', 'post': 'create' }, name='{basename}-list', detail=False, initkwargs={'suffix': 'List'}, )) detail_url_regex = r'^{prefix}/{lookup}{trailing_slash}$' if not lookup_field: detail_url_regex = r'^{prefix}{trailing_slash}$' # Detail route. ret.append(routers.Route( url=detail_url_regex, mapping={ 'get': 'retrieve', 'put': 'update', 'patch': 'partial_update', 'delete': 'destroy' }, name='{basename}-detail', detail=True, initkwargs={'suffix': 'Instance'} )) return ret def get_lookup_regex(self, viewset, lookup_prefix=''): lookup_fields = getattr(viewset, 'lookup_fields', None) if lookup_fields: base_regex = '(?P<{lookup_prefix}{lookup_url_kwarg}>[^/.]+)' return '/'.join(map( lambda x: base_regex.format( lookup_prefix=lookup_prefix, lookup_url_kwarg=x), lookup_fields)) return super().get_lookup_regex(viewset, lookup_prefix)
def __init__(self, actions=None, *args, **kwargs): """ Configure the available routes based on the informed actions. All the dynamic routes are always registered. Dynamic routes are generated based on the use of @action(detail=True) decorator on methods of the viewset. :param actions: the actions the router should register. The valid actions are: list, retrieve, create, update, partial_update, and destroy """ # if actions is None, we register all the available operations if actions is None: actions = list(VALID_ACTIONS_FOR_LIST.keys()) + list(VALID_ACTIONS_FOR_DETAIL) if not isinstance(actions, (list, set)): raise TypeError( "The `actions` argument must be a list or set." "For example " "`CaravaggiokRouter(['list', 'retrieve'])`" ) list_actions = {} detail_actions = {} list_actions_keys = VALID_ACTIONS_FOR_LIST.keys() detail_actions_keys = VALID_ACTIONS_FOR_DETAIL.keys() for action in actions: if action in list_actions_keys: list_actions[VALID_ACTIONS_FOR_LIST[action]] = action elif action in detail_actions_keys: detail_actions[VALID_ACTIONS_FOR_DETAIL[action]] = action self.custom_routes = [ # List route. routers.Route( url=r"^{prefix}{trailing_slash}$", mapping=list_actions, name="{basename}-list", detail=False, initkwargs={"suffix": "List"}, ), # Dynamically generated list routes. Generated using # @action(detail=False) decorator on methods of the viewset. routers.DynamicRoute( url=r"^{prefix}/{url_path}{trailing_slash}$", name="{basename}-{url_name}", detail=False, initkwargs={} ), # Detail route. routers.Route( url=r"^{prefix}/{lookup}{trailing_slash}$", mapping=detail_actions, name="{basename}-detail", detail=True, initkwargs={"suffix": "Instance"}, ), # Dynamically generated detail routes. Generated using # @action(detail=True) decorator on methods of the viewset. routers.DynamicRoute( url=r"^{prefix}/{lookup}/{url_path}{trailing_slash}$", name="{basename}-{url_name}", detail=True, initkwargs={}, ), ] super().__init__(*args, **kwargs)