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
4
2
3
+ import asyncpg
5
4
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 ]]:
7
19
"""
8
20
>>> find_one_sql('tbl', {'foo': 10, 'bar': 'baz'})
9
21
('SELECT * FROM tbl WHERE bar=$1 AND foo=$2', ['baz', 10])
@@ -17,12 +29,19 @@ def find_one_sql(table, filter_, fields=None):
17
29
return sql , values
18
30
19
31
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 )
23
40
24
41
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 ]]:
26
45
"""
27
46
>>> insert_sql('tbl', {'foo': 'bar', 'id': 1})
28
47
('INSERT INTO tbl (foo, id) VALUES ($1, $2) RETURNING id', ['bar', 1])
@@ -43,12 +62,16 @@ def insert_sql(table, data, returning="id"):
43
62
return sql , values
44
63
45
64
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 )
49
70
50
71
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 ]]:
52
75
"""
53
76
>>> update_sql('tbl', {'foo': 'a', 'bar': 1}, {'bar': 2, 'baz': 'b'})
54
77
('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):
61
84
return sql , up_vals + where_vals
62
85
63
86
64
- def delete (conn , table , filter_ ):
87
+ def delete (
88
+ conn : asyncpg .pool .PoolConnectionProxy , table : str , filter_ : dict [str , Any ]
89
+ ) -> Awaitable [str ]:
65
90
sql , values = delete_sql (table , filter_ )
66
91
return conn .execute (sql , * values )
67
92
68
93
69
- def delete_sql (table , filter_ ) :
94
+ def delete_sql (table : str , filter_ : dict [ str , Any ]) -> tuple [ str , list [ Any ]] :
70
95
"""
71
96
>>> delete_sql('tbl', {'foo': 10, 'bar': 'baz'})
72
97
('DELETE FROM tbl WHERE bar=$1 AND foo=$2', ['baz', 10])
@@ -77,7 +102,7 @@ def delete_sql(table, filter_):
77
102
return sql , values
78
103
79
104
80
- def _pairs (keys , * , start = 1 , sep = " AND " ):
105
+ def _pairs (keys : Iterable [ str ] , * , start : int = 1 , sep : str = " AND " ) -> str :
81
106
"""
82
107
>>> _pairs(['foo', 'bar', 'baz'], sep=', ')
83
108
'foo=$1, bar=$2, baz=$3'
@@ -87,7 +112,7 @@ def _pairs(keys, *, start=1, sep=" AND "):
87
112
return sep .join (f"{ k } =${ i } " for i , k in enumerate (keys , start ))
88
113
89
114
90
- def _placeholders (variables ) :
115
+ def _placeholders (variables : Iterable [ Any ]) -> list [ Any ] :
91
116
"""Returns placeholders by number of variables
92
117
93
118
>>> _placeholders(['foo', 'bar', 1])
@@ -96,7 +121,7 @@ def _placeholders(variables):
96
121
return [f"${ i } " for i , _ in enumerate (variables , 1 )]
97
122
98
123
99
- def _split_dict (dic ) :
124
+ def _split_dict (dic : dict [ str , Any ]) -> tuple [ list [ str ], list [ Any ]] :
100
125
"""Split dict into sorted keys and values
101
126
102
127
>>> _split_dict({'b': 2, 'a': 1})
0 commit comments