Skip to content

Commit 279c1bb

Browse files
authored
Merge pull request #102 from elixir-europe/101-cli-should-handle-errors-in-any-case
Raises an error if the MARS receipt contains errors
2 parents 82f9f51 + d4539eb commit 279c1bb

4 files changed

Lines changed: 32 additions & 24 deletions

File tree

mars-cli/mars_lib/authentication.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ def is_valid_provider(cls, provider: str):
2424

2525

2626
def load_credentials(
27-
credentials_file: Union[io.TextIOWrapper, str]
27+
credentials_file: Union[io.TextIOWrapper, str],
2828
) -> dict[str, dict[str, str]]:
2929
"""
3030
Validate the credentials.

mars-cli/mars_lib/isa_json.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -304,7 +304,7 @@ def add_accession_to_data_file_node(node: DataFile, accession_number: str) -> No
304304

305305

306306
def create_accession_characteristic_category(
307-
node: Union[Study, Assay]
307+
node: Union[Study, Assay],
308308
) -> Tuple[str, MaterialAttribute]:
309309
"""
310310
creates a new characteristic category for the accession number.
@@ -348,7 +348,7 @@ def fetch_existing_accession_data_file_comment(node: DataFile) -> Comment:
348348

349349

350350
def fetch_existing_characteristic_category(
351-
node: Union[Study, Assay]
351+
node: Union[Study, Assay],
352352
) -> Tuple[str, MaterialAttribute]:
353353
"""
354354
Fetches the existing characteristic category for the accession number.

mars-cli/mars_lib/submit.py

Lines changed: 28 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -230,17 +230,17 @@ def submit_to_biosamples(
230230
).model_dump(by_alias=True, exclude_none=True),
231231
)
232232

233-
if result.status_code != 200:
234-
body = (
235-
result.request.body.decode()
236-
if isinstance(result.request.body, bytes)
237-
else result.request.body or ""
238-
)
239-
raise requests.HTTPError(
240-
f"Request towards BioSamples failed!\nRequest:\nMethod:{result.request.method}\nStatus:{result.status_code}\nURL:{result.request.url}\nHeaders:{result.request.headers}\nBody:{body}"
241-
)
233+
if result.status_code == 200 and not result.json().get("errors", []):
234+
return result
242235

243-
return result
236+
body = (
237+
result.request.body.decode()
238+
if isinstance(result.request.body, bytes)
239+
else result.request.body or ""
240+
)
241+
raise requests.HTTPError(
242+
f"Request towards BioSamples failed!\nRequest:\nMethod:{result.request.method}\nStatus:{result.status_code}\nURL:{result.request.url}\nHeaders:{result.request.headers}\nBody:{body}"
243+
)
244244

245245

246246
def upload_to_metabolights(
@@ -282,6 +282,14 @@ def upload_to_metabolights(
282282
timeout=120,
283283
)
284284
submission_response.raise_for_status()
285+
if submission_response.json().get("errors", []):
286+
response_body = submission_response.request.body
287+
if isinstance(response_body, bytes):
288+
response_body = response_body.decode("utf-8")
289+
raise requests.HTTPError(
290+
f"Request towards MetaboLights failed!\nRequest:\nMethod:{submission_response.request.method}\nStatus:{submission_response.status_code}\nURL:{submission_response.request.url}\nHeaders:{submission_response.request.headers}\nBody:{response_body}"
291+
)
292+
285293
result = submission_response.json()
286294
except Exception as exc:
287295
raise exc
@@ -368,17 +376,17 @@ def submit_to_ena(
368376
).model_dump(by_alias=True, exclude_none=True),
369377
)
370378

371-
if result.status_code != 200:
372-
body = (
373-
result.request.body.decode()
374-
if isinstance(result.request.body, bytes)
375-
else result.request.body or ""
376-
)
377-
raise requests.HTTPError(
378-
f"Request towards ENA failed!\nRequest:\nMethod:{result.request.method}\nStatus:{result.status_code}\nURL:{submission_url}\nParams: ['webinUserName': {params.get('webinUserName')}, 'webinPassword': ****]\nHeaders:{result.request.headers}\nBody:{body}"
379-
)
379+
if result.status_code == 200 and not result.json().get("errors", []):
380+
return result
380381

381-
return result
382+
body = (
383+
result.request.body.decode()
384+
if isinstance(result.request.body, bytes)
385+
else result.request.body or ""
386+
)
387+
raise requests.HTTPError(
388+
f"Request towards ENA failed!\nRequest:\nMethod:{result.request.method}\nStatus:{result.status_code}\nURL:{submission_url}\nParams: ['webinUserName': {params.get('webinUserName')}, 'webinPassword': ****]\nHeaders:{result.request.headers}\nBody:{body}"
389+
)
382390

383391

384392
def upload_to_ena(

mars-cli/setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ def run(self):
3838
extras_require={
3939
"test": [
4040
# Dependencies for testing only
41-
"black",
41+
"black == 25.1.*",
4242
"ruff",
4343
"pytest",
4444
"pytest-cov",

0 commit comments

Comments
 (0)