Skip to content

Commit 3c1cbf2

Browse files
committed
Add GET only filters
1 parent 4379b7f commit 3c1cbf2

File tree

2 files changed

+33
-5
lines changed

2 files changed

+33
-5
lines changed

postgrest_py/client.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ def __init__(self, base_url: str, *, schema="public") -> None:
1111
"Accept-Profile": schema,
1212
"Content-Profile": schema,
1313
}
14-
self.session = AsyncClient(base_url=base_url, headers=headers)
14+
self.session = AsyncClient(base_url=base_url, params={}, headers=headers)
1515

1616
async def __aenter__(self) -> Client:
1717
return self

postgrest_py/request_builder.py

+32-4
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,13 @@ class RequestBuilder:
55
def __init__(self, session: AsyncClient, path: str) -> None:
66
self.session = session
77
self.path = path
8-
self.params = {}
98
self.json = {}
109
self.http_method = "GET"
1110

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
1413
self.http_method = "GET"
15-
return self
14+
return GetRequestBuilder.from_request_builder(self)
1615

1716
def insert(self, json: dict, *, upsert=False) -> RequestBuilder:
1817
self.session.headers[
@@ -31,3 +30,32 @@ def update(self, json: dict) -> RequestBuilder:
3130
def delete(self) -> RequestBuilder:
3231
self.http_method = "DELETE"
3332
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

Comments
 (0)