Skip to content

Commit

Permalink
Add GET only filters
Browse files Browse the repository at this point in the history
  • Loading branch information
lqmanh committed Aug 7, 2020
1 parent 4379b7f commit 3c1cbf2
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 5 deletions.
2 changes: 1 addition & 1 deletion postgrest_py/client.py
Expand Up @@ -11,7 +11,7 @@ def __init__(self, base_url: str, *, schema="public") -> None:
"Accept-Profile": schema,
"Content-Profile": schema,
}
self.session = AsyncClient(base_url=base_url, headers=headers)
self.session = AsyncClient(base_url=base_url, params={}, headers=headers)

async def __aenter__(self) -> Client:
return self
Expand Down
36 changes: 32 additions & 4 deletions postgrest_py/request_builder.py
Expand Up @@ -5,14 +5,13 @@ class RequestBuilder:
def __init__(self, session: AsyncClient, path: str) -> None:
self.session = session
self.path = path
self.params = {}
self.json = {}
self.http_method = "GET"

def select(self, columns: str) -> RequestBuilder:
self.params["select"] = columns
def select(self, columns: str) -> GetRequestBuilder:
self.session.params["select"] = columns
self.http_method = "GET"
return self
return GetRequestBuilder.from_request_builder(self)

def insert(self, json: dict, *, upsert=False) -> RequestBuilder:
self.session.headers[
Expand All @@ -31,3 +30,32 @@ def update(self, json: dict) -> RequestBuilder:
def delete(self) -> RequestBuilder:
self.http_method = "DELETE"
return self


class GetRequestBuilder(RequestBuilder):
@classmethod
def from_request_builder(cls, builder: RequestBuilder) -> GetRequestBuilder:
result = cls(builder.session, builder.path)
result.json = builder.json
result.http_method = builder.http_method
return result

def order(self, column: str, *, desc=False, nullsfirst=False) -> GetRequestBuilder:
self.session.params[
"order"
] = f"{column}{'.desc' if desc else ''}{'.nullsfirst' if nullsfirst else ''}"
return self

def limit(self, size: int, *, start=0) -> GetRequestBuilder:
self.session.headers["Range-Unit"] = "items"
self.session.headers["Range"] = f"{start}-{start + size - 1}"
return self

def range(self, start: int, end: int) -> GetRequestBuilder:
self.session.headers["Range-Unit"] = "items"
self.session.headers["Range"] = f"{start}-{end - 1}"
return self

def single(self) -> GetRequestBuilder:
self.session.headers["Accept"] = "application/vnd.pgrst.object+json"
return self

0 comments on commit 3c1cbf2

Please sign in to comment.