commit 5e6133b30cb19435c8f47f1ecc55bf04a53e7539
parent 9701373ca7a2a6a8e9bd142ecb70b48808daea77
Author: Carlosokumu <carlosokumu254@gmail.com>
Date: Thu, 6 Nov 2025 18:02:20 +0300
chore: handle string concatenation using urllib.parse
Diffstat:
2 files changed, 24 insertions(+), 19 deletions(-)
diff --git a/ungana/store/fs_store.py b/ungana/store/fs_store.py
@@ -1,5 +1,5 @@
from pathlib import Path
-from urllib.parse import urlparse
+from urllib.parse import urlparse, urlunparse
from .base_store import UnganaBaseStore
@@ -13,14 +13,17 @@ class UnganaFSStore(UnganaBaseStore):
base_path = self._resolve_base_path(base_uri)
target = base_path.joinpath(key)
target.parent.mkdir(parents=True, exist_ok=True)
+
with open(target, "wb") as f:
f.write(data)
- return f"file://{target}"
+
+ return urlunparse(("file", "", str(target), "", "", ""))
def get(self, base_uri: str, key: str) -> bytes:
base_path = self._resolve_base_path(base_uri)
target = base_path.joinpath(key)
+
if not target.exists():
raise FileNotFoundError(f"{target} does not exist")
- return target.read_bytes()
+ return target.read_bytes()
+\ No newline at end of file
diff --git a/ungana/store/wala_store.py b/ungana/store/wala_store.py
@@ -1,28 +1,28 @@
import requests
-from urllib.parse import urljoin, urlparse
-import requests
from urllib.parse import urlparse, urljoin
from .base_store import UnganaBaseStore
class UnganaWalaStore(UnganaBaseStore):
-
- def put(self, base_url: str, key: str, data: bytes) -> str:
+ def _validate_http_url(self, base_url: str) -> None:
parsed = urlparse(base_url)
- if not parsed.scheme.startswith("http"):
+ if parsed.scheme not in ("http", "https"):
raise ValueError(f"Invalid Wala URL: {base_url}")
- resp = requests.put(base_url, data=data, timeout=10)
- resp.raise_for_status()
- digest = resp.text.strip()
- return urljoin(base_url.rstrip("/") + "/", digest)
+
+ def put(self, base_url: str, key: str, data: bytes) -> str:
+ self._validate_http_url(base_url)
+
+ response = requests.put(base_url, data=data, timeout=10)
+ response.raise_for_status()
+ digest = response.text.strip()
+
+ return urljoin(base_url if base_url.endswith("/") else base_url + "/", digest)
def get(self, base_url: str, key: str) -> bytes:
- parsed = urlparse(base_url)
- if not parsed.scheme.startswith("http"):
- raise ValueError(f"Invalid Wala URL: {base_url}")
- target_url = urljoin(base_url.rstrip("/") + "/", key)
- resp = requests.get(target_url, timeout=10)
- resp.raise_for_status()
- return resp.content
+ self._validate_http_url(base_url)
+ target_url = urljoin(base_url if base_url.endswith("/") else base_url + "/", key)
+ response = requests.get(target_url, timeout=10)
+ response.raise_for_status()
+ return response.content
+\ No newline at end of file