aboutsummaryrefslogtreecommitdiff
path: root/data-collection/components/subscriptions/main.py
diff options
context:
space:
mode:
authorA Farzat <a@farzat.xyz>2025-08-21 09:36:13 +0300
committerA Farzat <a@farzat.xyz>2025-08-21 09:36:13 +0300
commit543810b5b5ac5d8e5174a48e8345ab9c92907677 (patch)
tree94c0b7b9488d989e2af5b78a0323324a0118cfe4 /data-collection/components/subscriptions/main.py
parent31e0e275bb07b9a72f0af2507b06127e849f3639 (diff)
downloadcsca5028-543810b5b5ac5d8e5174a48e8345ab9c92907677.tar.gz
csca5028-543810b5b5ac5d8e5174a48e8345ab9c92907677.zip
Refine database related methods in subscriptions class
Diffstat (limited to 'data-collection/components/subscriptions/main.py')
-rw-r--r--data-collection/components/subscriptions/main.py30
1 files changed, 18 insertions, 12 deletions
diff --git a/data-collection/components/subscriptions/main.py b/data-collection/components/subscriptions/main.py
index 6a3f5cd..26b0c64 100644
--- a/data-collection/components/subscriptions/main.py
+++ b/data-collection/components/subscriptions/main.py
@@ -1,11 +1,11 @@
from dataclasses import dataclass, field, asdict
from datetime import datetime, UTC
from sys import stderr
-from typing import TypedDict, List
+from typing import TypedDict, List, cast
from bson.objectid import ObjectId
from feedparser import parse # type: ignore
from pymongo.collection import Collection
-from pymongo.results import UpdateResult
+from pymongo.results import InsertOneResult, UpdateResult
import schedule
from components.database import subscriptions
from components.subscriptions.typing import SubsDict
@@ -44,15 +44,21 @@ class Subscription:
if last_video_update > self.last_video_update:
print("Updating", self._id)
self.last_video_update = last_video_update
- self.update_fields(["videos", "last_video_update"])
+ self.update_videos()
self.last_fetch = datetime.now(tz=UTC)
- def update_fields(self, fields: List[str]) -> UpdateResult:
- sub = asdict(self)
- if self._in_db:
- return self._collection.update_one(
- {"_id": self._id},
- {"$set": {key: sub[key] for key in fields}},
- )
- self._in_db = True
- return self._collection.replace_one({"_id": self._id}, sub, upsert=True)
+ def asdict(self) -> SubsDict:
+ return cast(SubsDict, asdict(self))
+
+ def insert(self) -> InsertOneResult:
+ return self._collection.insert_one(self.asdict())
+
+ def update_videos(self) -> UpdateResult:
+ return self._collection.update_one(
+ {"_id": self._id},
+ {"$set": {
+ "videos": self.videos,
+ "last_video_update": self.last_video_update,
+ "last_fetch": self.last_fetch,
+ }},
+ )