Skip to content
This repository was archived by the owner on Sep 8, 2025. It is now read-only.

Commit f814d36

Browse files
feat: add apierror
1 parent 1e2526e commit f814d36

File tree

1 file changed

+20
-45
lines changed

1 file changed

+20
-45
lines changed

postgrest/_sync/request_builder.py

Lines changed: 20 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -35,14 +35,14 @@ def __init__(
3535
headers: Headers,
3636
params: QueryParams,
3737
json: Union[dict, list],
38-
max_retries: int,
38+
max_retries: int = 0,
3939
) -> None:
4040
self.session = session
4141
self.path = path
4242
self.http_method = http_method
4343
self.headers = headers
4444
self.params = params
45-
self.json = None if http_method in {"GET", "HEAD"} else json
45+
self.json = json
4646
self.max_retries = max_retries
4747
self.attempt = 1
4848

@@ -58,7 +58,6 @@ def execute(self) -> APIResponse[_ReturnT]:
5858
Raises:
5959
:class:`APIError` If the API raised an error.
6060
"""
61-
6261
try:
6362
r = self.session.request(
6463
self.http_method,
@@ -78,8 +77,8 @@ def execute(self) -> APIResponse[_ReturnT]:
7877
if "+json" not in self.headers.get("Accept"):
7978
return body
8079
return APIResponse[_ReturnT].from_http_request_response(r)
81-
# else:
82-
# raise APIError(r.json())
80+
else:
81+
raise APIError(r.json())
8382
except (TimeoutException, NetworkError, ReadError) as e:
8483
if self.attempt < self.max_retries:
8584
self.attempt += 1
@@ -88,8 +87,6 @@ def execute(self) -> APIResponse[_ReturnT]:
8887
raise APIError(r.json()) from e
8988
except JSONDecodeError:
9089
raise APIError(generate_default_error_message(r))
91-
except Exception as e:
92-
raise APIError(r.json())
9390

9491

9592
class SyncSingleRequestBuilder(Generic[_ReturnT]):
@@ -101,7 +98,7 @@ def __init__(
10198
headers: Headers,
10299
params: QueryParams,
103100
json: dict,
104-
max_retries: int,
101+
max_retries: int = 0,
105102
) -> None:
106103
self.session = session
107104
self.path = path
@@ -124,7 +121,6 @@ def execute(self) -> SingleAPIResponse[_ReturnT]:
124121
Raises:
125122
:class:`APIError` If the API raised an error.
126123
"""
127-
128124
try:
129125
r = self.session.request(
130126
self.http_method,
@@ -147,8 +143,6 @@ def execute(self) -> SingleAPIResponse[_ReturnT]:
147143
raise APIError(r.json()) from e
148144
except JSONDecodeError:
149145
raise APIError(generate_default_error_message(r))
150-
except Exception as e:
151-
raise APIError(r.json())
152146

153147

154148
class SyncMaybeSingleRequestBuilder(SyncSingleRequestBuilder[_ReturnT]):
@@ -202,20 +196,13 @@ def __init__(
202196
headers: Headers,
203197
params: QueryParams,
204198
json: dict,
205-
max_retries: int,
199+
max_retries: int = 0,
206200
) -> None:
207201
get_origin_and_cast(BaseFilterRequestBuilder[_ReturnT]).__init__(
208202
self, session, headers, params
209203
)
210204
get_origin_and_cast(SyncSingleRequestBuilder[_ReturnT]).__init__(
211-
self,
212-
session,
213-
path,
214-
http_method,
215-
headers,
216-
params,
217-
json,
218-
max_retries,
205+
self, session, path, http_method, headers, params, json, max_retries
219206
)
220207

221208

@@ -229,7 +216,7 @@ def __init__(
229216
headers: Headers,
230217
params: QueryParams,
231218
json: dict,
232-
max_retries: int,
219+
max_retries: int = 0,
233220
) -> None:
234221
self.max_retries = max_retries
235222
get_origin_and_cast(BaseSelectRequestBuilder[_ReturnT]).__init__(
@@ -308,7 +295,7 @@ def csv(self) -> SyncSingleRequestBuilder[str]:
308295

309296

310297
class SyncRequestBuilder(Generic[_ReturnT]):
311-
def __init__(self, session: SyncClient, path: str, max_retries: int) -> None:
298+
def __init__(self, session: SyncClient, path: str, max_retries: int = 0) -> None:
312299
self.session = session
313300
self.path = path
314301
self.max_retries = max_retries
@@ -327,17 +314,17 @@ def select(
327314
Returns:
328315
:class:`SyncSelectRequestBuilder`
329316
"""
330-
if not (columns or count):
331-
raise ValueError("Specify columns or count")
317+
if count and not any(count_method == count for count_method in CountMethod):
318+
valid_methods = ", ".join(
319+
[count_method.value for count_method in CountMethod]
320+
)
321+
raise ValueError(
322+
f"{count} is not a valid option. Available options are: {valid_methods}"
323+
)
324+
332325
method, params, headers, json = pre_select(*columns, count=count, head=head)
333326
return SyncSelectRequestBuilder[_ReturnT](
334-
self.session,
335-
self.path,
336-
method,
337-
headers,
338-
params,
339-
json,
340-
self.max_retries,
327+
self.session, self.path, method, headers, params, json, self.max_retries
341328
)
342329

343330
def insert(
@@ -370,13 +357,7 @@ def insert(
370357
default_to_null=default_to_null,
371358
)
372359
return SyncQueryRequestBuilder[_ReturnT](
373-
self.session,
374-
self.path,
375-
method,
376-
headers,
377-
params,
378-
json,
379-
self.max_retries,
360+
self.session, self.path, method, headers, params, json, self.max_retries
380361
)
381362

382363
def upsert(
@@ -413,13 +394,7 @@ def upsert(
413394
default_to_null=default_to_null,
414395
)
415396
return SyncQueryRequestBuilder[_ReturnT](
416-
self.session,
417-
self.path,
418-
method,
419-
headers,
420-
params,
421-
json,
422-
self.max_retries,
397+
self.session, self.path, method, headers, params, json, self.max_retries
423398
)
424399

425400
def update(

0 commit comments

Comments
 (0)