diff options
| author | A Farzat <a@farzat.xyz> | 2025-08-21 09:36:13 +0300 |
|---|---|---|
| committer | A Farzat <a@farzat.xyz> | 2025-08-21 09:36:13 +0300 |
| commit | 543810b5b5ac5d8e5174a48e8345ab9c92907677 (patch) | |
| tree | 94c0b7b9488d989e2af5b78a0323324a0118cfe4 /data-collection/components | |
| parent | 31e0e275bb07b9a72f0af2507b06127e849f3639 (diff) | |
| download | csca5028-543810b5b5ac5d8e5174a48e8345ab9c92907677.tar.gz csca5028-543810b5b5ac5d8e5174a48e8345ab9c92907677.zip | |
Refine database related methods in subscriptions class
Diffstat (limited to 'data-collection/components')
| -rw-r--r-- | data-collection/components/subscriptions/main.py | 30 |
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, + }}, + ) |
