-
-
Notifications
You must be signed in to change notification settings - Fork 50
Expand file tree
/
Copy pathtagging.py
More file actions
82 lines (74 loc) · 1.66 KB
/
tagging.py
File metadata and controls
82 lines (74 loc) · 1.66 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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
from sqlalchemy import Row, text
from sqlalchemy.ext.asyncio import AsyncConnection
async def insert_tag(
*,
table: str,
id_column: str,
id_: int,
tag_: str,
user_id: int,
expdb: AsyncConnection,
) -> None:
await expdb.execute(
text(
f"""
INSERT INTO {table}(`{id_column}`, `tag`, `uploader`)
VALUES (:id, :tag, :user_id)
""",
),
parameters={"id": id_, "tag": tag_, "user_id": user_id},
)
async def select_tag(
*,
table: str,
id_column: str,
id_: int,
tag_: str,
expdb: AsyncConnection,
) -> Row | None:
result = await expdb.execute(
text(
f"""
SELECT `{id_column}` as id, `tag`, `uploader`
FROM {table}
WHERE `{id_column}` = :id AND `tag` = :tag
""",
),
parameters={"id": id_, "tag": tag_},
)
return result.one_or_none()
async def remove_tag(
*,
table: str,
id_column: str,
id_: int,
tag_: str,
expdb: AsyncConnection,
) -> None:
await expdb.execute(
text(
f"""
DELETE FROM {table}
WHERE `{id_column}` = :id AND `tag` = :tag
""",
),
parameters={"id": id_, "tag": tag_},
)
async def select_tags(
*,
table: str,
id_column: str,
id_: int,
expdb: AsyncConnection,
) -> list[str]:
result = await expdb.execute(
text(
f"""
SELECT `tag`
FROM {table}
WHERE `{id_column}` = :id
""",
),
parameters={"id": id_},
)
return [row.tag for row in result.all()]