feat: add database test

This commit is contained in:
EstrellaXD
2023-06-15 14:18:57 +08:00
parent 22b3d4caf7
commit e4d34f0e42
3 changed files with 66 additions and 13 deletions

View File

@@ -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("久保"))

View File

@@ -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()]

View 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