Пример #1
0
class EmployeeRouter(DefaultRouter):
    """
    A router for manage APIs.
    """
    routes = [
        Route(url=r'^{prefix}/*$',
              mapping={
                  'get': 'list',
                  'post': 'create'
              },
              name='{basename}-list',
              initkwargs={'suffix': 'List'}),
        Route(url=r'^{prefix}/{lookup}$',
              mapping={
                  'get': 'retrieve',
                  'delete': 'destroy',
                  'put': 'update'
              },
              name='{basename}-detail',
              initkwargs={'suffix': 'Detail'})
        # ,
        # DynamicDetailRoute(
        #     url=r'^{prefix}/{lookup}/{methodnamehyphen}$',
        #     name='{basename}-{methodnamehyphen}',
        #     initkwargs={}
        # )
    ]
Пример #2
0
class CreateDeleteRouter(SimpleRouter):
    """
    A router for create / delete APIs
    """
    routes = [
        # Create route.
        Route(url=r'^{prefix}{trailing_slash}$',
              mapping={'post': 'create'},
              name='{basename}-link',
              initkwargs={'suffix': 'Create'}),
        # Dynamically generated list routes.
        DynamicListRoute(url=r'^{prefix}/{methodname}{trailing_slash}$',
                         name='{basename}-{methodnamehyphen}',
                         initkwargs={}),
        # Delete route
        Route(url=r'^{prefix}/{lookup}{trailing_slash}$',
              mapping={'delete': 'destroy'},
              name='{basename}-unlink',
              initkwargs={'suffix': 'Instance'}),
        # Dynamically generated detail routes.
        DynamicDetailRoute(
            url=r'^{prefix}/{lookup}/{methodname}{trailing_slash}$',
            name='{basename}-{methodnamehyphen}',
            initkwargs={}),
    ]
Пример #3
0
class SubRouter(SimpleRouter):
    """
    Like SimpleRouter, but with the lookup before the prefix, so that it can be
    easily used for sub-actions that are children of a main router.

    This is a convenient way of linking one or more viewsets to a parent one
    without having to set multiple @action and @link manually.
    """
    routes = [
        # List route.
        Route(url=r'^{lookup}/{prefix}{trailing_slash}$',
              mapping={
                  'get': 'list',
                  'post': 'create'
              },
              name='{basename}-list',
              initkwargs={'suffix': 'List'}),
        # Detail route.
        Route(url=r'^{lookup}/{prefix}{trailing_slash}$',
              mapping={
                  'get': 'retrieve',
                  'put': 'update',
                  'post': 'detail_post',
                  'patch': 'partial_update',
                  'delete': 'destroy'
              },
              name='{basename}-detail',
              initkwargs={'suffix': 'Instance'})
    ]
Пример #4
0
class CustomSimpleRouter(SimpleRouter):
    routes = [
        # List route
        Route(
            url=r"^{prefix}{trailing_slash}$",
            mapping={
                "get": "list",
                "post": "create",
                "put": "bulk_update",
                # "delete": "destroy",
            },
            name="{basename}-list",
            detail=False,
            initkwargs={"suffix": "List"},
        ),
        # Detail route
        Route(
            url=r"^{prefix}/{lookup}{trailing_slash}$",
            mapping={
                "get": "retrieve",
                "put": "update",
                "patch": "partial_update",
                "delete": "destroy",
            },
            name="{basename}-detail",
            detail=False,
            initkwargs={"suffix": "Instance"},
        ),
    ]
Пример #5
0
class CustomRouter(DefaultRouter):
    routes = [
        # List route.
        Route(url=r'^{prefix}{trailing_slash}$',
              mapping={
                  'get': 'list',
                  'post': 'create'
              },
              name='{basename}-list',
              detail=False,
              initkwargs={'suffix': 'List'}),
        # Dynamically generated list routes. Generated using
        # @action(detail=False) decorator on methods of the viewset.
        DynamicRoute(url=r'^{prefix}/{url_path}{trailing_slash}$',
                     name='{basename}-{url_name}',
                     detail=False,
                     initkwargs={}),
        # Detail route.
        Route(url=r'^{prefix}/{lookup}{trailing_slash}$',
              mapping={
                  'get': 'retrieve',
                  'put': 'partial_update',
                  'post': '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.
        DynamicRoute(url=r'^{prefix}/{lookup}/{url_path}{trailing_slash}$',
                     name='{basename}-{url_name}',
                     detail=True,
                     initkwargs={}),
    ]
Пример #6
0
class SearchRouter(DefaultRouter):
    routes = [
        Route(
            url=r'^{prefix}$',
            mapping={'get': 'list'},
            name='{basename}-list',
            initkwargs={'suffix': 'List'}
        ),
        Route(
            url=r'^{prefix}/{lookup}$',
            mapping={'get': 'retrieve'},
            name='{basename}-detail',
            initkwargs={'suffix': 'Detail'}
        ),
        DynamicDetailRoute(
            url=r'^{prefix}/{methodname}/(?P<query_term>[^/.]+)/$',
            name='{basename}-{methodname}',
            initkwargs={}
        ),
        DynamicListRoute(
            url=r'^{prefix}/{methodname}/$',
            name='{basename}-{methodname}',
            initkwargs={}
        )
    ]
Пример #7
0
class HireServiceRouter(routers.SimpleRouter):
    routes = [
        Route(url=r'^{prefix}/$',
              mapping={
                  'get': 'list',
                  'post': 'create',
                  'put': 'bulk_update'
              },
              name='{basename}-list',
              initkwargs={'suffix': 'List'}),
        Route(url=r'^{prefix}/{lookup}/$',
              mapping={
                  'put': 'update',
                  'patch': 'partial_update',
                  'delete': 'delete',
                  'get': 'retrieve'
              },
              name='{basename}-detail',
              initkwargs={'suffix': 'Detail'}),
        Route(url=r'^{prefix}/{lookup}/cancelability/$',
              mapping={'get': 'cancelability'},
              name='{basename}-service-cancelability',
              initkwargs={'suffix': 'Cancelability'}),
        Route(url=r'^{prefix}/{lookup}/notify-customer/$',
              mapping={'post': 'notify_customer'},
              name='{basename}-service-notify-customer',
              initkwargs={'suffix': 'NotifyCustomer'})
    ]
Пример #8
0
class OptionalSlashRouter(SimpleRouter):
    routes = [
        # List route.
        Route(
            url=r'^{prefix}/?$',
            mapping={
                'get': 'list',
                'post': 'create'
            },
            name='{basename}-list',
            initkwargs={'suffix': 'List'}
        ),
        # Detail route.
        Route(
            url=r'^{prefix}/{lookup}/?$',
            mapping={
                'get': 'retrieve',
                'put': 'update',
                'patch': 'partial_update',
                'delete': 'destroy'
            },
            name='{basename}-detail',
            initkwargs={'suffix': 'Instance'}
        ),
        # Dynamically generated routes.
        # Generated using @action or @link decorators on methods of the viewset.
        Route(
            url=r'^{prefix}/{lookup}/{methodname}/?$',
            mapping={
                '{httpmethod}': '{methodname}',
            },
            name='{basename}-{methodnamehyphen}',
            initkwargs={}
        ),
    ]
class ApiRouter(DefaultRouter):
    """Generate URL patterns for list, detail, and viewset-specific
    HTTP routes.
    """

    routes = [
        # List route.
        Route(url=r"^{prefix}/?$",
              mapping={
                  'get': 'list',
                  'post': 'create'
              },
              name="{basename}-list",
              initkwargs={'suffix': 'List'}),
        # Detail route.
        Route(url=r"^{prefix}/{lookup}/?$",
              mapping={
                  'get': 'retrieve',
                  'put': 'update',
                  'patch': 'partial_update',
                  'delete': 'destroy'
              },
              name="{basename}-detail",
              initkwargs={'suffix': 'Instance'}),
        # Dynamically generated routes, from @action or @link decorators
        # on methods of the viewset.
        Route(url=r"^{prefix}/{lookup}/{methodname}/?$",
              mapping={
                  "{httpmethod}": "{methodname}",
              },
              name="{basename}-{methodnamehyphen}",
              initkwargs={}),
    ]
Пример #10
0
class CustomDefaultRouter(SimpleRouter):
    """
    Default router for APIs that generates routes for GET, POST, PUT and DELETE
    methods.
    """
    routes = [
        # List route.
        Route(url=r'^{prefix}$',
              mapping={
                  'get': 'list',
                  'post': 'create'
              },
              name='{basename}-list',
              detail=False,
              initkwargs={'suffix': 'List'}),
        # Detail route.
        Route(url=r'^{prefix}/{lookup}$',
              mapping={
                  'get': 'retrieve',
                  'put': 'update',
                  'delete': 'destroy'
              },
              name='{basename}-detail',
              detail=True,
              initkwargs={'suffix': 'Instance'}),
        DynamicRoute(url=r'^{prefix}/{lookup}/{url_path}$',
                     name='{basename}-{url_name}',
                     detail=True,
                     initkwargs={}),
    ]
Пример #11
0
class SensorThingsRouter(DefaultRouter):
    """A router that has the lookup field in parentheses."""
    APIRootView = SensorThingsAPI
    routes = [
        Route(url=r'^{prefix}$',
              mapping={
                  'get': 'list',
                  'post': 'create'
              },
              name='{basename}-list',
              detail=False,
              initkwargs={'suffix': 'List'}),
        DynamicRoute(url=r'^{prefix}/{url_path}$',
                     name='{basename}-{url_name}',
                     detail=False,
                     initkwargs={}),
        Route(url=r'^{prefix}\({lookup}\)$',
              mapping={
                  'get': 'retrieve',
                  'put': 'update',
                  'patch': 'partial_update',
                  'delete': 'destroy'
              },
              name='{basename}-detail',
              detail=True,
              initkwargs={'suffix': 'Instance'}),
        DynamicRoute(url=r'^{prefix}\({lookup}\)/{url_path}$',
                     name='{basename}-{url_name}',
                     detail=True,
                     initkwargs={}),
    ]
Пример #12
0
    def __init__(self, muninn_archive=None, *args, **kwargs):
        '''
        `muninn_archive` specifies an archive (defined in the settings) that will be registered automatically.
        Use as a shorthand for use cases whre there is only one archive to be served under a URL path.
        '''
        super(MuninnRouter, self).__init__(*args, **kwargs)
        # Add detail route that understands `product_type/product_name`
        route_kwargs = {
            'url':
            u'^{prefix}/(?P<product_type>[^/.]+)/(?P<product_name>[^/.]+){trailing_slash}$',
            'mapping': {
                u'put': u'update',
                u'delete': u'destroy',
                u'patch': u'partial_update',
                u'get': u'retrieve'
            },
            'name': u'{basename}-detail',
            'detail': True,
            'initkwargs': {
                u'suffix': u'Instance'
            }
        }
        try:
            product_name_route = Route(**route_kwargs)
        except TypeError:
            # DRF below 1.8:
            del route_kwargs['detail']
            product_name_route = Route(**route_kwargs)
        self.routes.append(product_name_route)

        if muninn_archive:
            self.register_muninn(muninn_archive, prefix='')
Пример #13
0
class CustomReadOnlyRouter(SimpleRouter):
    """
    A router for read-only APIs, which doesn't use trailing slashes.
    """
    routes = [
        Route(url=r'^{prefix}/$',
              mapping={
                  'get': 'list',
                  'post': 'create'
              },
              detail=False,
              name='{basename}-list',
              initkwargs={'suffix': 'List'}),
        DynamicRoute(url=r'^{prefix}/{url_path}/$',
                     name='{basename}-{url_name}',
                     detail=False,
                     initkwargs={}),
        Route(url=r'^{prefix}/{lookup}/$',
              mapping={
                  'get': 'retrieve',
                  'put': 'update',
                  'patch': 'partial_update',
                  'delete': 'destroy'
              },
              name='{basename}-detail',
              detail=True,
              initkwargs={'suffix': 'Detail'}),
        DynamicRoute(url=r'^{prefix}/{url_path}/{lookup}/$',
                     name='{basename}-{url_name}',
                     detail=True,
                     initkwargs={})
    ]
Пример #14
0
    def extra_routes(cls):
        routes = []
        ct = get_ct(cls.model)
        for pct in get_related_parents(ct):
            if not pct.is_registered():
                continue
            if pct.urlbase == '':
                purlbase = ''
            else:
                purlbase = pct.urlbase + '/'

            routes.append(Route(
                (
                    '^' + purlbase + r'(?P<related_' + pct.identifier +
                    '>[^\/\?]+)/{prefix}{trailing_slash}$'
                ),
                mapping={'get': 'list'},
                name="{basename}-for-related-%s" % pct.identifier,
                initkwargs={'suffix': 'List'},
            ))

        for cct in get_related_children(ct):
            if not cct.is_registered():
                continue
            cbase = cct.urlbase
            routes.append(Route(
                url='^%s-by-{prefix}' % cbase,
                mapping={'get': 'list'},
                name="%s-by-%s" % (cct.identifier, ct.identifier),
                initkwargs={'target': cbase, 'suffix': 'List'},
            ))

        return routes
Пример #15
0
class CustomRouter(DefaultRouter):
    routes = [
        Route(url=r'^{prefix}/getAllWithOutPagination$',
              mapping={'get': 'list'},
              name='{basename}-list',
              detail=False,
              initkwargs={'suffix': 'List'}),
        Route(url=r'^{prefix}/getOne/{lookup}$',
              mapping={'get': 'retrieve'},
              name='{basename}-detail',
              detail=True,
              initkwargs={'suffix': 'Detail'}),
        Route(url=r'^{prefix}/create$',
              mapping={'post': 'create'},
              name='{basename}-list',
              detail=False,
              initkwargs={'suffix': 'List'}),
        Route(url=r'^{prefix}/update$',
              mapping={'post': 'update'},
              name='{basename}-detail',
              detail=True,
              initkwargs={'suffix': 'Detail'}),
        Route(url=r'^{prefix}/delete/{lookup}$',
              mapping={'get': 'destroy'},
              name='{basename}-detail',
              detail=True,
              initkwargs={'suffix': 'Detail'}),
        DynamicRoute(url=r'^{prefix}/{url_path}/{lookup}$',
                     name='{basename}-{url_name}',
                     detail=False,
                     initkwargs={}),
    ]
Пример #16
0
class MisagoApiRouter(DefaultRouter):
    routes = [
        # List route.
        Route(url=r'^{prefix}{trailing_slash}$',
              mapping={
                  'get': 'list',
                  'post': 'create'
              },
              name='{basename}-list',
              initkwargs={'suffix': 'List'}),
        # Dynamically generated list routes.
        # Generated using @list_route decorator
        # on methods of the viewset.
        DynamicListRoute(url=r'^{prefix}/{methodnamehyphen}{trailing_slash}$',
                         name='{basename}-{methodnamehyphen}',
                         initkwargs={}),
        # Detail route.
        Route(url=r'^{prefix}/{lookup}{trailing_slash}$',
              mapping={
                  'get': 'retrieve',
                  'put': 'update',
                  'patch': 'partial_update',
                  'delete': 'destroy'
              },
              name='{basename}-detail',
              initkwargs={'suffix': 'Instance'}),
        # Dynamically generated detail routes.
        # Generated using @detail_route decorator on methods of the viewset.
        DynamicDetailRoute(
            url=r'^{prefix}/{lookup}/{methodnamehyphen}{trailing_slash}$',
            name='{basename}-{methodnamehyphen}',
            initkwargs={}),
    ]
Пример #17
0
class JobRouter(SimpleRouter):
    '''
    A dedicated router for UWS services. The main difference is that a POST on an instance
    maps to update, not PUT. Also actions are removed.
    '''

    routes = [
        Route(url=r'^{prefix}$',
              mapping={
                  'get': 'list',
                  'post': 'create'
              },
              name='{basename}-list',
              detail=False,
              initkwargs={'suffix': 'List'}),
        Route(url=r'^{prefix}/{lookup}$',
              mapping={
                  'get': 'retrieve',
                  'post': 'update',
                  'delete': 'destroy'
              },
              name='{basename}-detail',
              detail=True,
              initkwargs={'suffix': 'Instance'}),
        DynamicRoute(url=r'^{prefix}/{lookup}/{url_path}$',
                     name='{basename}-{url_name}',
                     detail=True,
                     initkwargs={})
    ]
Пример #18
0
class MetricRouter(SimpleRouter):
    """
    A router for Metric APIs
    """
    routes = [
        Route(url=r'^{prefix}{trailing_slash}$',
              mapping={
                  'get': 'list',
                  'post': 'create',
              },
              name='{basename}-list',
              initkwargs={'suffix': 'List'}),
        DynamicListRoute(url=r'^{prefix}/{methodname}{trailing_slash}$',
                         name='{basename}-{methodnamehyphen}',
                         initkwargs={}),
        Route(
            url=r'^{prefix}/{lookup}{trailing_slash}$',
            mapping={
                #                'get': 'retrieve',
                #                'patch': 'partial_update',
                'delete': 'destroy'
            },
            name='{basename}-detail',
            initkwargs={'suffix': 'Instance'}),
        DynamicDetailRoute(
            url=r'^{prefix}/{lookup}/{methodname}{trailing_slash}$',
            name='{basename}-{methodnamehyphen}',
            initkwargs={}),
    ]
Пример #19
0
class CustomRouter(SimpleRouter):
    """
    A router for read-only APIs, which doesn't use trailing slashes.
    """
    routes = [
        Route(
            url=r'^{prefix}{trailing_slash}$',
            mapping={
                'get': 'list',
                'post': 'create'
            },
            name='{basename}_list',
            detail=False,
            initkwargs={'suffix': 'List'}
        ),
        # Detail route.
        Route(
            url=r'^{prefix}/{lookup}{trailing_slash}$',
            mapping={
                'get': 'retrieve',
                'post': 'create_msg',
                'delete': 'leave_dialog',
            },
            name='{basename}_detail',
            detail=True,
            initkwargs={'suffix': 'Instance'}
        ),
    ]
Пример #20
0
    def get_routes(self, viewset):
        routes = super(ModelRouter, self).get_routes(viewset)
        model = getattr(viewset, "model", None)
        if not model:
            return routes

        # Custom routes

        # Re-register list view, with an additional keyword to filter this
        # model by parent models (e.g. foreign keys)

        # /[parentmodel_url]/[foreignkey_value]/[model_url]
        try:
            ct = get_ct(model)
        except (RuntimeError, DatabaseError):
            # This can happen before contenttypes is migrated
            return routes
        for pct, fields in ct.get_foreign_keys().items():
            if not pct.is_registered():
                continue
            if len(fields) > 1:
                # Multiple foreign keys to same parent model; can't
                # automatically determine which one to use
                continue
            if pct.urlbase == '':
                purlbase = ''
            else:
                purlbase = pct.urlbase + '/'
            routes.append(
                Route(
                    url=('^' + purlbase + r'(?P<' + fields[0] +
                         r'>[^\/\?]+)/{prefix}{trailing_slash}$'),
                    mapping={'get': 'list'},
                    name="{basename}-for-%s" % fields[0],
                    detail=False,
                    initkwargs={'suffix': 'List'},
                ))

        for cct in ct.get_children():
            if not cct.is_registered():
                continue
            cbase = cct.urlbase
            routes.append(
                Route(
                    url='^%s-by-{prefix}' % cbase,
                    mapping={'get': 'list'},
                    name="%s-by-%s" % (cct.identifier, ct.identifier),
                    detail=False,
                    initkwargs={
                        'target': cbase,
                        'suffix': 'List'
                    },
                ))

        if hasattr(viewset, 'extra_routes'):
            routes += viewset.extra_routes()

        return routes
Пример #21
0
class EndpointRouterMixin:
    endpoint_routes = [
        # List route.
        Route(url=r'^{prefix}{trailing_slash}$',
              mapping={
                  'get': 'list',
                  'post': 'create'
              },
              name='{basename}-list',
              initkwargs={'suffix': 'List'}),
        # Dynamically generated list routes.
        # Generated using @list_route decorator
        # on methods of the viewset.
        DynamicListRoute(url=r'^{prefix}/{methodname}{trailing_slash}$',
                         name='{basename}-{methodnamehyphen}',
                         initkwargs={}),
        # Edit route.
        Route(url=r'^{prefix}/{lookup}/edit{trailing_slash}$',
              mapping={
                  'get': 'retrieve',
                  'put': 'update',
                  'patch': 'partial_update',
                  'delete': 'destroy'
              },
              name='{basename}-detail',
              initkwargs={'suffix': 'Instance'}),
        # Dynamically generated detail routes.
        # Generated using @detail_route decorator on methods of the viewset.
        DynamicDetailRoute(
            url=r'^{prefix}/{lookup}/{methodname}{trailing_slash}$',
            name='{basename}-{methodnamehyphen}',
            initkwargs={}),
        # Endpoint route.
        Route(url=r'^{prefix}/{lookup}{trailing_slash}$',
              mapping={
                  'get': 'endpoint_get',
                  'put': 'endpoint_put',
                  'post': 'endpoint_post',
                  'patch': 'endpoint_patch',
                  'delete': 'endpoint_delete'
              },
              name='{basename}-endpoint',
              initkwargs={'suffix': 'Instance'}),
    ]

    def __init__(self, *args, **kwargs):
        # Save original routes so we can switch them later on without modifying logic too much.
        self._routes = self.routes
        super().__init__(*args, **kwargs)

    def get_routes(self, viewset):
        if getattr(viewset, 'as_endpoint', False):
            self.routes = self.endpoint_routes
        else:
            self.routes = self._routes
        return super().get_routes(viewset)
Пример #22
0
class ListPatchRouter(ExtendedSimpleRouter):
    """A router that allows performing PATCH requests against the `list` endpoint

    This router is used in order to provide API endpoints that respond to PATCH
    requsts against a viewset's `list` endpoint. It is useful for situations where it
    is necessary to perform a batch update of multiple resources. For a use case,
    consider the selection of which remote resources should be harvestable by the local
    GeoNode:

    - User is shown a (paginated) list of resources that are available on the remote
    service
    - User must now choose which of these harvestable resources should be harvested
    - Instead of forcing the user to make multiple PATCH requests to each harvestable
    resource's detail page in order to set the resource's `should_be_harvested`
    property, user can perform a PATCH request to
    `harvesters/{harvester-id}/harvestable-resources` and set multiple resources'
    `should_be_harvested` at the same time

    """

    routes = [
        # List route.
        Route(url=r'^{prefix}{trailing_slash}$',
              mapping={
                  'get': 'list',
                  'post': 'create',
                  'patch': 'update_list',
              },
              name='{basename}-list',
              detail=False,
              initkwargs={'suffix': 'List'}),
        # Dynamically generated list routes. Generated using
        # @action(detail=False) decorator on methods of the viewset.
        DynamicRoute(url=r'^{prefix}/{url_path}{trailing_slash}$',
                     name='{basename}-{url_name}',
                     detail=False,
                     initkwargs={}),
        # Detail route.
        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'}),
        # Dynamically generated detail routes. Generated using
        # @action(detail=True) decorator on methods of the viewset.
        DynamicRoute(url=r'^{prefix}/{lookup}/{url_path}{trailing_slash}$',
                     name='{basename}-{url_name}',
                     detail=True,
                     initkwargs={}),
    ]
class CustomRouterRetrieveHasNoParam(SimpleRouter):
    routes = [

        # Detail route.
        Route(
            url=r'^/{prefix}$',
            mapping={
                'get': 'retrieve',
                'put': 'update',
                'patch': 'partial_update',
                'delete': 'destroy'
            },
            name='{basename}-detail',
            detail=True,
            initkwargs={'suffix': 'Instance'}
        ),

        Route(
            url=r'^/{prefix}/create$',
            mapping={
                'post': 'create'
            },
            name='{basename}-create',
            detail=False,
            initkwargs={'suffix': 'Create'}
        ),

        Route(
            url=r'^/{prefix}/list$',
            mapping={
                'get': 'list',
            },
            name='{basename}-list',
            detail=False,
            initkwargs={'suffix': 'List'}
        ),

        # Dynamically generated list routes. Generated using
        # @action(detail=False) decorator on methods of the viewset.
        DynamicRoute(
            url=r'^/{prefix}/{url_path}$',
            name='{basename}-{url_name}',
            detail=False,
            initkwargs={}
        ),
        # Dynamically generated detail routes. Generated using
        # @action(detail=True) decorator on methods of the viewset.
        DynamicRoute(
            url=r'^/{prefix}/{lookup}/{url_path}$',
            name='{basename}-{url_name}',
            detail=True,
            initkwargs={}
        ),
    ]
Пример #24
0
class ZipCodeRouter(SimpleRouter):
    routes = [
        Route(url=r'^$',
              mapping={'get': 'list'},
              name='{basename}-list',
              initkwargs={'suffix': 'List'}),
        Route(url=r'^{lookup}/$',
              mapping={'get': 'retrieve'},
              name='{basename}-detail',
              initkwargs={'suffix': 'Detail'}),
    ]
Пример #25
0
class CustomizeRouter(SimpleRouter):
    routes = [
        Route(url=r'^{prefix}$',
              mapping={'get': 'list'},
              name='{basename}-list',
              detail=False,
              initkwargs={}),
        Route(url=r'^{prefix}/{lookup}$',
              mapping={'get': 'retrieve'},
              name='{basename}-detail',
              detail=True,
              initkwargs={}),
    ]
Пример #26
0
class CustomReadOnlyRouter(SimpleRouter):
    routes = [
        Route(url=r'^{prefix}s{trailing_slash}$',
              mapping={'get': 'list'},
              name='{basename}-list',
              detail=False,
              initkwargs={'suffix': 'List'}),
        Route(url=r'^{prefix}/{lookup}{trailing_slash}$',
              mapping={'get': 'detail_with_recommends'},
              name='{basename}-detail',
              detail=True,
              initkwargs={'suffix': 'Detail'})
    ]
Пример #27
0
class ReadOnlyRouter(DefaultRouter):
    """
    A router for read-only APIs, which USES trailing slashes.
    """
    routes = [
        Route(url=r'^{prefix}{trailing_slash}$',
              mapping={'get': 'list'},
              name='{basename}-list',
              initkwargs={'suffix': 'List'}),
        Route(url=r'^{prefix}/{lookup}{trailing_slash}$',
              mapping={'get': 'retrieve'},
              name='{basename}-detail',
              initkwargs={'suffix': 'Detail'})
    ]
Пример #28
0
class OPENIPAMAPIRouter(SimpleRouter):
    """
    A router to match existing url patterns
    """

    routes = [
        Route(
            url=r"^{prefix}/$",
            mapping={"get": "list"},
            name="api_{basename}_list",
            detail=False,
            initkwargs={"suffix": "List"},
        ),
        Route(
            url=r"^{prefix}/add/$",
            mapping={"post": "create"},
            name="api_{basename}_create",
            detail=False,
            initkwargs={"suffix": "Create"},
        ),
        Route(
            url=r"^{prefix}/{lookup}/$",
            mapping={"get": "retrieve"},
            name="api_{basename}_detail",
            detail=True,
            initkwargs={"suffix": "Detail"},
        ),
        Route(
            url=r"^{prefix}/{lookup}/update/$",
            mapping={
                "get": "retrieve",
                "post": "update",
                "put": "update"
            },
            name="api_{basename}_update",
            detail=True,
            initkwargs={"suffix": "Update"},
        ),
        Route(
            url=r"^{prefix}/{lookup}/delete/$",
            mapping={
                "get": "retrieve",
                "delete": "destroy",
                "post": "destroy"
            },
            name="api_{basename}_delete",
            detail=True,
            initkwargs={"suffix": "Delete"},
        ),
    ]
Пример #29
0
    def get_routes(self, viewset):
        """
        Augment `self.routes` with any dynamically generated routes.

        Returns a list of the Route namedtuple.
        """

        known_actions = flatten([route.mapping.values() for route in self.routes])

        # Determine any `@action` or `@link` decorated methods on the viewset
        dynamic_routes = []
        for methodname in dir(viewset):
            attr = getattr(viewset, methodname)
            httpmethods = getattr(attr, 'bind_to_methods', None)
            if httpmethods:
                if methodname in known_actions:
                    raise ImproperlyConfigured('Cannot use @action or @link decorator on '
                                               'method "%s" as it is an existing route' % methodname)
                httpmethods = [method.lower() for method in httpmethods]
                dynamic_routes.append((httpmethods, methodname))

        ret = []
        for route in self.routes:
            if route.mapping == {'{httpmethod}': '{methodname}'}:
                # Dynamic routes (@link or @action decorator)
                for httpmethods, methodname in dynamic_routes:
                    method_kwargs = getattr(viewset, methodname).kwargs
                    url_path = method_kwargs.pop("url_path", None) or methodname
                    initkwargs = route.initkwargs.copy()
                    initkwargs.update(method_kwargs)
                    if getattr(getattr(viewset, methodname), 'for_list', False):
                        ret.insert(0, Route(
                            url=replace_methodname(route.url, url_path).replace('{lookup}/', ''),
                            mapping=dict((httpmethod, methodname) for httpmethod in httpmethods),
                            name=replace_methodname(route.name, url_path),
                            initkwargs=initkwargs,
                        ))
                    else:
                        ret.append(Route(
                            url=replace_methodname(route.url, url_path),
                            mapping=dict((httpmethod, methodname) for httpmethod in httpmethods),
                            name=replace_methodname(route.name, url_path),
                            initkwargs=initkwargs,
                        ))
            else:
                # Standard route
                ret.append(route)

        return ret
Пример #30
0
class NoLookupUpdateRouter(SimpleRouter):
    """
    A router no {loopup} for mine Update
    https://www.django-rest-framework.org/api-guide/routers/#defaultrouter
    """
    routes = [
        # List route.
        Route(
            url=r'^{prefix}{trailing_slash}$',
            mapping={
                'get': 'list',
                'post': 'create',
                'put': 'update',
                'patch': 'partial_update',
            },
            name='{basename}-list',
            detail=False,
            initkwargs={'suffix': 'List'}
        ),
        # Dynamically generated list routes. Generated using
        # @action(detail=False) decorator on methods of the viewset.
        DynamicRoute(
            url=r'^{prefix}/{url_path}{trailing_slash}$',
            name='{basename}-{url_name}',
            detail=False,
            initkwargs={}
        ),
        # Detail route.
        Route(
            url=r'^{prefix}/{lookup}{trailing_slash}$',
            mapping={
                'get': 'retrieve',

                '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.
        DynamicRoute(
            url=r'^{prefix}/{lookup}/{url_path}{trailing_slash}$',
            name='{basename}-{url_name}',
            detail=True,
            initkwargs={}
        ),
    ]