-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathapi.py
More file actions
58 lines (48 loc) · 2.01 KB
/
api.py
File metadata and controls
58 lines (48 loc) · 2.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import logging
from django.http import HttpRequest
from ninja import NinjaAPI
from ninja.security import HttpBearer
from oauth2_provider.models import AccessToken
from oauth2_provider.oauth2_backends import get_oauthlib_core
from bats_ai.core.views import (
ConfigurationRouter,
ExportAnnotationRouter,
GRTSCellsRouter,
GuanoMetadataRouter,
ProcessingTaskRouter,
RecordingAnnotationRouter,
RecordingRouter,
RecordingTagRouter,
SpeciesRouter,
VettingRouter,
)
from bats_ai.core.views.nabat import NABatConfigurationRouter, NABatRecordingRouter
logger = logging.getLogger(__name__)
class OAuth2Auth(HttpBearer):
def __init__(self, scopes: list[str] | None = None) -> None:
super().__init__()
self.scopes = scopes if scopes is not None else []
def authenticate(self, request: HttpRequest, token: str) -> AccessToken | None:
oauthlib_core = get_oauthlib_core()
# This also sets `request.user`,
# which Ninja does not: https://github.com/vitalik/django-ninja/issues/76
valid, r = oauthlib_core.verify_request(request, scopes=self.scopes)
if valid:
# Any truthy return is success, but give the full AccessToken for Ninja to set as
# `request.auth`.
request.user = r.access_token.user
return r.access_token
return None
api = NinjaAPI(auth=OAuth2Auth())
api.add_router('/recording/', RecordingRouter)
api.add_router('/species/', SpeciesRouter)
api.add_router('/grts/', GRTSCellsRouter)
api.add_router('/guano/', GuanoMetadataRouter)
api.add_router('/recording-annotation/', RecordingAnnotationRouter)
api.add_router('/export-annotation/', ExportAnnotationRouter)
api.add_router('/configuration/', ConfigurationRouter)
api.add_router('/processing-task/', ProcessingTaskRouter)
api.add_router('/recording-tag/', RecordingTagRouter)
api.add_router('/nabat/recording/', NABatRecordingRouter)
api.add_router('/nabat/configuration/', NABatConfigurationRouter)
api.add_router('/vetting/', VettingRouter)