summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorA Farzat <a@farzat.xyz>2025-10-06 13:14:34 +0300
committerA Farzat <a@farzat.xyz>2025-10-06 13:14:34 +0300
commit6e2520431a8108c5cc310d94b60aa47218c87787 (patch)
treee8ac7a7e99dc70a12900a2b4babdccce5d5eac33
parent4434445995512c68ac5a0aa6c81450142bb1e100 (diff)
downloadcsca5028-6e2520431a8108c5cc310d94b60aa47218c87787.tar.gz
csca5028-6e2520431a8108c5cc310d94b60aa47218c87787.zip
Add new Flask routes to get subscriptions info
-rw-r--r--components/subscriptions/main.py3
-rw-r--r--wsgi/__init__.py18
-rw-r--r--wsgi/utils.py14
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()),
+ }