diff options
| author | 2020-08-03 10:25:11 +0200 | |
|---|---|---|
| committer | 2020-08-03 10:25:11 +0200 | |
| commit | 685214c5495e0364a57f50c48a8c83d96bd53054 (patch) | |
| tree | e0c473c2081a06282b549c2cfb81907e087b9e5d /pydis_site/apps/api/viewsets/bot | |
| parent | Merge pull request #370 from python-discord/role-reminders (diff) | |
| parent | Delete FilterList objects for tests. (diff) | |
Merge pull request #371 from python-discord/whitelist_system
FilterList model and endpoints
Diffstat (limited to 'pydis_site/apps/api/viewsets/bot')
| -rw-r--r-- | pydis_site/apps/api/viewsets/bot/__init__.py | 1 | ||||
| -rw-r--r-- | pydis_site/apps/api/viewsets/bot/filter_list.py | 97 | 
2 files changed, 98 insertions, 0 deletions
| diff --git a/pydis_site/apps/api/viewsets/bot/__init__.py b/pydis_site/apps/api/viewsets/bot/__init__.py index b3e0fa4d..e64e3988 100644 --- a/pydis_site/apps/api/viewsets/bot/__init__.py +++ b/pydis_site/apps/api/viewsets/bot/__init__.py @@ -1,4 +1,5 @@  # flake8: noqa +from .filter_list import FilterListViewSet  from .bot_setting import BotSettingViewSet  from .deleted_message import DeletedMessageViewSet  from .documentation_link import DocumentationLinkViewSet diff --git a/pydis_site/apps/api/viewsets/bot/filter_list.py b/pydis_site/apps/api/viewsets/bot/filter_list.py new file mode 100644 index 00000000..2cb21ab9 --- /dev/null +++ b/pydis_site/apps/api/viewsets/bot/filter_list.py @@ -0,0 +1,97 @@ +from rest_framework.decorators import action +from rest_framework.request import Request +from rest_framework.response import Response +from rest_framework.viewsets import ModelViewSet + +from pydis_site.apps.api.models.bot.filter_list import FilterList +from pydis_site.apps.api.serializers import FilterListSerializer + + +class FilterListViewSet(ModelViewSet): +    """ +    View providing CRUD operations on items allowed or denied by our bot. + +    ## Routes +    ### GET /bot/filter-lists +    Returns all filterlist items in the database. + +    #### Response format +    >>> [ +    ...     { +    ...         'id': "2309268224", +    ...         'created_at': "01-01-2020 ...", +    ...         'updated_at': "01-01-2020 ...", +    ...         'type': "file_format", +    ...         'allowed': 'true', +    ...         'content': ".jpeg", +    ...         'comment': "Popular image format.", +    ...     }, +    ...     ... +    ... ] + +    #### Status codes +    - 200: returned on success +    - 401: returned if unauthenticated + +    ### GET /bot/filter-lists/<id:int> +    Returns a specific FilterList item from the database. + +    #### Response format +    >>> { +    ...     'id': "2309268224", +    ...     'created_at': "01-01-2020 ...", +    ...     'updated_at': "01-01-2020 ...", +    ...     'type': "file_format", +    ...     'allowed': 'true', +    ...     'content': ".jpeg", +    ...     'comment': "Popular image format.", +    ... } + +    #### Status codes +    - 200: returned on success +    - 404: returned if the id was not found. + +    ### GET /bot/filter-lists/get-types +    Returns a list of valid list types that can be used in POST requests. + +    #### Response format +    >>> [ +    ...     ["GUILD_INVITE","Guild Invite"], +    ...     ["FILE_FORMAT","File Format"], +    ...     ["DOMAIN_NAME","Domain Name"], +    ...     ["FILTER_TOKEN","Filter Token"] +    ... ] + +    #### Status codes +    - 200: returned on success + +    ### POST /bot/filter-lists +    Adds a single FilterList item to the database. + +    #### Request body +    >>> { +    ...    'type': str, +    ...    'allowed': bool, +    ...    'content': str, +    ...    'comment': Optional[str], +    ... } + +    #### Status codes +    - 201: returned on success +    - 400: if one of the given fields is invalid + +    ### DELETE /bot/filter-lists/<id:int> +    Deletes the FilterList item with the given `id`. + +    #### Status codes +    - 204: returned on success +    - 404: if a tag with the given `id` does not exist +    """ + +    serializer_class = FilterListSerializer +    queryset = FilterList.objects.all() + +    @action(detail=False, url_path='get-types', methods=["get"]) +    def get_types(self, _: Request) -> Response: +        """Get a list of all the types of FilterLists we support.""" +        return Response(FilterList.FilterListType.choices) | 
