Coverage for /usr/local/lib/python3.12/site-packages/prefect/server/api/admin.py: 88%
34 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-07 02:04 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-07 02:04 +0000
1"""
2Routes for admin-level interactions with the Prefect REST API.
3"""
5from fastapi import Depends, HTTPException, status
7import prefect
8import prefect.settings
9from prefect.server import models, schemas
10from prefect.server.database import PrefectDBInterface, provide_database_interface
11from prefect.server.exceptions import ObjectNotFoundError
12from prefect.server.utilities.server import PrefectRouter
14router: PrefectRouter = PrefectRouter(prefix="/admin", tags=["Admin"])
17@router.get("/settings")
18async def read_settings() -> prefect.settings.Settings:
19 """
20 Get the current Prefect REST API settings.
22 Secret setting values will be obfuscated.
23 """
24 return prefect.settings.get_current_settings()
27@router.get("/version")
28async def read_version() -> str:
29 """Returns the Prefect version number"""
30 return prefect.__version__
33@router.get("/storage")
34async def read_server_default_result_storage(
35 db: PrefectDBInterface = Depends(provide_database_interface),
36) -> schemas.core.ServerDefaultResultStorage:
37 """Get the configured server default result storage block."""
38 async with db.session_context() as session:
39 return await models.storage_defaults.read_server_default_result_storage(
40 session=session
41 )
44@router.put("/storage")
45async def update_server_default_result_storage(
46 configuration: schemas.core.ServerDefaultResultStorageUpdate,
47 db: PrefectDBInterface = Depends(provide_database_interface),
48) -> schemas.core.ServerDefaultResultStorage:
49 """Set the server default result storage block."""
50 try:
51 async with db.session_context(begin_transaction=True) as session:
52 block_document_id = configuration.default_result_storage_block_id
53 await models.storage_defaults.validate_server_default_result_storage_block(
54 session=session,
55 block_document_id=block_document_id,
56 )
58 await models.storage_defaults.write_server_default_result_storage(
59 session=session,
60 storage_default=schemas.core.ServerDefaultResultStorage(
61 default_result_storage_block_id=block_document_id
62 ),
63 )
65 return await models.storage_defaults.read_server_default_result_storage(
66 session=session
67 )
68 except ObjectNotFoundError as exc:
69 raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail=str(exc))
70 except ValueError as exc:
71 raise HTTPException(
72 status_code=status.HTTP_422_UNPROCESSABLE_CONTENT,
73 detail=str(exc),
74 )
77@router.delete("/storage", status_code=status.HTTP_204_NO_CONTENT)
78async def clear_server_default_result_storage(
79 db: PrefectDBInterface = Depends(provide_database_interface),
80) -> None:
81 """Clear the configured server default result storage block."""
82 async with db.session_context(begin_transaction=True) as session:
83 await models.storage_defaults.clear_server_default_result_storage(
84 session=session
85 )