From d70fadb477011636bf343ee79ba77f05e4101954 Mon Sep 17 00:00:00 2001
From: Adrien Rougny <adrienrougny@gmail.com>
Date: Thu, 21 Mar 2024 16:06:59 +0100
Subject: [PATCH] update

---
 src/minervapy/__init__.py | 49 +++++++++++++++++++--------------------
 1 file changed, 24 insertions(+), 25 deletions(-)

diff --git a/src/minervapy/__init__.py b/src/minervapy/__init__.py
index 451366b..5ac655c 100644
--- a/src/minervapy/__init__.py
+++ b/src/minervapy/__init__.py
@@ -2,8 +2,10 @@ import dataclasses
 
 import requests
 import marshmallow
+import io
+import zipfile
 
-base_url = "https://covid19map.elixir-luxembourg.org/minerva/api/"
+base_url = None
 auth_cookies = None
 
 _handlers = {
@@ -41,10 +43,9 @@ def _get_objects(url, schema_cls, many=False, additional_data=None):
         cookies = auth_cookies
     else:
         cookies = None
-    print(url)
     response = requests.get(url, cookies=cookies)
-    if response.status_code != 200:
-        raise Exception(f"{response.status_code}, {response.json()}")
+    if not response.ok:
+        raise Exception(f"{response.status_code}, {response.text}")
     json = response.json()
     if many:
         json_with_additional_data = [e | additional_data for e in json]
@@ -86,7 +87,7 @@ class Model:
     name: str
     projectId: str
 
-    def download(self, format="celldesigner", output=None):
+    def download(self, format="celldesigner", output=None, unzip=True):
         return download_model(self, format=format, output=output)
 
 
@@ -130,11 +131,20 @@ class _ModelSchema(marshmallow.Schema):
         return Model(**data)
 
 
+def set_base_url(url):
+    global base_url
+    base_url = url
+
+
 def log_in(username, password):
     url = _join_urls([base_url, _login_url])
-    result = requests.post(url, data={"login": username, "password": password})
+    response = requests.post(
+        url, data={"login": username, "password": password}
+    )
+    if not response.ok:
+        raise Exception(f"{response.status_code}, {response.text}")
     global auth_cookies
-    auth_cookies = result.cookies
+    auth_cookies = response.cookies
 
 
 def log_out():
@@ -187,6 +197,7 @@ def download_model(
     project_or_project_id=None,
     format="celldesigner",
     output=None,
+    unzip=True,
 ):
     if not isinstance(model_or_model_id, Model):
         if project_or_project_id is None:
@@ -210,33 +221,21 @@ def download_model(
     url = _join_urls(
         [base_url, _projects_url, project_id, _models_url, download_url]
     )
-    print(url)
-    result = requests.get(
+    response = requests.get(
         url,
         params={"handlerClass": _handlers[format]},
     )
-    content = result.content
+    content = response.content
+    if unzip and response.headers["Content-Type"] == "application/zip":
+        z = zipfile.ZipFile(io.BytesIO(content))
+        zip_infos = z.infolist()
+        content = z.read(zip_infos[0])
     if output is not None:
         with open(output, "wb") as f:
             f.write(content)
     return content
 
 
-def write_model(
-    model_or_model_id,
-    file_path,
-    project_or_project_id=None,
-    format="celldesigner",
-):
-    content = download_model(
-        model_or_model_id,
-        project_or_project_id=project_or_project_id,
-        format=format,
-    )
-    with open(file_path, "wb") as f:
-        f.write(content)
-
-
 def get_formats():
     formats = []
     return formats
-- 
GitLab