From 9ef07e0973b468addf6aae9cd39638b23652d99f Mon Sep 17 00:00:00 2001
From: Pablo Boizeau <pablo.boizeau@ird.fr>
Date: Thu, 16 Jan 2025 15:27:40 +0100
Subject: [PATCH 1/9] Factorize code

---
 dinamis_sdk/__init__.py | 2 +-
 dinamis_sdk/cli.py      | 8 ++++----
 dinamis_sdk/signing.py  | 1 -
 3 files changed, 5 insertions(+), 6 deletions(-)

diff --git a/dinamis_sdk/__init__.py b/dinamis_sdk/__init__.py
index b117818..74ef432 100644
--- a/dinamis_sdk/__init__.py
+++ b/dinamis_sdk/__init__.py
@@ -2,7 +2,7 @@
 
 # flake8: noqa
 
-__version__ = "0.4.0"
+__version__ = "0.4.1"
 from dinamis_sdk.signing import (
     sign,
     sign_inplace,
diff --git a/dinamis_sdk/cli.py b/dinamis_sdk/cli.py
index 2d013d4..57469f7 100644
--- a/dinamis_sdk/cli.py
+++ b/dinamis_sdk/cli.py
@@ -17,7 +17,7 @@ def app() -> None:
     """Click group for dinamis sdk subcommands."""
 
 
-def http(route: str):
+def _http(route: str):
     """Perform an HTTP request."""
     session = create_session()
     ret = session.get(
@@ -31,17 +31,17 @@ def http(route: str):
 
 def create_key() -> Dict[str, str]:
     """Create an API key."""
-    return http("create_api_key").json()
+    return _http("create_api_key").json()
 
 
 def list_keys() -> List[str]:
     """List all generated API keys."""
-    return http("list_api_keys").json()
+    return _http("list_api_keys").json()
 
 
 def revoke_key(key: str):
     """Revoke an API key."""
-    http(f"revoke_api_key?access_key={key}")
+    _http(f"revoke_api_key?access_key={key}")
     log.info(f"API key {key} revoked")
 
 
diff --git a/dinamis_sdk/signing.py b/dinamis_sdk/signing.py
index 152d57a..a203583 100644
--- a/dinamis_sdk/signing.py
+++ b/dinamis_sdk/signing.py
@@ -3,7 +3,6 @@ S3 Module.
 
 Revamp of Microsoft Planetary Computer SAS, using S3 and custom URL signing
 endpoint instead.
-
 """
 
 import collections.abc
-- 
GitLab


From 9ccd38caa706b5f5f2446a75c65ad75bd802aa6e Mon Sep 17 00:00:00 2001
From: Pablo Boizeau <pablo.boizeau@ird.fr>
Date: Thu, 16 Jan 2025 15:36:20 +0100
Subject: [PATCH 2/9] Fix put cache

---
 dinamis_sdk/signing.py | 19 +++++++++++++------
 1 file changed, 13 insertions(+), 6 deletions(-)

diff --git a/dinamis_sdk/signing.py b/dinamis_sdk/signing.py
index a203583..6f3a559 100644
--- a/dinamis_sdk/signing.py
+++ b/dinamis_sdk/signing.py
@@ -12,7 +12,7 @@ import time
 from copy import deepcopy
 from datetime import datetime, timezone
 from functools import singledispatch
-from typing import Any, Dict, List, Mapping, TypeVar, cast
+from typing import Any, Dict, List, Mapping, TypeVar, cast, Enum
 from urllib.parse import parse_qs, urlparse
 
 import packaging.version
@@ -152,7 +152,14 @@ def sign_string(url: str, copy: bool = True) -> str:
     return sign_urls(urls=[url])[url]
 
 
-def _generic_sign_urls(urls: List[str], route: str) -> Dict[str, str]:
+class SignURLRoute(Enum):
+    """Different routes used for sign_urls."""
+
+    SIGN_URLS_GET = "sign_urls"
+    SIGN_URLS_PUT = "sign_urls_put"
+
+
+def _generic_sign_urls(urls: List[str], route: SignURLRoute) -> Dict[str, str]:
     """Sign URLs with a S3 Token.
 
     Signing URL allows read access to files in storage.
@@ -203,12 +210,12 @@ def _generic_sign_urls(urls: List[str], route: str) -> Dict[str, str]:
 
 def sign_urls(urls: List[str]) -> Dict[str, str]:
     """Sign multiple URLs for GET."""
-    return _generic_sign_urls(urls=urls, route="sign_urls")
+    return _generic_sign_urls(urls=urls, route=SignURLRoute(SignURLRoute.SIGN_URLS_GET))
 
 
 def sign_urls_put(urls: List[str]) -> Dict[str, str]:
     """Sign multiple URLs for PUT."""
-    return _generic_sign_urls(urls=urls, route="sign_urls_put")
+    return _generic_sign_urls(urls=urls, route=SignURLRoute(SignURLRoute.SIGN_URLS_PUT))
 
 
 def sign_url_put(url: str) -> str:
@@ -435,7 +442,7 @@ sign_reference_file = sign_mapping
 
 def _generic_get_signed_urls(
     urls: List[str],
-    route: str,
+    route: SignURLRoute,
 ) -> Dict[str, SignedURL]:
     """
     Get multiple signed URLs.
@@ -459,7 +466,7 @@ def _generic_get_signed_urls(
     signed_urls = {}
     for url in urls:
         signed_url_in_cache = CACHE.get(url)
-        if signed_url_in_cache:
+        if signed_url_in_cache and route == SignURLRoute.SIGN_URLS_GET:
             log.debug("URL %s already in cache", url)
             ttl = signed_url_in_cache.ttl()
             log.debug("URL %s TTL is %s", url, ttl)
-- 
GitLab


From f0bf25f3483bd777b27dc638ddd2f84c40b7ac82 Mon Sep 17 00:00:00 2001
From: Pablo Boizeau <pablo.boizeau@ird.fr>
Date: Thu, 16 Jan 2025 15:40:02 +0100
Subject: [PATCH 3/9] Fix typo

---
 dinamis_sdk/signing.py | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/dinamis_sdk/signing.py b/dinamis_sdk/signing.py
index 6f3a559..48921cc 100644
--- a/dinamis_sdk/signing.py
+++ b/dinamis_sdk/signing.py
@@ -12,7 +12,8 @@ import time
 from copy import deepcopy
 from datetime import datetime, timezone
 from functools import singledispatch
-from typing import Any, Dict, List, Mapping, TypeVar, cast, Enum
+from typing import Any, Dict, List, Mapping, TypeVar, cast
+from enum import Enum
 from urllib.parse import parse_qs, urlparse
 
 import packaging.version
-- 
GitLab


From 67a148feb9e2e5c69798dbd683a9bdf4fc71c95e Mon Sep 17 00:00:00 2001
From: Cresson Remi <remi.cresson@irstea.fr>
Date: Thu, 16 Jan 2025 16:07:11 +0100
Subject: [PATCH 4/9] Update file test_push.py

---
 tests/test_push.py | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/tests/test_push.py b/tests/test_push.py
index d009e30..9c97f5d 100755
--- a/tests/test_push.py
+++ b/tests/test_push.py
@@ -7,8 +7,11 @@ local_filename = "/tmp/toto.txt"
 with open(local_filename, "w") as f:
     f.write("hello world")
 
-pushed = dinamis_sdk.push(
-    local_filename=local_filename,
-    target_url="https://s3-data.meso.umontpellier.fr/sm1-gdc-tests/titi.txt",
-)
+for i in range(2):
+    pushed = dinamis_sdk.push(
+        local_filename=local_filename,
+        target_url="https://s3-data.meso.umontpellier.fr/sm1-gdc-tests/titi.txt",
+    )
+    print(f"Push #{i} ok")
+
 print("Done")
-- 
GitLab


From 58f5029955ee5047b305fd5603169ed96cef3a1a Mon Sep 17 00:00:00 2001
From: Pablo Boizeau <pablo.boizeau@ird.fr>
Date: Thu, 16 Jan 2025 16:09:36 +0100
Subject: [PATCH 5/9] Fix

---
 dinamis_sdk/signing.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/dinamis_sdk/signing.py b/dinamis_sdk/signing.py
index 48921cc..4e36c11 100644
--- a/dinamis_sdk/signing.py
+++ b/dinamis_sdk/signing.py
@@ -498,7 +498,7 @@ def _generic_get_signed_urls(
             params: Dict[str, Any] = {"urls": not_signed_urls_chunk}
             if ENV.dinamis_sdk_url_duration:
                 params["duration_seconds"] = ENV.dinamis_sdk_url_duration
-            response = session.post(route=route, params=params)
+            response = session.post(route=route.value, params=params)
             signed_url_batch = SignedURLBatch(**response.json())
             if not signed_url_batch:
                 raise ValueError(
-- 
GitLab


From 69324ddee5137f126bd62aa0ea4d5df655de26c1 Mon Sep 17 00:00:00 2001
From: Pablo Boizeau <pablo.boizeau@ird.fr>
Date: Thu, 16 Jan 2025 16:14:15 +0100
Subject: [PATCH 6/9] Set static analysis test allow_failure to false

---
 .gitlab-ci.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index b28b07a..e1bcbe9 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -41,7 +41,7 @@ pip_install:
 
 .static_analysis_base:
   stage: Static Analysis
-  allow_failure: true
+  allow_failure: false
 
 flake8:
   needs:
-- 
GitLab


From 974346035e9e30b76e30abf6d62f1e76831dd3d8 Mon Sep 17 00:00:00 2001
From: Cresson Remi <remi.cresson@irstea.fr>
Date: Thu, 16 Jan 2025 16:18:17 +0100
Subject: [PATCH 7/9] Update file test_push.py

---
 tests/test_push.py | 19 +++++++++++++------
 1 file changed, 13 insertions(+), 6 deletions(-)

diff --git a/tests/test_push.py b/tests/test_push.py
index 9c97f5d..4aa2940 100755
--- a/tests/test_push.py
+++ b/tests/test_push.py
@@ -1,17 +1,24 @@
 #!/usr/bin/env python
 
 import dinamis_sdk
+import requests
 
 local_filename = "/tmp/toto.txt"
 
 with open(local_filename, "w") as f:
     f.write("hello world")
 
-for i in range(2):
-    pushed = dinamis_sdk.push(
-        local_filename=local_filename,
-        target_url="https://s3-data.meso.umontpellier.fr/sm1-gdc-tests/titi.txt",
-    )
-    print(f"Push #{i} ok")
+target_url = "https://s3-data.meso.umontpellier.fr/sm1-gdc-tests/titi.txt"
+
+dinamis_sdk.push(local_filename=local_filename, target_url=target_url)
+print("push OK")
+
+signed_url = dinamis_sdk.sign(target_url)
+print("sign OK")
+
+res = requests.get(signed_url, stream=True, timeout=10)
+assert res.status_code == 200, "Get NOK"
+print("get OK")
+
 
 print("Done")
-- 
GitLab


From c64ef93633974de865aaf8e2806d8c19efeb0304 Mon Sep 17 00:00:00 2001
From: Pablo Boizeau <pablo.boizeau@ird.fr>
Date: Thu, 16 Jan 2025 16:27:48 +0100
Subject: [PATCH 8/9] Update push test and push cache logic

---
 dinamis_sdk/signing.py |  2 +-
 tests/test_push.py     | 13 +++++++------
 2 files changed, 8 insertions(+), 7 deletions(-)

diff --git a/dinamis_sdk/signing.py b/dinamis_sdk/signing.py
index 4e36c11..9621314 100644
--- a/dinamis_sdk/signing.py
+++ b/dinamis_sdk/signing.py
@@ -512,7 +512,7 @@ def _generic_get_signed_urls(
                 )
             for url, href in signed_url_batch.hrefs.items():
                 signed_url = SignedURL(expiry=signed_url_batch.expiry, href=href)
-                if route == "sign_urls":
+                if route == SignURLRoute.SIGN_URLS_GET:
                     # Only put GET urls in cache
                     CACHE[url] = signed_url
                 signed_urls[url] = signed_url
diff --git a/tests/test_push.py b/tests/test_push.py
index 4aa2940..f61c719 100755
--- a/tests/test_push.py
+++ b/tests/test_push.py
@@ -1,19 +1,20 @@
 #!/usr/bin/env python
 
-import dinamis_sdk
 import requests
 
-local_filename = "/tmp/toto.txt"
+import dinamis_sdk
+
+LOCAL_FILENAME = "/tmp/toto.txt"
 
-with open(local_filename, "w") as f:
+with open(LOCAL_FILENAME, "w") as f:
     f.write("hello world")
 
-target_url = "https://s3-data.meso.umontpellier.fr/sm1-gdc-tests/titi.txt"
+TARGET_URL = "https://s3-data.meso.umontpellier.fr/sm1-gdc-tests/titi.txt"
 
-dinamis_sdk.push(local_filename=local_filename, target_url=target_url)
+dinamis_sdk.push(local_filename=LOCAL_FILENAME, target_url=TARGET_URL)
 print("push OK")
 
-signed_url = dinamis_sdk.sign(target_url)
+signed_url = dinamis_sdk.sign(TARGET_URL)
 print("sign OK")
 
 res = requests.get(signed_url, stream=True, timeout=10)
-- 
GitLab


From e2f238adee97808df5f06fae9367434d6d9a6326 Mon Sep 17 00:00:00 2001
From: DE BOISSIEU FLORIAN <florian.deboissieu@inrae.fr>
Date: Thu, 16 Jan 2025 16:41:37 +0100
Subject: [PATCH 9/9] add ref to rstactheia

---
 README.md | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/README.md b/README.md
index d80f17b..c1842f6 100644
--- a/README.md
+++ b/README.md
@@ -27,3 +27,5 @@ api = pystac_client.Client.open(
 
 For more information read the 
 [documentation](https://cdos-pub.pages.mia.inra.fr/dinamis-sdk).
+
+For `R` users, check [rstactheia](https://cdos-pub.pages.mia.inra.fr/rstactheia).
-- 
GitLab