diff --git a/backend/feed_engine/fetcher.py b/backend/feed_engine/fetcher.py index 6f4324f..8ca4617 100644 --- a/backend/feed_engine/fetcher.py +++ b/backend/feed_engine/fetcher.py @@ -111,7 +111,7 @@ import ssl from dataclasses import dataclass from urllib.error import HTTPError, URLError -from urllib.parse import urlsplit +from urllib.parse import urlsplit, urlunsplit from urllib.request import HTTPSHandler, Request, build_opener import certifi @@ -133,7 +133,7 @@ def validate_url(url: str) -> str: value = url.strip() parts = urlsplit(value) - if parts.scheme not in {"http", "https"} or not parts.netloc: + if parts.scheme not in {"http", "https"} or not parts.netloc.strip(): raise FeedEngineError( "INVALID_URL", "Feed URL must be an absolute http or https URL.", @@ -141,7 +141,12 @@ def validate_url(url: str) -> str: context={"url": url}, ) - print("[VALIDATE URL]", repr(url)) + clean_netloc = parts.netloc.strip() + clean_path = parts.path.strip() or "/" + clean_query = parts.query.strip() + value = urlunsplit((parts.scheme, clean_netloc, clean_path, clean_query, "")) + + print("[VALIDATE URL]", repr(url), "->", repr(value)) return value diff --git a/backend/scripts/build_sidecar.py b/backend/scripts/build_sidecar.py index ee2a1be..cf52bbd 100644 --- a/backend/scripts/build_sidecar.py +++ b/backend/scripts/build_sidecar.py @@ -31,6 +31,7 @@ from __future__ import annotations import argparse +import os import shutil import subprocess import sys @@ -83,6 +84,9 @@ def build_binary(output_dir: str | None): shutil.rmtree(DIST_DIR, ignore_errors=True) shutil.rmtree(BUILD_DIR, ignore_errors=True) + schema_dir = BACKEND_DIR / "db" / "schema" + add_data_sep = ";" if sys.platform == "win32" else ":" + subprocess.run( [ sys.executable, @@ -95,6 +99,8 @@ def build_binary(output_dir: str | None): "mercury-backend", "--collect-all", "certifi", + "--add-data", + f"{schema_dir}{add_data_sep}db{os.sep}schema", str(SIDECAR_ENTRY), ], check=True,