API: add documentation tags.
This commit is contained in:
parent
15988235f2
commit
9f26ecf276
@ -13,8 +13,8 @@ from fastapi import FastAPI, Request
|
|||||||
|
|
||||||
from .exceptions import CustomHttpException
|
from .exceptions import CustomHttpException
|
||||||
from .authentication import authentication_router
|
from .authentication import authentication_router
|
||||||
from .collection import collection_router
|
from .collection import collection_router, item_router
|
||||||
from . import member # noqa
|
from .member import member_router
|
||||||
from .invitation import invitation_incoming_router, invitation_outgoing_router
|
from .invitation import invitation_incoming_router, invitation_outgoing_router
|
||||||
from .msgpack import MsgpackResponse
|
from .msgpack import MsgpackResponse
|
||||||
|
|
||||||
@ -23,6 +23,8 @@ VERSION = "v1"
|
|||||||
BASE_PATH = f"/api/{VERSION}"
|
BASE_PATH = f"/api/{VERSION}"
|
||||||
app.include_router(authentication_router, prefix=f"{BASE_PATH}/authentication")
|
app.include_router(authentication_router, prefix=f"{BASE_PATH}/authentication")
|
||||||
app.include_router(collection_router, prefix=f"{BASE_PATH}/collection")
|
app.include_router(collection_router, prefix=f"{BASE_PATH}/collection")
|
||||||
|
app.include_router(item_router, prefix=f"{BASE_PATH}/collection")
|
||||||
|
app.include_router(member_router, prefix=f"{BASE_PATH}/collection")
|
||||||
app.include_router(invitation_incoming_router, prefix=f"{BASE_PATH}/invitation/incoming")
|
app.include_router(invitation_incoming_router, prefix=f"{BASE_PATH}/invitation/incoming")
|
||||||
app.include_router(invitation_outgoing_router, prefix=f"{BASE_PATH}/invitation/outgoing")
|
app.include_router(invitation_outgoing_router, prefix=f"{BASE_PATH}/invitation/outgoing")
|
||||||
if settings.DEBUG:
|
if settings.DEBUG:
|
||||||
|
@ -33,7 +33,7 @@ User = get_user_model()
|
|||||||
token_scheme = APIKeyHeader(name="Authorization")
|
token_scheme = APIKeyHeader(name="Authorization")
|
||||||
AUTO_REFRESH = True
|
AUTO_REFRESH = True
|
||||||
MIN_REFRESH_INTERVAL = 60
|
MIN_REFRESH_INTERVAL = 60
|
||||||
authentication_router = APIRouter(route_class=MsgpackRoute)
|
authentication_router = APIRouter(route_class=MsgpackRoute, tags=["authentication"])
|
||||||
|
|
||||||
|
|
||||||
@dataclasses.dataclass(frozen=True)
|
@dataclasses.dataclass(frozen=True)
|
||||||
|
@ -7,7 +7,7 @@ from django.core.files.base import ContentFile
|
|||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
from django.db.models import QuerySet
|
from django.db.models import QuerySet
|
||||||
from fastapi import APIRouter, Depends, status, Request
|
from fastapi import APIRouter, Depends, status
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
|
|
||||||
from django_etebase import models
|
from django_etebase import models
|
||||||
@ -18,7 +18,8 @@ from .stoken_handler import filter_by_stoken_and_limit, filter_by_stoken, get_st
|
|||||||
from .utils import get_object_or_404, Context, Prefetch, PrefetchQuery, is_collection_admin
|
from .utils import get_object_or_404, Context, Prefetch, PrefetchQuery, is_collection_admin
|
||||||
|
|
||||||
User = get_user_model()
|
User = get_user_model()
|
||||||
collection_router = APIRouter(route_class=MsgpackRoute)
|
collection_router = APIRouter(route_class=MsgpackRoute, tags=["collection"])
|
||||||
|
item_router = APIRouter(route_class=MsgpackRoute, tags=["item"])
|
||||||
default_queryset: QuerySet = models.Collection.objects.all()
|
default_queryset: QuerySet = models.Collection.objects.all()
|
||||||
default_item_queryset: QuerySet = models.CollectionItem.objects.all()
|
default_item_queryset: QuerySet = models.CollectionItem.objects.all()
|
||||||
|
|
||||||
@ -378,7 +379,7 @@ def item_create(item_model: CollectionItemIn, collection: models.Collection, val
|
|||||||
return instance
|
return instance
|
||||||
|
|
||||||
|
|
||||||
@collection_router.get("/{collection_uid}/item/{item_uid}/")
|
@item_router.get("/{collection_uid}/item/{item_uid}/")
|
||||||
def item_get(
|
def item_get(
|
||||||
item_uid: str,
|
item_uid: str,
|
||||||
queryset: QuerySet = Depends(get_item_queryset),
|
queryset: QuerySet = Depends(get_item_queryset),
|
||||||
@ -407,7 +408,7 @@ def item_list_common(
|
|||||||
return MsgpackResponse(content=ret)
|
return MsgpackResponse(content=ret)
|
||||||
|
|
||||||
|
|
||||||
@collection_router.get("/{collection_uid}/item/")
|
@item_router.get("/{collection_uid}/item/")
|
||||||
async def item_list(
|
async def item_list(
|
||||||
queryset: QuerySet = Depends(get_item_queryset),
|
queryset: QuerySet = Depends(get_item_queryset),
|
||||||
stoken: t.Optional[str] = None,
|
stoken: t.Optional[str] = None,
|
||||||
@ -439,7 +440,7 @@ def item_bulk_common(data: ItemBatchIn, user: User, stoken: t.Optional[str], uid
|
|||||||
return MsgpackResponse({})
|
return MsgpackResponse({})
|
||||||
|
|
||||||
|
|
||||||
@collection_router.get("/{collection_uid}/item/{item_uid}/revision/")
|
@item_router.get("/{collection_uid}/item/{item_uid}/revision/")
|
||||||
def item_revisions(
|
def item_revisions(
|
||||||
item_uid: str,
|
item_uid: str,
|
||||||
limit: int = 50,
|
limit: int = 50,
|
||||||
@ -475,7 +476,7 @@ def item_revisions(
|
|||||||
return MsgpackResponse(ret)
|
return MsgpackResponse(ret)
|
||||||
|
|
||||||
|
|
||||||
@collection_router.post("/{collection_uid}/item/fetch_updates/")
|
@item_router.post("/{collection_uid}/item/fetch_updates/")
|
||||||
def fetch_updates(
|
def fetch_updates(
|
||||||
data: t.List[CollectionItemBulkGetIn],
|
data: t.List[CollectionItemBulkGetIn],
|
||||||
stoken: t.Optional[str] = None,
|
stoken: t.Optional[str] = None,
|
||||||
@ -509,14 +510,14 @@ def fetch_updates(
|
|||||||
return MsgpackResponse(ret)
|
return MsgpackResponse(ret)
|
||||||
|
|
||||||
|
|
||||||
@collection_router.post("/{collection_uid}/item/transaction/", dependencies=[Depends(has_write_access)])
|
@item_router.post("/{collection_uid}/item/transaction/", dependencies=[Depends(has_write_access)])
|
||||||
def item_transaction(
|
def item_transaction(
|
||||||
collection_uid: str, data: ItemBatchIn, stoken: t.Optional[str] = None, user: User = Depends(get_authenticated_user)
|
collection_uid: str, data: ItemBatchIn, stoken: t.Optional[str] = None, user: User = Depends(get_authenticated_user)
|
||||||
):
|
):
|
||||||
return item_bulk_common(data, user, stoken, collection_uid, validate_etag=True)
|
return item_bulk_common(data, user, stoken, collection_uid, validate_etag=True)
|
||||||
|
|
||||||
|
|
||||||
@collection_router.post("/{collection_uid}/item/batch/", dependencies=[Depends(has_write_access)])
|
@item_router.post("/{collection_uid}/item/batch/", dependencies=[Depends(has_write_access)])
|
||||||
def item_batch(
|
def item_batch(
|
||||||
collection_uid: str, data: ItemBatchIn, stoken: t.Optional[str] = None, user: User = Depends(get_authenticated_user)
|
collection_uid: str, data: ItemBatchIn, stoken: t.Optional[str] = None, user: User = Depends(get_authenticated_user)
|
||||||
):
|
):
|
||||||
|
@ -14,8 +14,8 @@ from .msgpack import MsgpackRoute, MsgpackResponse
|
|||||||
from .utils import get_object_or_404, Context, is_collection_admin
|
from .utils import get_object_or_404, Context, is_collection_admin
|
||||||
|
|
||||||
User = get_user_model()
|
User = get_user_model()
|
||||||
invitation_incoming_router = APIRouter(route_class=MsgpackRoute)
|
invitation_incoming_router = APIRouter(route_class=MsgpackRoute, tags=["incoming invitation"])
|
||||||
invitation_outgoing_router = APIRouter(route_class=MsgpackRoute)
|
invitation_outgoing_router = APIRouter(route_class=MsgpackRoute, tags=["outgoing invitation"])
|
||||||
default_queryset: QuerySet = models.CollectionInvitation.objects.all()
|
default_queryset: QuerySet = models.CollectionInvitation.objects.all()
|
||||||
|
|
||||||
|
|
||||||
|
@ -3,18 +3,19 @@ import typing as t
|
|||||||
from django.contrib.auth import get_user_model
|
from django.contrib.auth import get_user_model
|
||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
from django.db.models import QuerySet
|
from django.db.models import QuerySet
|
||||||
from fastapi import Depends, status
|
from fastapi import APIRouter, Depends, status
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
|
|
||||||
from django_etebase import models
|
from django_etebase import models
|
||||||
from .authentication import get_authenticated_user
|
from .authentication import get_authenticated_user
|
||||||
from .msgpack import MsgpackResponse
|
from .msgpack import MsgpackRoute, MsgpackResponse
|
||||||
from .utils import get_object_or_404
|
from .utils import get_object_or_404
|
||||||
from .stoken_handler import filter_by_stoken_and_limit
|
from .stoken_handler import filter_by_stoken_and_limit
|
||||||
|
|
||||||
from .collection import collection_router, get_collection, verify_collection_admin
|
from .collection import get_collection, verify_collection_admin
|
||||||
|
|
||||||
User = get_user_model()
|
User = get_user_model()
|
||||||
|
member_router = APIRouter(route_class=MsgpackRoute, tags=["member"])
|
||||||
default_queryset: QuerySet = models.CollectionMember.objects.all()
|
default_queryset: QuerySet = models.CollectionMember.objects.all()
|
||||||
|
|
||||||
|
|
||||||
@ -48,7 +49,7 @@ class MemberListResponse(BaseModel):
|
|||||||
done: bool
|
done: bool
|
||||||
|
|
||||||
|
|
||||||
@collection_router.get(
|
@member_router.get(
|
||||||
"/{collection_uid}/member/", response_model=MemberListResponse, dependencies=[Depends(verify_collection_admin)]
|
"/{collection_uid}/member/", response_model=MemberListResponse, dependencies=[Depends(verify_collection_admin)]
|
||||||
)
|
)
|
||||||
def member_list(
|
def member_list(
|
||||||
@ -70,7 +71,7 @@ def member_list(
|
|||||||
return MsgpackResponse(ret)
|
return MsgpackResponse(ret)
|
||||||
|
|
||||||
|
|
||||||
@collection_router.delete(
|
@member_router.delete(
|
||||||
"/{collection_uid}/member/{username}/",
|
"/{collection_uid}/member/{username}/",
|
||||||
status_code=status.HTTP_204_NO_CONTENT,
|
status_code=status.HTTP_204_NO_CONTENT,
|
||||||
dependencies=[Depends(verify_collection_admin)],
|
dependencies=[Depends(verify_collection_admin)],
|
||||||
@ -81,7 +82,7 @@ def member_delete(
|
|||||||
obj.revoke()
|
obj.revoke()
|
||||||
|
|
||||||
|
|
||||||
@collection_router.patch(
|
@member_router.patch(
|
||||||
"/{collection_uid}/member/{username}/",
|
"/{collection_uid}/member/{username}/",
|
||||||
status_code=status.HTTP_204_NO_CONTENT,
|
status_code=status.HTTP_204_NO_CONTENT,
|
||||||
dependencies=[Depends(verify_collection_admin)],
|
dependencies=[Depends(verify_collection_admin)],
|
||||||
@ -98,7 +99,7 @@ def member_patch(
|
|||||||
instance.save()
|
instance.save()
|
||||||
|
|
||||||
|
|
||||||
@collection_router.post(
|
@member_router.post(
|
||||||
"/{collection_uid}/member/leave/",
|
"/{collection_uid}/member/leave/",
|
||||||
status_code=status.HTTP_204_NO_CONTENT,
|
status_code=status.HTTP_204_NO_CONTENT,
|
||||||
)
|
)
|
||||||
|
@ -8,7 +8,7 @@ from django_etebase.utils import get_user_queryset, CallbackContext
|
|||||||
from etebase_fastapi.authentication import SignupIn, signup_save
|
from etebase_fastapi.authentication import SignupIn, signup_save
|
||||||
from etebase_fastapi.msgpack import MsgpackRoute
|
from etebase_fastapi.msgpack import MsgpackRoute
|
||||||
|
|
||||||
test_reset_view_router = APIRouter(route_class=MsgpackRoute)
|
test_reset_view_router = APIRouter(route_class=MsgpackRoute, tags=["test helpers"])
|
||||||
User = get_user_model()
|
User = get_user_model()
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user