mirror of
https://github.com/A-Minos/nonebot-plugin-tetris-stats.git
synced 2026-03-05 05:36:54 +08:00
Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 270b953bc9 | |||
| 13bd0da592 | |||
| 9545f0b5d0 | |||
| 12f320cbb4 |
@@ -1,3 +1,4 @@
|
|||||||
|
from asyncio import Lock
|
||||||
from collections.abc import AsyncGenerator
|
from collections.abc import AsyncGenerator
|
||||||
from contextlib import asynccontextmanager
|
from contextlib import asynccontextmanager
|
||||||
from datetime import datetime, timezone
|
from datetime import datetime, timezone
|
||||||
@@ -72,9 +73,11 @@ async def create_or_update_bind(
|
|||||||
|
|
||||||
T = TypeVar('T', 'TETRIOHistoricalData', 'TOPHistoricalData', 'TOSHistoricalData')
|
T = TypeVar('T', 'TETRIOHistoricalData', 'TOPHistoricalData', 'TOSHistoricalData')
|
||||||
|
|
||||||
|
lock = Lock()
|
||||||
|
|
||||||
|
|
||||||
async def anti_duplicate_add(cls: type[T], model: T) -> None:
|
async def anti_duplicate_add(cls: type[T], model: T) -> None:
|
||||||
async with get_session() as session:
|
async with lock, get_session() as session:
|
||||||
result = (
|
result = (
|
||||||
await session.scalars(
|
await session.scalars(
|
||||||
select(cls)
|
select(cls)
|
||||||
@@ -88,8 +91,8 @@ async def anti_duplicate_add(cls: type[T], model: T) -> None:
|
|||||||
if i.data == model.data:
|
if i.data == model.data:
|
||||||
logger.debug('Anti duplicate successfully')
|
logger.debug('Anti duplicate successfully')
|
||||||
return
|
return
|
||||||
session.add(model)
|
session.add(model)
|
||||||
await session.commit()
|
await session.commit()
|
||||||
|
|
||||||
|
|
||||||
@asynccontextmanager
|
@asynccontextmanager
|
||||||
|
|||||||
@@ -23,9 +23,8 @@ class PydanticType(TypeDecorator):
|
|||||||
*args: Any,
|
*args: Any,
|
||||||
**kwargs: Any,
|
**kwargs: Any,
|
||||||
):
|
):
|
||||||
for i in get_model:
|
self.get_model = get_model
|
||||||
models.update(i())
|
self._models = models
|
||||||
self.models = models
|
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
if PYDANTIC_V2:
|
if PYDANTIC_V2:
|
||||||
@@ -56,6 +55,14 @@ class PydanticType(TypeDecorator):
|
|||||||
...
|
...
|
||||||
raise ValueError
|
raise ValueError
|
||||||
|
|
||||||
|
@property
|
||||||
|
def models(self) -> tuple[type[BaseModel], ...]:
|
||||||
|
models: set[type[BaseModel]] = set()
|
||||||
|
for i in self.get_model:
|
||||||
|
models.update(i())
|
||||||
|
models.update(self._models)
|
||||||
|
return tuple(models)
|
||||||
|
|
||||||
|
|
||||||
class Bind(MappedAsDataclass, Model):
|
class Bind(MappedAsDataclass, Model):
|
||||||
id: Mapped[int] = mapped_column(init=False, primary_key=True)
|
id: Mapped[int] = mapped_column(init=False, primary_key=True)
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[tool.poetry]
|
[tool.poetry]
|
||||||
name = 'nonebot-plugin-tetris-stats'
|
name = 'nonebot-plugin-tetris-stats'
|
||||||
version = '1.2.2'
|
version = '1.2.4'
|
||||||
description = '一款基于 NoneBot2 的用于查询 Tetris 相关游戏数据的插件'
|
description = '一款基于 NoneBot2 的用于查询 Tetris 相关游戏数据的插件'
|
||||||
authors = ['scdhh <wallfjjd@gmail.com>']
|
authors = ['scdhh <wallfjjd@gmail.com>']
|
||||||
readme = 'README.md'
|
readme = 'README.md'
|
||||||
|
|||||||
Reference in New Issue
Block a user