w22
This commit is contained in:
@@ -14,6 +14,21 @@ Použití:
|
|||||||
python collect_and_import.py --limit 500 # jen prvních N (pro test)
|
python collect_and_import.py --limit 500 # jen prvních N (pro test)
|
||||||
python collect_and_import.py --dry-run # jen spočítá, nic nezpracuje
|
python collect_and_import.py --dry-run # jen spočítá, nic nezpracuje
|
||||||
python collect_and_import.py --batch-size 200
|
python collect_and_import.py --batch-size 200
|
||||||
|
|
||||||
|
Předpoklad pro překlad cest:
|
||||||
|
V DB jsou cesty vždy uloženy jako nativní Tower1 Linux cesta:
|
||||||
|
/mnt/user/ZalohaVsechObrazku/...
|
||||||
|
|
||||||
|
Skript může běžet na dvou platformách:
|
||||||
|
|
||||||
|
Windows (libovolný hostname):
|
||||||
|
Tower1 je dostupný jako \\Tower1\\ZalohaVsechObrazku\\...
|
||||||
|
→ /mnt/user/ZalohaVsechObrazku → \\Tower1\\ZalohaVsechObrazku, / → \\
|
||||||
|
|
||||||
|
Tower1 (Linux, hostname = Tower1):
|
||||||
|
Cesta z DB je již nativní, žádný překlad není potřeba.
|
||||||
|
|
||||||
|
Skript nikdy neběží na tower (prvním Unraid serveru).
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
@@ -62,15 +77,10 @@ DB_CONFIG = {
|
|||||||
"dbname": os.getenv("DB_NAME", "fotky_buzalkovi"),
|
"dbname": os.getenv("DB_NAME", "fotky_buzalkovi"),
|
||||||
}
|
}
|
||||||
|
|
||||||
# Překlad: Linux NFS cesta (jak je uložena v DB) → Windows UNC
|
# Kanonický prefix cest uložených v DB (vždy nativní Tower1 Linux cesta)
|
||||||
# Záznamy v DB mohou mít různé Linux prefixy podle toho, odkud byl scan spuštěn.
|
DB_PATH_PREFIX = "/mnt/user/ZalohaVsechObrazku"
|
||||||
PATH_MAPPINGS = [
|
# Odpovídající Windows UNC přístup k Tower1 share
|
||||||
("/mnt/remotes/TOWER1.LAN_ZalohaVsechObrazku", "//Tower1/ZalohaVsechObrazku"),
|
WINDOWS_UNC_PREFIX = r"\\Tower1\ZalohaVsechObrazku"
|
||||||
("/mnt/user/ZalohaVsechObrazku", "//Tower1/ZalohaVsechObrazku"),
|
|
||||||
]
|
|
||||||
# Zpětná kompatibilita
|
|
||||||
LINUX_PREFIX = PATH_MAPPINGS[0][0]
|
|
||||||
WINDOWS_UNC = PATH_MAPPINGS[0][1]
|
|
||||||
|
|
||||||
SUPPORTED_EXTENSIONS = {".jpg", ".jpeg", ".png", ".heic", ".tiff", ".tif", ".webp", ".bmp"}
|
SUPPORTED_EXTENSIONS = {".jpg", ".jpeg", ".png", ".heic", ".tiff", ".tif", ".webp", ".bmp"}
|
||||||
|
|
||||||
@@ -95,16 +105,26 @@ MIME_MAP = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
# Překlad cesty: Linux NFS → Windows UNC
|
# Překlad cesty: DB (nativní Tower1 Linux) → lokální přístupová cesta
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
def linux_to_windows(linux_path: str) -> Path:
|
def db_path_to_local(db_path: str) -> Path:
|
||||||
"""Převede Linux NFS cestu na Windows UNC podle tabulky PATH_MAPPINGS."""
|
"""
|
||||||
for linux_prefix, windows_unc in PATH_MAPPINGS:
|
Převede cestu z DB na lokálně přístupnou cestu podle platformy.
|
||||||
if linux_path.startswith(linux_prefix):
|
|
||||||
rel = linux_path[len(linux_prefix):] # začíná /
|
Windows: /mnt/user/ZalohaVsechObrazku/... → \\Tower1\\ZalohaVsechObrazku\\...
|
||||||
return Path(windows_unc + rel)
|
Tower1: cesta je již nativní, vrátí beze změny.
|
||||||
return Path(linux_path)
|
"""
|
||||||
|
if os.name == "nt":
|
||||||
|
# Windows — přeložíme na UNC a vyměníme lomítka
|
||||||
|
if db_path.startswith(DB_PATH_PREFIX):
|
||||||
|
rel = db_path[len(DB_PATH_PREFIX):] # začíná /
|
||||||
|
return Path(WINDOWS_UNC_PREFIX + rel.replace("/", "\\"))
|
||||||
|
# Neznámý prefix — vrátíme jak je a necháme selhat při otevření
|
||||||
|
return Path(db_path)
|
||||||
|
else:
|
||||||
|
# Tower1 (Linux) — cesta v DB je již nativní
|
||||||
|
return Path(db_path)
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
# GPS
|
# GPS
|
||||||
@@ -622,10 +642,10 @@ def process_one(zaloha_id: int, linux_path: str) -> tuple[Optional[tuple], str]:
|
|||||||
if ext not in SUPPORTED_EXTENSIONS:
|
if ext not in SUPPORTED_EXTENSIONS:
|
||||||
return None, f"nepodporovana pripona: {ext}"
|
return None, f"nepodporovana pripona: {ext}"
|
||||||
|
|
||||||
win_path = linux_to_windows(linux_path)
|
local_path = db_path_to_local(linux_path)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
rec = collect_photo(win_path)
|
rec = collect_photo(local_path)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return None, str(e)
|
return None, str(e)
|
||||||
|
|
||||||
@@ -645,6 +665,12 @@ def process_one(zaloha_id: int, linux_path: str) -> tuple[Optional[tuple], str]:
|
|||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
|
import socket
|
||||||
|
hostname = socket.gethostname().lower()
|
||||||
|
if hostname == "tower":
|
||||||
|
print("[ERROR] Tento skript nesmí běžet na 'tower'. Spusť ho na Tower1 nebo Windows.")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
parser = argparse.ArgumentParser(
|
parser = argparse.ArgumentParser(
|
||||||
description="collect_and_import.py — Sběr metadat ze zálohy a import do DB"
|
description="collect_and_import.py — Sběr metadat ze zálohy a import do DB"
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user