Spaces:
Runtime error
Runtime error
| import json | |
| import urllib.request | |
| import urllib.parse | |
| import config | |
| def api_call(method, path, data=None, params=None): | |
| url = f"{config.API_URL}/{path}" | |
| if params: | |
| url += "?" + urllib.parse.urlencode(params) | |
| req = urllib.request.Request(url, headers=config.HEADERS, method=method) | |
| if data: | |
| req.data = json.dumps(data).encode() | |
| req.add_header("Content-Type", "application/json") | |
| try: | |
| resp = urllib.request.urlopen(req, timeout=15) | |
| return json.loads(resp.read()) | |
| except Exception as e: | |
| return {"error": str(e)} | |
| def ensure_tables(): | |
| api_call("POST", "db/exec", {"sql": """ | |
| CREATE TABLE IF NOT EXISTS archives ( | |
| id INTEGER PRIMARY KEY AUTOINCREMENT, | |
| archive_id TEXT UNIQUE NOT NULL, | |
| file_name TEXT NOT NULL, | |
| file_size INTEGER DEFAULT 0, | |
| account TEXT NOT NULL, | |
| media_id TEXT, | |
| media_type TEXT, | |
| title TEXT, | |
| year TEXT, | |
| genres TEXT, | |
| rating REAL, | |
| overview TEXT, | |
| poster_path TEXT, | |
| backdrop_path TEXT, | |
| imdb_id TEXT, | |
| tmdb_json TEXT, | |
| tags TEXT, | |
| timestamp TEXT NOT NULL, | |
| status TEXT DEFAULT 'archived', | |
| proxy_url TEXT, | |
| access_count INTEGER DEFAULT 0, | |
| created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP | |
| ) | |
| """}) | |
| api_call("POST", "db/exec", {"sql": """ | |
| CREATE TABLE IF NOT EXISTS stats ( | |
| id INTEGER PRIMARY KEY AUTOINCREMENT, | |
| archive_id TEXT, | |
| action TEXT, | |
| details TEXT, | |
| timestamp TEXT | |
| ) | |
| """}) | |
| api_call("POST", "db/exec", {"sql": """ | |
| CREATE TABLE IF NOT EXISTS proxy_cache ( | |
| id INTEGER PRIMARY KEY AUTOINCREMENT, | |
| file_name TEXT, | |
| archive_id TEXT, | |
| account TEXT, | |
| cache_path TEXT, | |
| expires_at TEXT, | |
| status TEXT DEFAULT 'active' | |
| ) | |
| """}) | |
| ensure_tables() | |