ungana

Unnamed repository; edit this file 'description' to name the repository.
Info | Log | Files | Refs | README

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:
Mungana/store/fs_store.py | 10+++++++---
Mungana/store/wala_store.py | 33+++++++++++++++++----------------
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