From b4204cadca241cffde864ef6ea7b6a00907590a4 Mon Sep 17 00:00:00 2001 From: estrella Date: Wed, 21 Jun 2023 00:18:32 +0800 Subject: [PATCH] feat: add rss engine --- backend/src/module/database/rss.py | 44 ++++++++++++++++++++++++++++++ backend/src/module/rss/engine.py | 6 +++- 2 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 backend/src/module/database/rss.py diff --git a/backend/src/module/database/rss.py b/backend/src/module/database/rss.py new file mode 100644 index 00000000..8c86ef66 --- /dev/null +++ b/backend/src/module/database/rss.py @@ -0,0 +1,44 @@ +from .orm import Connector + +from module.models import RSSItem +from module.conf import DATA_PATH + + +class RSSDatabase(Connector): + def __init__(self, database: str = DATA_PATH): + super().__init__( + table_name="RSSItem", + data=RSSItem().dict(), + database=database + ) + + @staticmethod + def __data_to_db(data: RSSItem) -> dict: + db_data = data.dict() + for key, value in db_data.items(): + if isinstance(value, bool): + db_data[key] = int(value) + elif isinstance(value, list): + db_data[key] = ",".join(value) + return db_data + + @staticmethod + def __db_to_data(db_data: dict) -> RSSItem: + for key, item in db_data.items(): + if isinstance(item, int): + db_data[key] = bool(item) + return RSSItem(**db_data) + + def update_table(self): + self.update.table() + + def insert_one(self, data: RSSItem): + dict_data = self.__data_to_db(data) + self.insert.one(data=dict_data) + + def get_all(self) -> list[RSSItem]: + dict_datas = self.select.all() + return [self.__db_to_data(x) for x in dict_datas] + + def delete_one(self, _id: int): + self.delete.one(_id) diff --git a/backend/src/module/rss/engine.py b/backend/src/module/rss/engine.py index 8befad0c..b0c668b9 100644 --- a/backend/src/module/rss/engine.py +++ b/backend/src/module/rss/engine.py @@ -6,7 +6,6 @@ from module.network import RequestContent, TorrentInfo class RSSEngine(RequestContent): - @staticmethod def _get_rss_items() -> list[RSSItem]: with RSSDatabase() as db: @@ -73,3 +72,8 @@ class RSSEngine(RequestContent): with TorrentDatabase() as db: db.insert_many(matched_torrents) return matched_torrents + + +if __name__ == '__main__': + with RSSEngine() as engine: + engine.run()