1
- from httpx import AsyncClient
1
+ from httpx import AsyncClient , Response
2
+
3
+ from postgrest_py .constants import FILTER_OPERATORS
2
4
3
5
4
6
class RequestBuilder :
@@ -8,54 +10,148 @@ def __init__(self, session: AsyncClient, path: str) -> None:
8
10
self .json = {}
9
11
self .http_method = "GET"
10
12
11
- def select (self , columns : str ) -> GetRequestBuilder :
13
+ def select (self , columns : str ):
12
14
self .session .params ["select" ] = columns
13
15
self .http_method = "GET"
14
16
return GetRequestBuilder .from_request_builder (self )
15
17
16
- def insert (self , json : dict , * , upsert = False ) -> RequestBuilder :
18
+ def insert (self , json : dict , * , upsert = False ):
17
19
self .session .headers [
18
20
"Prefer"
19
21
] = f"return=representation{ ',resolution=merge-duplicates' if upsert else '' } "
20
22
self .json = json
21
23
self .http_method = "POST"
22
24
return self
23
25
24
- def update (self , json : dict ) -> RequestBuilder :
26
+ def update (self , json : dict ):
25
27
self .session .headers ["Prefer" ] = "return=representation"
26
28
self .json = json
27
29
self .http_method = "PATCH"
28
30
return self
29
31
30
- def delete (self ) -> RequestBuilder :
32
+ def delete (self ):
31
33
self .http_method = "DELETE"
32
34
return self
33
35
36
+ async def execute (self ) -> Response :
37
+ r = await self .session .request (self .http_method , self .path , json = self .json )
38
+ return r
39
+
40
+ def filter_in (self , column : str , operator : str , criteria : str ):
41
+ self .session .params [column ] = f"{ operator } .{ criteria } "
42
+ return self
43
+
44
+ def filter (self , column : str , operator : str , criteria : str ):
45
+ """Alias to Self.filter_in()."""
46
+
47
+ return self .filter_in (column , operator , criteria )
48
+
49
+ def filter_out (self , column : str , operator : str , criteria : str ):
50
+ self .session .params [column ] = f"not.{ operator } .{ criteria } "
51
+ return self
52
+
53
+ def not_ (self , column : str , operator : str , criteria : str ):
54
+ """Alias to Self.filter_out()."""
55
+
56
+ return self .filter_out (column , operator , criteria )
57
+
58
+ def eq (self , column : str , criteria : str ):
59
+ return self .filter_in (column , "eq" , criteria )
60
+
61
+ def neq (self , column : str , criteria : str ):
62
+ return self .filter_in (column , "neq" , criteria )
63
+
64
+ def gt (self , column : str , criteria : str ):
65
+ return self .filter_in (column , "gt" , criteria )
66
+
67
+ def lt (self , column : str , criteria : str ):
68
+ return self .filter_in (column , "lt" , criteria )
69
+
70
+ def gte (self , column : str , criteria : str ):
71
+ return self .filter_in (column , "gte" , criteria )
72
+
73
+ def lte (self , column : str , criteria : str ):
74
+ return self .filter_in (column , "lte" , criteria )
75
+
76
+ def like (self , column : str , criteria : str ):
77
+ return self .filter_in (column , "like" , criteria )
78
+
79
+ def ilike (self , column : str , criteria : str ):
80
+ return self .filter_in (column , "ilike" , criteria )
81
+
82
+ def is_ (self , column : str , criteria : str ):
83
+ return self .filter_in (column , "is" , criteria )
84
+
85
+ def in_ (self , column : str , criteria : str ):
86
+ return self .filter_in (column , "in" , criteria )
87
+
88
+ def fts (self , column : str , criteria : str ):
89
+ return self .filter_in (column , "fts" , criteria )
90
+
91
+ def plfts (self , column : str , criteria : str ):
92
+ return self .filter_in (column , "plfts" , criteria )
93
+
94
+ def phfts (self , column : str , criteria : str ):
95
+ return self .filter_in (column , "phfts" , criteria )
96
+
97
+ def wfts (self , column : str , criteria : str ):
98
+ return self .filter_in (column , "wfts" , criteria )
99
+
100
+ def cs (self , column : str , criteria : str ):
101
+ return self .filter_in (column , "cs" , criteria )
102
+
103
+ def cd (self , column : str , criteria : str ):
104
+ return self .filter_in (column , "cd" , criteria )
105
+
106
+ def ova (self , column : str , criteria : str ):
107
+ return self .filter_in (column , "ova" , criteria )
108
+
109
+ def ovr (self , column : str , criteria : str ):
110
+ return self .filter_in (column , "ovr" , criteria )
111
+
112
+ def sl (self , column : str , criteria : str ):
113
+ return self .filter_in (column , "sl" , criteria )
114
+
115
+ def sr (self , column : str , criteria : str ):
116
+ return self .filter_in (column , "sr" , criteria )
117
+
118
+ def nxr (self , column : str , criteria : str ):
119
+ return self .filter_in (column , "nxr" , criteria )
120
+
121
+ def nxl (self , column : str , criteria : str ):
122
+ return self .filter_in (column , "nxl" , criteria )
123
+
124
+ def adj (self , column : str , criteria : str ):
125
+ return self .filter_in (column , "adj" , criteria )
126
+
127
+ # def or_(self, column: str, criteria: str):
128
+ # return self.filter_in(column, "or", criteria)
129
+
34
130
35
131
class GetRequestBuilder (RequestBuilder ):
36
132
@classmethod
37
- def from_request_builder (cls , builder : RequestBuilder ) -> GetRequestBuilder :
133
+ def from_request_builder (cls , builder : RequestBuilder ):
38
134
result = cls (builder .session , builder .path )
39
135
result .json = builder .json
40
136
result .http_method = builder .http_method
41
137
return result
42
138
43
- def order (self , column : str , * , desc = False , nullsfirst = False ) -> GetRequestBuilder :
139
+ def order (self , column : str , * , desc = False , nullsfirst = False ):
44
140
self .session .params [
45
141
"order"
46
142
] = f"{ column } { '.desc' if desc else '' } { '.nullsfirst' if nullsfirst else '' } "
47
143
return self
48
144
49
- def limit (self , size : int , * , start = 0 ) -> GetRequestBuilder :
145
+ def limit (self , size : int , * , start = 0 ):
50
146
self .session .headers ["Range-Unit" ] = "items"
51
147
self .session .headers ["Range" ] = f"{ start } -{ start + size - 1 } "
52
148
return self
53
149
54
- def range (self , start : int , end : int ) -> GetRequestBuilder :
150
+ def range (self , start : int , end : int ):
55
151
self .session .headers ["Range-Unit" ] = "items"
56
152
self .session .headers ["Range" ] = f"{ start } -{ end - 1 } "
57
153
return self
58
154
59
- def single (self ) -> GetRequestBuilder :
155
+ def single (self ):
60
156
self .session .headers ["Accept" ] = "application/vnd.pgrst.object+json"
61
157
return self
0 commit comments