mirror of
https://github.com/EstrellaXD/Auto_Bangumi.git
synced 2026-04-09 13:40:13 +08:00
feat: add database test
This commit is contained in:
@@ -5,13 +5,18 @@ from module.database.orm import Connector
|
||||
from module.ab_decorator import locked
|
||||
from module.database.connector import DataConnector
|
||||
from module.models import BangumiData
|
||||
from module.conf import DATA_PATH
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class BangumiDatabase(Connector):
|
||||
def __init__(self):
|
||||
super().__init__(table_name="bangumi", data=self.__data_to_db(BangumiData()))
|
||||
def __init__(self, database: str = DATA_PATH):
|
||||
super().__init__(
|
||||
table_name="bangumi",
|
||||
data=self.__data_to_db(BangumiData()),
|
||||
database=database,
|
||||
)
|
||||
|
||||
def update_table(self):
|
||||
self.update.table()
|
||||
@@ -116,7 +121,7 @@ class BangumiDatabase(Connector):
|
||||
return [self.__db_to_data(x) for x in all_data]
|
||||
|
||||
def search_id(self, _id: int) -> BangumiData | None:
|
||||
dict_data = self.select.one(_id)
|
||||
dict_data = self.select.one(conditions={"id": _id})
|
||||
# condition = {"id": _id}
|
||||
# dict_data = self._search_data(table_name=self.__table_name, condition=condition)
|
||||
if dict_data is None:
|
||||
@@ -134,11 +139,12 @@ class BangumiDatabase(Connector):
|
||||
# return self.__db_to_data(dict_data)
|
||||
|
||||
def match_poster(self, bangumi_name: str) -> str:
|
||||
condition = {"title_raw": bangumi_name}
|
||||
condition = {"official_title": bangumi_name}
|
||||
keys = ["poster_link"]
|
||||
data = self.select.one(
|
||||
keys=keys,
|
||||
condition=condition,
|
||||
conditions=condition,
|
||||
combine_operator="INSTR",
|
||||
)
|
||||
if not data:
|
||||
return ""
|
||||
@@ -187,7 +193,4 @@ class BangumiDatabase(Connector):
|
||||
|
||||
if __name__ == "__main__":
|
||||
with BangumiDatabase() as db:
|
||||
datas = db.not_added()
|
||||
for data in datas:
|
||||
print(data)
|
||||
# print(db.not_complete())
|
||||
print(db.match_poster("久保"))
|
||||
|
||||
@@ -31,8 +31,9 @@ class Select:
|
||||
combine_operator: str = "AND",
|
||||
):
|
||||
if keys is None:
|
||||
keys = ["*"]
|
||||
columns = ", ".join(keys)
|
||||
columns = "*"
|
||||
else:
|
||||
columns = ", ".join(keys)
|
||||
condition_sql = self.__select_condition(conditions, combine_operator)
|
||||
self._connector.execute(
|
||||
f"""
|
||||
@@ -81,9 +82,13 @@ class Select:
|
||||
if not conditions:
|
||||
raise ValueError("No conditions provided.")
|
||||
if combine_operator not in ["AND", "OR", "INSTR"]:
|
||||
raise ValueError("Invalid combine_operator, must be 'AND' or 'OR'.")
|
||||
raise ValueError(
|
||||
"Invalid combine_operator, must be 'AND' or 'OR' or 'INSTR'."
|
||||
)
|
||||
if combine_operator == "INSTR":
|
||||
condition_sql = f" {combine_operator} {' AND '.join([f'({key} = :{key})' for key in conditions.keys()])}"
|
||||
condition_sql = f" AND ".join(
|
||||
[f"INSTR({key}, :{key})" for key in conditions.keys()]
|
||||
)
|
||||
else:
|
||||
condition_sql = f" {combine_operator} ".join(
|
||||
[f"{key} = :{key}" for key in conditions.keys()]
|
||||
|
||||
45
backend/src/test/test_database.py
Normal file
45
backend/src/test/test_database.py
Normal file
@@ -0,0 +1,45 @@
|
||||
from module.database import BangumiDatabase
|
||||
from module.models import BangumiData
|
||||
|
||||
|
||||
def test_database():
|
||||
TEST_PATH = "test/test.db"
|
||||
test_data = BangumiData(
|
||||
id=1,
|
||||
official_title="test",
|
||||
year="2021",
|
||||
title_raw="test",
|
||||
season=1,
|
||||
season_raw="第一季",
|
||||
group_name="test",
|
||||
dpi="720p",
|
||||
source="test",
|
||||
subtitle="test",
|
||||
eps_collect=False,
|
||||
offset=0,
|
||||
filter=["720p", "\\d+-\\d+"],
|
||||
rss_link=["test"],
|
||||
poster_link="/test/test.jpg",
|
||||
added=False,
|
||||
rule_name=None,
|
||||
save_path=None,
|
||||
deleted=False,
|
||||
)
|
||||
with BangumiDatabase(database=TEST_PATH) as database:
|
||||
# create table
|
||||
database.update_table()
|
||||
# insert
|
||||
database.insert_one(test_data)
|
||||
assert database.search_id(1) == test_data
|
||||
|
||||
# update
|
||||
test_data.official_title = "test2"
|
||||
database.update_one(test_data)
|
||||
assert database.search_id(1) == test_data
|
||||
|
||||
# search poster
|
||||
assert database.match_poster("test") == "/test/test.jpg"
|
||||
|
||||
# delete
|
||||
database.delete_one(1)
|
||||
assert database.search_id(1) is None
|
||||
Reference in New Issue
Block a user