Hermes Agent commited on
Commit
f800904
·
1 Parent(s): 701239e

chore(ops): temporary tmdb_probe diagnostic endpoint

Browse files
Files changed (1) hide show
  1. apex/gateway/ops.py +38 -0
apex/gateway/ops.py CHANGED
@@ -177,6 +177,44 @@ async def ops_read(path: str, tail: int = 0, lines: int = 200, request: Request
177
  return JSONResponse({"ok": True, "path": normalized, "size": size, "content": text})
178
 
179
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
180
  @router.post("/apex/ops/jellyfin/reset")
181
  async def ops_jellyfin_reset(request: Request):
182
  """Remove everything under /data/jellyfin and lay down a clean directory skeleton."""
 
177
  return JSONResponse({"ok": True, "path": normalized, "size": size, "content": text})
178
 
179
 
180
+ @router.get("/apex/ops/tmdb_probe")
181
+ async def ops_tmdb_probe(tmdb_id: int = 1248251, request: Request = None):
182
+ """Diagnostic: fetch a TMDB movie detail the same way tg_streamer does and
183
+ return the raw bytes + decoded original_title so encoding divergence between
184
+ the Space runtime and local dev can be pinned down."""
185
+ if not _is_admin(request):
186
+ return _denied()
187
+ import aiohttp
188
+ import socket
189
+ import urllib.parse
190
+
191
+ tmdb_key = os.environ.get("TMDB_API_KEY", "").strip().strip('"')
192
+ if not tmdb_key:
193
+ tmdb_key = os.environ.get("APEX_TMDB_API_KEY", "").strip().strip('"')
194
+ if not tmdb_key:
195
+ return JSONResponse({"ok": False, "error": "no TMDB_API_KEY in env"})
196
+ qs = urllib.parse.urlencode({"api_key": tmdb_key})
197
+ url = f"https://api.themoviedb.org/3/movie/{tmdb_id}?{qs}"
198
+ try:
199
+ connector = aiohttp.TCPConnector(family=socket.AF_INET)
200
+ async with aiohttp.ClientSession(connector=connector) as session:
201
+ async with session.get(url, timeout=15) as resp:
202
+ raw = await resp.read()
203
+ j = await resp.json()
204
+ return JSONResponse({
205
+ "ok": True,
206
+ "status": resp.status,
207
+ "content_type": resp.headers.get("Content-Type"),
208
+ "raw_hex_head": raw[:512].hex(),
209
+ "raw_head": raw[:512].decode("utf-8", errors="replace"),
210
+ "title": j.get("title"),
211
+ "original_title": j.get("original_title"),
212
+ "original_title_repr": repr(j.get("original_title")),
213
+ })
214
+ except Exception as exc:
215
+ return JSONResponse({"ok": False, "error": f"{type(exc).__name__}: {exc}"})
216
+
217
+
218
  @router.post("/apex/ops/jellyfin/reset")
219
  async def ops_jellyfin_reset(request: Request):
220
  """Remove everything under /data/jellyfin and lay down a clean directory skeleton."""