-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathownership.py
29 lines (25 loc) · 998 Bytes
/
ownership.py
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
__all__ = ["setup_ownership_method"]
from sqlalchemy import delete
from sqlalchemy.dialects.postgresql import insert
from sqlalchemy.ext.asyncio import AsyncSession
from src.schemas import OwnershipEnum
async def setup_ownership_method(
OwnershipClass, session: AsyncSession, object_id: int, user_id: int, role_alias: OwnershipEnum
) -> None:
if role_alias is OwnershipEnum.delete:
# just delete row
q = delete(OwnershipClass).where(OwnershipClass.user_id == user_id).where(OwnershipClass.object_id == object_id)
await session.execute(q)
else:
# insert or update
q = insert(OwnershipClass).values(
user_id=user_id,
object_id=object_id,
role_alias=role_alias,
)
q = q.on_conflict_do_update(
index_elements=[OwnershipClass.user_id, OwnershipClass.object_id],
set_={"role_alias": role_alias.value},
)
await session.execute(q)
await session.commit()