From 06e4c9ec1ba1eeffb2c34c94147743de263817a1 Mon Sep 17 00:00:00 2001 From: felinae98 <731499577@qq.com> Date: Wed, 23 Mar 2022 00:21:45 +0800 Subject: [PATCH] update --- .../nonebot_bison/config/config_legacy.py | 23 ++++++++++++------- src/plugins/nonebot_bison/config/db.py | 11 +++++++++ .../nonebot_bison/platform/platform.py | 2 +- src/plugins/nonebot_bison/post.py | 3 ++- src/plugins/nonebot_bison/types.py | 3 ++- 5 files changed, 31 insertions(+), 11 deletions(-) diff --git a/src/plugins/nonebot_bison/config/config_legacy.py b/src/plugins/nonebot_bison/config/config_legacy.py index 91b224e..7552a56 100644 --- a/src/plugins/nonebot_bison/config/config_legacy.py +++ b/src/plugins/nonebot_bison/config/config_legacy.py @@ -1,6 +1,7 @@ import os from collections import defaultdict from os import path +from pathlib import Path from typing import DefaultDict, Literal, Mapping, TypedDict import nonebot @@ -53,18 +54,24 @@ class ConfigContent(TypedDict): class Config(metaclass=Singleton): + "Dropping it!" migrate_version = 2 def __init__(self): - self.db = TinyDB(get_config_path(), encoding="utf-8") - self.kv_config = self.db.table("kv") - self.user_target = self.db.table("user_target") - self.target_user_cache: dict[str, defaultdict[Target, list[User]]] = {} - self.target_user_cat_cache = {} - self.target_user_tag_cache = {} - self.target_list = {} - self.next_index: DefaultDict[str, int] = defaultdict(lambda: 0) + path = get_config_path() + if Path(path).exists(): + self.available = True + self.db = TinyDB(get_config_path(), encoding="utf-8") + self.kv_config = self.db.table("kv") + self.user_target = self.db.table("user_target") + self.target_user_cache: dict[str, defaultdict[Target, list[User]]] = {} + self.target_user_cat_cache = {} + self.target_user_tag_cache = {} + self.target_list = {} + self.next_index: DefaultDict[str, int] = defaultdict(lambda: 0) + else: + self.available = False def add_subscribe( self, user, user_type, target, target_name, target_type, cats, tags diff --git a/src/plugins/nonebot_bison/config/db.py b/src/plugins/nonebot_bison/config/db.py index 813243f..cced3c5 100644 --- a/src/plugins/nonebot_bison/config/db.py +++ b/src/plugins/nonebot_bison/config/db.py @@ -8,11 +8,20 @@ from nonebot.log import logger from nonebot_plugin_datastore import PluginData, create_session, db from sqlalchemy.engine.base import Connection +from .config_legacy import ConfigContent, config from .db_model import Base DATA = PluginData("bison") +async def data_migrate(): + if config.available: + logger.warning("You are still using legacy db, migrating to sqlite") + all_subs: list[ConfigContent] = list( + map(lambda item: ConfigContent(**item), config.get_all_subscribe().all()) + ) + + @nonebot.get_driver().on_startup async def upgrade_db(): alembic_cfg = Config() @@ -35,3 +44,5 @@ async def upgrade_db(): async with engine.connect() as connection: await connection.run_sync(do_run_migration) + + await data_migrate() diff --git a/src/plugins/nonebot_bison/platform/platform.py b/src/plugins/nonebot_bison/platform/platform.py index e1c3471..bc30824 100644 --- a/src/plugins/nonebot_bison/platform/platform.py +++ b/src/plugins/nonebot_bison/platform/platform.py @@ -1,11 +1,11 @@ import time from abc import ABC, abstractmethod from collections import defaultdict -from dataclasses import dataclass from typing import Any, Collection, Literal, Optional import httpx from nonebot.log import logger +from pydantic.dataclasses import dataclass from ..plugin_config import plugin_config from ..post import Post diff --git a/src/plugins/nonebot_bison/post.py b/src/plugins/nonebot_bison/post.py index ceca521..ce527e1 100644 --- a/src/plugins/nonebot_bison/post.py +++ b/src/plugins/nonebot_bison/post.py @@ -1,4 +1,4 @@ -from dataclasses import dataclass, field +from dataclasses import field from functools import reduce from io import BytesIO from typing import Optional, Union @@ -7,6 +7,7 @@ import httpx from nonebot.adapters.onebot.v11.message import Message, MessageSegment from nonebot.log import logger from PIL import Image +from pydantic.dataclasses import dataclass from .plugin_config import plugin_config from .utils import parse_text diff --git a/src/plugins/nonebot_bison/types.py b/src/plugins/nonebot_bison/types.py index 734d877..f2d34d1 100644 --- a/src/plugins/nonebot_bison/types.py +++ b/src/plugins/nonebot_bison/types.py @@ -1,6 +1,7 @@ -from dataclasses import dataclass from typing import Any, Callable, Literal, NamedTuple, NewType +from pydantic.dataclasses import dataclass + RawPost = NewType("RawPost", Any) Target = NewType("Target", str) Category = int