Skip to content

Commit f5809f2

Browse files
committed
more
1 parent 02cb1d7 commit f5809f2

File tree

2 files changed

+61
-27
lines changed

2 files changed

+61
-27
lines changed

services/web/server/src/simcore_service_webserver/login/_sql.py

Lines changed: 42 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,21 @@
1-
def find_one(conn, table, filter_, fields=None):
2-
sql, values = find_one_sql(table, filter_, fields)
3-
return conn.fetchrow(sql, *values)
1+
from typing import Any, Awaitable, Iterable
42

3+
import asyncpg
54

6-
def find_one_sql(table, filter_, fields=None):
5+
6+
def find_one(
7+
conn: asyncpg.pool.PoolConnectionProxy,
8+
table: str,
9+
filter_: dict[str, Any],
10+
fields=None,
11+
) -> Awaitable[asyncpg.Record | None]:
12+
query, values = find_one_sql(table, filter_, fields)
13+
return conn.fetchrow(query, *values)
14+
15+
16+
def find_one_sql(
17+
table: str, filter_: dict[str, Any], fields: Iterable[str] | None = None
18+
) -> tuple[str, list[Any]]:
719
"""
820
>>> find_one_sql('tbl', {'foo': 10, 'bar': 'baz'})
921
('SELECT * FROM tbl WHERE bar=$1 AND foo=$2', ['baz', 10])
@@ -17,12 +29,19 @@ def find_one_sql(table, filter_, fields=None):
1729
return sql, values
1830

1931

20-
def insert(conn, table, data, returning="id"):
21-
sql, values = insert_sql(table, data, returning)
22-
return conn.fetchval(sql, *values)
32+
def insert(
33+
conn: asyncpg.pool.PoolConnectionProxy,
34+
table: str,
35+
data: dict[str, Any],
36+
returning: str = "id",
37+
) -> Awaitable[Any | None]:
38+
query, values = insert_sql(table, data, returning)
39+
return conn.fetchval(query, *values)
2340

2441

25-
def insert_sql(table, data, returning="id"):
42+
def insert_sql(
43+
table: str, data: dict[str, Any], returning: str = "id"
44+
) -> tuple[str, list[Any]]:
2645
"""
2746
>>> insert_sql('tbl', {'foo': 'bar', 'id': 1})
2847
('INSERT INTO tbl (foo, id) VALUES ($1, $2) RETURNING id', ['bar', 1])
@@ -43,12 +62,16 @@ def insert_sql(table, data, returning="id"):
4362
return sql, values
4463

4564

46-
def update(conn, table, filter_, updates):
47-
sql, values = update_sql(table, filter_, updates)
48-
return conn.execute(sql, *values)
65+
def update(
66+
conn: asyncpg.pool.PoolConnectionProxy, table: str, filter_, updates
67+
) -> Awaitable[str]:
68+
query, values = update_sql(table, filter_, updates)
69+
return conn.execute(query, *values)
4970

5071

51-
def update_sql(table, filter_, updates):
72+
def update_sql(
73+
table: str, filter_: dict[str, Any], updates: dict[str, Any]
74+
) -> tuple[str, list[Any]]:
5275
"""
5376
>>> update_sql('tbl', {'foo': 'a', 'bar': 1}, {'bar': 2, 'baz': 'b'})
5477
('UPDATE tbl SET bar=$1, baz=$2 WHERE bar=$3 AND foo=$4', [2, 'b', 1, 'a'])
@@ -61,12 +84,14 @@ def update_sql(table, filter_, updates):
6184
return sql, up_vals + where_vals
6285

6386

64-
def delete(conn, table, filter_):
87+
def delete(
88+
conn: asyncpg.pool.PoolConnectionProxy, table: str, filter_: dict[str, Any]
89+
) -> Awaitable[str]:
6590
sql, values = delete_sql(table, filter_)
6691
return conn.execute(sql, *values)
6792

6893

69-
def delete_sql(table, filter_):
94+
def delete_sql(table: str, filter_: dict[str, Any]) -> tuple[str, list[Any]]:
7095
"""
7196
>>> delete_sql('tbl', {'foo': 10, 'bar': 'baz'})
7297
('DELETE FROM tbl WHERE bar=$1 AND foo=$2', ['baz', 10])
@@ -77,7 +102,7 @@ def delete_sql(table, filter_):
77102
return sql, values
78103

79104

80-
def _pairs(keys, *, start=1, sep=" AND "):
105+
def _pairs(keys: Iterable[str], *, start: int = 1, sep: str = " AND ") -> str:
81106
"""
82107
>>> _pairs(['foo', 'bar', 'baz'], sep=', ')
83108
'foo=$1, bar=$2, baz=$3'
@@ -87,7 +112,7 @@ def _pairs(keys, *, start=1, sep=" AND "):
87112
return sep.join(f"{k}=${i}" for i, k in enumerate(keys, start))
88113

89114

90-
def _placeholders(variables):
115+
def _placeholders(variables: Iterable[Any]) -> list[Any]:
91116
"""Returns placeholders by number of variables
92117
93118
>>> _placeholders(['foo', 'bar', 1])
@@ -96,7 +121,7 @@ def _placeholders(variables):
96121
return [f"${i}" for i, _ in enumerate(variables, 1)]
97122

98123

99-
def _split_dict(dic):
124+
def _split_dict(dic: dict[str, Any]) -> tuple[list[str], list[Any]]:
100125
"""Split dict into sorted keys and values
101126
102127
>>> _split_dict({'b': 2, 'a': 1})

services/web/server/src/simcore_service_webserver/login/storage.py

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,11 @@ class ConfirmationTokenDict(BaseConfirmationTokenDict):
3838

3939
class AsyncpgStorage:
4040
def __init__(
41-
self, pool, *, user_table_name="users", confirmation_table_name="confirmations"
41+
self,
42+
pool: asyncpg.Pool,
43+
*,
44+
user_table_name: str = "users",
45+
confirmation_table_name: str = "confirmations",
4246
):
4347
self.pool = pool
4448
self.user_tbl = user_table_name
@@ -48,26 +52,29 @@ def __init__(
4852
# CRUD user
4953
#
5054

51-
async def get_user(self, with_data) -> asyncpg.Record:
55+
async def get_user(self, with_data: dict[str, Any]) -> asyncpg.Record:
5256
async with self.pool.acquire() as conn:
53-
return await _sql.find_one(conn, self.user_tbl, with_data)
57+
user = await _sql.find_one(conn, self.user_tbl, with_data)
58+
assert user # nosec
59+
return user
5460

55-
async def create_user(self, data: dict[str, Any]) -> asyncpg.Record:
61+
async def create_user(self, data: dict[str, Any]) -> dict[str, Any]:
5662
async with self.pool.acquire() as conn:
5763
user_id = await _sql.insert(conn, self.user_tbl, data)
5864
new_user = await _sql.find_one(conn, self.user_tbl, {"id": user_id})
65+
assert new_user # nosec
5966
data.update(
6067
id=new_user["id"],
6168
created_at=new_user["created_at"],
6269
primary_gid=new_user["primary_gid"],
6370
)
6471
return data
6572

66-
async def update_user(self, user, updates) -> asyncpg.Record:
73+
async def update_user(self, user: dict[str, Any], updates: dict[str, Any]) -> None:
6774
async with self.pool.acquire() as conn:
6875
await _sql.update(conn, self.user_tbl, {"id": user["id"]}, updates)
6976

70-
async def delete_user(self, user):
77+
async def delete_user(self, user: dict[str, Any]) -> None:
7178
async with self.pool.acquire() as conn:
7279
await _sql.delete(conn, self.user_tbl, {"id": user["id"]})
7380

@@ -96,12 +103,14 @@ async def create_confirmation(
96103
created_at=datetime.utcnow(),
97104
)
98105
c = await _sql.insert(
99-
conn, self.confirm_tbl, confirmation, returning="code"
106+
conn, self.confirm_tbl, dict(confirmation), returning="code"
100107
)
101108
assert numeric_code == c # nosec
102109
return confirmation
103110

104-
async def get_confirmation(self, filter_dict) -> ConfirmationTokenDict | None:
111+
async def get_confirmation(
112+
self, filter_dict: dict[str, Any]
113+
) -> ConfirmationTokenDict | None:
105114
if "user" in filter_dict:
106115
filter_dict["user_id"] = filter_dict.pop("user")["id"]
107116
async with self.pool.acquire() as conn:
@@ -121,14 +130,14 @@ async def delete_confirmation(self, confirmation: ConfirmationTokenDict):
121130
#
122131

123132
async def delete_confirmation_and_user(
124-
self, user, confirmation: ConfirmationTokenDict
133+
self, user: dict[str, Any], confirmation: ConfirmationTokenDict
125134
):
126135
async with self.pool.acquire() as conn, conn.transaction():
127136
await _sql.delete(conn, self.confirm_tbl, {"code": confirmation["code"]})
128137
await _sql.delete(conn, self.user_tbl, {"id": user["id"]})
129138

130139
async def delete_confirmation_and_update_user(
131-
self, user_id, updates, confirmation: ConfirmationTokenDict
140+
self, user_id: int, updates: dict[str, Any], confirmation: ConfirmationTokenDict
132141
):
133142
async with self.pool.acquire() as conn, conn.transaction():
134143
await _sql.delete(conn, self.confirm_tbl, {"code": confirmation["code"]})

0 commit comments

Comments
 (0)