Пример #1
0
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={})
    ]
Пример #2
0
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={}
        ),
    ]
Пример #3
0
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={},
        ),
    ]
Пример #4
0
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)
Пример #5
0
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'})
    ]
Пример #6
0
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={}
        ),
    ]
Пример #7
0
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={})
    ]
Пример #8
0
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={})
    ]
Пример #9
0
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={}
        ),
    ]
Пример #10
0
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)
Пример #11
0
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)),
]
Пример #12
0
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)