Skip to content

Commit

Permalink
migrate old plugin data
Browse files Browse the repository at this point in the history
  • Loading branch information
MeetWq committed Sep 27, 2023
1 parent 79169fb commit facc85a
Show file tree
Hide file tree
Showing 3 changed files with 71 additions and 1 deletion.
2 changes: 1 addition & 1 deletion .env
Original file line number Diff line number Diff line change
@@ -1 +1 @@
sqlalchemy_database_url="sqlite+aiosqlite:///:memory:"
sqlalchemy_database_url="sqlite+aiosqlite:///./data.db"
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
*__pycache__/
dist/
.vscode/
data.db
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
"""migrate_old_plugin_data
修订 ID:f30e2361ecdd
父修订:38d5e34c8649
创建时间:2023-09-27 22:48:40.293755
"""
from __future__ import annotations

from collections.abc import Sequence

from alembic import op
from nonebot import logger
from sqlalchemy.ext.automap import automap_base
from sqlalchemy.orm import Session

# 修订标识符,由 Alembic 使用。
revision: str = "f30e2361ecdd"
down_revision: str | Sequence[str] | None = "38d5e34c8649"
branch_labels: str | Sequence[str] | None = None
depends_on: str | Sequence[str] | None = None


def _has_table(name: str) -> bool:
from sqlalchemy import inspect

insp = inspect(op.get_bind())
return name in insp.get_table_names()


def upgrade(name: str = "") -> None:
if name: # 兼容 multidb 模板
return

# ### commands auto generated by Alembic - please adjust! ###
Base = automap_base()
if _has_table("nonebot_plugin_session_sessionmodel"):
logger.info("发现旧版插件数据,开始迁移")
Base.prepare(op.get_bind())
OldSessionModel = Base.classes.nonebot_plugin_session_sessionmodel
SessionModel = Base.classes.nonebot_plugin_session_orm_sessionmodel
with Session(op.get_bind()) as session:
for old_session_model in session.query(OldSessionModel):
level = 0
level_str = str(old_session_model.level)
if level_str.startswith("LEVEL"):
level = int(level_str[5:])
session_model = SessionModel(
id=old_session_model.id,
bot_id=old_session_model.bot_id,
bot_type=old_session_model.bot_type,
platform=old_session_model.platform,
level=level,
id1=old_session_model.id1 or "",
id2=old_session_model.id2 or "",
id3=old_session_model.id3 or "",
)
session.add(session_model)
session.commit()
# ### end Alembic commands ###


def downgrade(name: str = "") -> None:
if name: # 兼容 multidb 模板
return

# ### commands auto generated by Alembic - please adjust! ###
op.drop_table("nonebot_plugin_session_orm_sessionmodel")
# ### end Alembic commands ###

0 comments on commit facc85a

Please sign in to comment.