diff options
| author | A Farzat <a@farzat.xyz> | 2025-10-06 13:14:34 +0300 |
|---|---|---|
| committer | A Farzat <a@farzat.xyz> | 2025-10-06 13:14:34 +0300 |
| commit | 6e2520431a8108c5cc310d94b60aa47218c87787 (patch) | |
| tree | e8ac7a7e99dc70a12900a2b4babdccce5d5eac33 | |
| parent | 4434445995512c68ac5a0aa6c81450142bb1e100 (diff) | |
| download | csca5028-6e2520431a8108c5cc310d94b60aa47218c87787.tar.gz csca5028-6e2520431a8108c5cc310d94b60aa47218c87787.zip | |
Add new Flask routes to get subscriptions info
| -rw-r--r-- | components/subscriptions/main.py | 3 | ||||
| -rw-r--r-- | wsgi/__init__.py | 18 | ||||
| -rw-r--r-- | wsgi/utils.py | 14 |
3 files changed, 32 insertions, 3 deletions
diff --git a/components/subscriptions/main.py b/components/subscriptions/main.py index afd1d54..f9bcf21 100644 --- a/components/subscriptions/main.py +++ b/components/subscriptions/main.py @@ -26,6 +26,9 @@ class Subscription: if len(self.videos) and type(self.videos[0]) != VideoTuple: self.videos = [VideoTuple._make(vid) for vid in self.videos] + def get_new_vids(self) -> List[VideoTuple]: + return [vid for vid in self.videos if vid.published > self.last_viewed] + def fetch(self) -> None: try: rss = parse(self.link) diff --git a/wsgi/__init__.py b/wsgi/__init__.py index d3343b0..d029c12 100644 --- a/wsgi/__init__.py +++ b/wsgi/__init__.py @@ -5,11 +5,23 @@ from components.videos import VideoTuple from flask import Flask from flask_cors import CORS +from .utils import vid_dicts_from_tuple_list, sub_info_from_dict + app = Flask(__name__) CORS(app) @app.route("/vid-from-link/<id>") def videos_from_link(id: str) -> List[Dict[str, Any]]: - sub = subscriptions.find_one({"_id": id}) - assert sub - return [VideoTuple._make(vid)._asdict() for vid in sub["videos"]] + sub_dict = subscriptions.find_one({"_id": id}) + assert sub_dict + return vid_dicts_from_tuple_list(sub_dict["videos"]) + +@app.route("/sub-info/<id>") +def sub_dict(id: str) -> Dict[str, Any]: + sub_dict = subscriptions.find_one({"_id": id}) + assert sub_dict + return sub_info_from_dict(sub_dict) + +@app.route("/subs-info") +def subs_info() -> List[Dict[str, Any]]: + return [sub_info_from_dict(sub_dict) for sub_dict in subscriptions.find()] diff --git a/wsgi/utils.py b/wsgi/utils.py new file mode 100644 index 0000000..2c9e1e5 --- /dev/null +++ b/wsgi/utils.py @@ -0,0 +1,14 @@ +from typing import Any, Dict, List +from components.subscriptions.main import Subscription +from components.subscriptions.typing import SubsDict +from components.videos import VideoTuple + +def vid_dicts_from_tuple_list(tuple_list: List[VideoTuple]) -> List[Dict[str, Any]]: + return [VideoTuple._make(vid)._asdict() for vid in tuple_list] + +def sub_info_from_dict(sub_dict: SubsDict) -> Dict[str, Any]: + return { + **sub_dict, + "videos": len(sub_dict["videos"]), + "new_vids": len(Subscription(**sub_dict).get_new_vids()), + } |
