validops-east-1's picture
feat: gmail api integration
55ecbeb
Raw
History Blame Contribute Delete
1.48 kB
from __future__ import annotations
import time
from fastapi import APIRouter, HTTPException
from app.models.schemas import (
GoogleApiScopesResponse,
GoogleSetScopesRequest,
)
from app.services.google_scope_service import GoogleScopeError
from .deps import GENERATED, REFERENCE, SOURCE, get_scope_service
router = APIRouter()
@router.put("", response_model=GoogleApiScopesResponse)
async def set_google_scopes(body: GoogleSetScopesRequest) -> GoogleApiScopesResponse:
"""Set the current OAuth scopes for one or more Google integrations.
The selection is validated against the catalog and stored in memory as a
Python object structure (resets on restart). Pass ``reset: true`` to restore
recommended defaults.
"""
started = time.perf_counter()
service = get_scope_service()
try:
state = await service.set_current_scopes(
updates=body.apis or {}, reset=body.reset
)
plans = await service.load_all_plans()
data = service.build_data(plans, state)
return GoogleApiScopesResponse(
success=True,
time_ms=round((time.perf_counter() - started) * 1000, 3),
count=len(data),
total=len(data),
generated=GENERATED,
reference=REFERENCE,
source=SOURCE,
data=data,
)
except GoogleScopeError as exc:
raise HTTPException(status_code=exc.status_code, detail=exc.message) from exc