Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 36 additions & 15 deletions weeb_cli/commands/serve_restful.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,39 @@ def _quality_score(q: str) -> int:
return 1
return 0

def _serialize_anime_result(result):
"""Serialize AnimeResult to dict."""
return {
"id": result.id,
"title": result.title,
"type": getattr(result, "type", ""),
"cover": getattr(result, "cover", ""),
"year": getattr(result, "year", None),
}

def _serialize_episode(episode):
"""Serialize Episode to dict."""
return {
"id": episode.id,
"number": episode.number,
"title": getattr(episode, "title", ""),
"season": getattr(episode, "season", 1),
"url": getattr(episode, "url", ""),
}

def _serialize_stream(stream):
"""Serialize StreamLink to dict."""
return {
"url": stream.url,
"quality": stream.quality,
"server": getattr(stream, "server", "default"),
"headers": getattr(stream, "headers", {}),
"subtitles": getattr(stream, "subtitles", ""),
}

# Import provider functions at module level for easier mocking
from weeb_cli.providers.registry import get_provider, list_providers as list_all_providers


@restful_app.callback(invoke_without_command=True)
def serve_restful(
Expand Down Expand Up @@ -77,9 +110,6 @@ def serve_restful(
stream=sys.stdout,
)

# Import provider functions
from weeb_cli.providers.registry import get_provider, list_providers as list_all_providers

# Create Flask app
flask_app = Flask(__name__)

Expand Down Expand Up @@ -148,10 +178,7 @@ def api_search():

try:
results = provider.search(query)
return jsonify([
{"id": r.id, "title": r.title, "type": r.type, "cover": r.cover, "year": r.year}
for r in results
])
return jsonify([_serialize_anime_result(r) for r in results])
except Exception as e:
log.error(f"Search error: {e}")
return jsonify({"error": str(e)}), 500
Expand Down Expand Up @@ -189,10 +216,7 @@ def api_episodes():
except ValueError:
return jsonify({"error": "Invalid season number"}), 400

return jsonify([
{"id": e.id, "number": e.number, "title": e.title, "season": e.season, "url": e.url}
for e in eps
])
return jsonify([_serialize_episode(e) for e in eps])
except Exception as e:
log.error(f"Episodes error: {e}")
return jsonify({"error": str(e)}), 500
Expand Down Expand Up @@ -238,10 +262,7 @@ def api_streams():
ep = target[0]
links = provider.get_streams(anime_id, ep.id)

return jsonify([
{"url": s.url, "quality": s.quality, "server": s.server, "headers": s.headers, "subtitles": s.subtitles}
for s in links
])
return jsonify([_serialize_stream(s) for s in links])
except Exception as e:
log.error(f"Streams error: {e}")
return jsonify({"error": str(e)}), 500
Expand Down
Loading