Coverage for /usr/local/lib/python3.12/site-packages/prefect/server/models/configuration.py: 62%
27 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
1from typing import Optional
3import sqlalchemy as sa
4from sqlalchemy.ext.asyncio import AsyncSession
6from prefect.server import schemas
7from prefect.server.database import PrefectDBInterface, db_injector, orm_models
10@db_injector
11async def write_configuration(
12 db: PrefectDBInterface,
13 session: AsyncSession,
14 configuration: schemas.core.Configuration,
15) -> orm_models.Configuration:
16 # first see if the key already exists
17 query = sa.select(db.Configuration).where(db.Configuration.key == configuration.key)
18 result = await session.execute(query) # type: ignore
19 existing_configuration = result.scalar()
20 # if it exists, update its value
21 if existing_configuration:
22 existing_configuration.value = configuration.value
23 # else create a new ORM object
24 else:
25 existing_configuration = db.Configuration(
26 key=configuration.key, value=configuration.value
27 )
28 session.add(existing_configuration)
29 await session.flush()
31 # clear the cache for this key after writing a value
32 db.queries.clear_configuration_value_cache_for_key(key=configuration.key)
34 return existing_configuration
37@db_injector
38async def delete_configuration(
39 db: PrefectDBInterface,
40 session: AsyncSession,
41 key: str,
42) -> bool:
43 query = sa.delete(db.Configuration).where(db.Configuration.key == key)
44 result = await session.execute(query)
45 db.queries.clear_configuration_value_cache_for_key(key=key)
46 return result.rowcount > 0
49@db_injector
50async def read_configuration(
51 db: PrefectDBInterface,
52 session: AsyncSession,
53 key: str,
54) -> Optional[schemas.core.Configuration]:
55 value = await db.queries.read_configuration_value(session=session, key=key)
56 return (
57 schemas.core.Configuration(key=key, value=value) if value is not None else None
58 )