203737cc3f
Implements ImmichClient with list_albums, get_album, get_thumbnail, get_original methods; wraps connection errors as ConnectionError. Adds /proxy/thumb/<asset_id> and /proxy/original/<asset_id> Flask routes. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
31 lines
1.1 KiB
Python
31 lines
1.1 KiB
Python
import requests
|
|
|
|
|
|
class ImmichClient:
|
|
def __init__(self, base_url: str, api_key: str):
|
|
self.base_url = base_url.rstrip("/")
|
|
self.headers = {"Authorization": f"Bearer {api_key}"}
|
|
|
|
def _get(self, path: str, **kwargs):
|
|
try:
|
|
r = requests.get(f"{self.base_url}{path}",
|
|
headers=self.headers, timeout=10, **kwargs)
|
|
r.raise_for_status()
|
|
return r
|
|
except requests.exceptions.ConnectionError as e:
|
|
raise ConnectionError(f"Cannot reach Immich: {e}") from e
|
|
|
|
def list_albums(self) -> list:
|
|
return self._get("/api/albums").json()
|
|
|
|
def get_album(self, album_id: str) -> dict:
|
|
return self._get(f"/api/albums/{album_id}",
|
|
params={"withoutAssets": "false"}).json()
|
|
|
|
def get_thumbnail(self, asset_id: str) -> bytes:
|
|
return self._get(f"/api/assets/{asset_id}/thumbnail",
|
|
params={"size": "preview"}).content
|
|
|
|
def get_original(self, asset_id: str) -> bytes:
|
|
return self._get(f"/api/assets/{asset_id}/original").content
|