@@ -5,14 +5,13 @@ class RequestBuilder:
5
5
def __init__ (self , session : AsyncClient , path : str ) -> None :
6
6
self .session = session
7
7
self .path = path
8
- self .params = {}
9
8
self .json = {}
10
9
self .http_method = "GET"
11
10
12
- def select (self , columns : str ) -> RequestBuilder :
13
- self .params ["select" ] = columns
11
+ def select (self , columns : str ) -> GetRequestBuilder :
12
+ self .session . params ["select" ] = columns
14
13
self .http_method = "GET"
15
- return self
14
+ return GetRequestBuilder . from_request_builder ( self )
16
15
17
16
def insert (self , json : dict , * , upsert = False ) -> RequestBuilder :
18
17
self .session .headers [
@@ -31,3 +30,32 @@ def update(self, json: dict) -> RequestBuilder:
31
30
def delete (self ) -> RequestBuilder :
32
31
self .http_method = "DELETE"
33
32
return self
33
+
34
+
35
+ class GetRequestBuilder (RequestBuilder ):
36
+ @classmethod
37
+ def from_request_builder (cls , builder : RequestBuilder ) -> GetRequestBuilder :
38
+ result = cls (builder .session , builder .path )
39
+ result .json = builder .json
40
+ result .http_method = builder .http_method
41
+ return result
42
+
43
+ def order (self , column : str , * , desc = False , nullsfirst = False ) -> GetRequestBuilder :
44
+ self .session .params [
45
+ "order"
46
+ ] = f"{ column } { '.desc' if desc else '' } { '.nullsfirst' if nullsfirst else '' } "
47
+ return self
48
+
49
+ def limit (self , size : int , * , start = 0 ) -> GetRequestBuilder :
50
+ self .session .headers ["Range-Unit" ] = "items"
51
+ self .session .headers ["Range" ] = f"{ start } -{ start + size - 1 } "
52
+ return self
53
+
54
+ def range (self , start : int , end : int ) -> GetRequestBuilder :
55
+ self .session .headers ["Range-Unit" ] = "items"
56
+ self .session .headers ["Range" ] = f"{ start } -{ end - 1 } "
57
+ return self
58
+
59
+ def single (self ) -> GetRequestBuilder :
60
+ self .session .headers ["Accept" ] = "application/vnd.pgrst.object+json"
61
+ return self
0 commit comments