From 2bd64bbd5ed9027f875ce8d2bc3c09ebe4eabfb0 Mon Sep 17 00:00:00 2001 From: 283375 Date: Sat, 16 Mar 2024 01:54:26 +0800 Subject: [PATCH] feat(external): supporting chart info database --- .../external/chart_info_db/__init__.py | 1 + .../external/chart_info_db/parser.py | 35 +++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 src/arcaea_offline/external/chart_info_db/__init__.py create mode 100644 src/arcaea_offline/external/chart_info_db/parser.py diff --git a/src/arcaea_offline/external/chart_info_db/__init__.py b/src/arcaea_offline/external/chart_info_db/__init__.py new file mode 100644 index 0000000..bf0258f --- /dev/null +++ b/src/arcaea_offline/external/chart_info_db/__init__.py @@ -0,0 +1 @@ +from .parser import ChartInfoDbParser diff --git a/src/arcaea_offline/external/chart_info_db/parser.py b/src/arcaea_offline/external/chart_info_db/parser.py new file mode 100644 index 0000000..a80a891 --- /dev/null +++ b/src/arcaea_offline/external/chart_info_db/parser.py @@ -0,0 +1,35 @@ +import contextlib +import sqlite3 +from typing import List + +from sqlalchemy.orm import Session + +from ...models.songs import ChartInfo + + +class ChartInfoDbParser: + def __init__(self, filepath): + self.filepath = filepath + + def parse(self) -> List[ChartInfo]: + results = [] + with sqlite3.connect(self.filepath) as conn: + with contextlib.closing(conn.cursor()) as cursor: + db_results = cursor.execute( + "SELECT song_id, rating_class, constant, notes FROM charts_info" + ).fetchall() + for result in db_results: + chart = ChartInfo( + song_id=result[0], + rating_class=result[1], + constant=result[2], + notes=result[3] or None, + ) + results.append(chart) + + return results + + def write_database(self, session: Session): + results = self.parse() + for result in results: + session.merge(result)