How would these python files look if they were using beanie instead of odmantic?

"pinatas.py":
import time
from typing import Optional

from odmantic import Field, Model

from util.common import time\_until\_attackable
class PListMessageModel(Model):
 pinata\_channel: Optional[int] = None
 server\_id: Optional[int] = None
 pinata\_message\_id: Optional[int] = None
 last\_updated: Optional[int] = None
class PinataModel(Model):
 smmo\_id: int = Field(primary\_field=True)
 name: Optional[str] = None
 level: Optional[int] = None
 gold: Optional[int] = None
 hp: Optional[int] = None
 max\_hp: Optional[int] = None
 safemode: Optional[bool] = None
 pleb: Optional[bool] = None
 guild\_id: Optional[int] = None
 last\_active: Optional[int] = None
 last\_updated: Optional[int] = None
 attackable\_at: Optional[int] = None

 @staticmethod
 async def from\_json(player):
 pinata: PinataModel = PinataModel(smmo\_id=player.get('id'), last\_updated=time.time())
 pinata.name = player.get('name')
 pinata.level = player.get('level')
 pinata.gold = player.get('gold')
 pinata.hp = player.get('hp')
 pinata.max\_hp = player.get('max\_hp')
 pinata.safemode = player.get('safeMode')
 pinata.pleb = player.get('membership')
 pinata.last\_active = int(player.get('last\_activity'))
 timeattackabledatetime = await time\_until\_attackable(pinata.hp, pinata.max\_hp, pinata.pleb)
 pinata.attackable\_at = int(timeattackabledatetime.timestamp())
 return pinata
class ActivePinataModel(Model):
 smmo\_id: int = Field(primary\_field=True)
 name: Optional[str] = None
 level: Optional[int] = None
 gold: Optional[int] = None
 hp: Optional[int] = None
 max\_hp: Optional[int] = None
 safemode: Optional[bool] = None
 pleb: Optional[bool] = None
 guild\_id: Optional[int] = None
 last\_active: Optional[int] = None
 last\_updated: Optional[int] = None
 attackable\_at: Optional[int] = None
 mentioned\_at: Optional[int] = None
 mentioned\_id: Optional[int] = None

 @staticmethod
 async def from\_json(player):
 pinata: ActivePinataModel = ActivePinataModel(smmo\_id=player.get('id'), last\_updated=time.time())
 pinata.name = player.get('name')
 pinata.level = player.get('level')
 pinata.gold = player.get('gold')
 pinata.hp = player.get('hp')
 pinata.max\_hp = player.get('max\_hp')
 pinata.safemode = player.get('safeMode')
 pinata.pleb = player.get('membership')
 pinata.last\_active = int(player.get('last\_activity'))
 timeattackabledatetime = await time\_until\_attackable(pinata.hp, pinata.max\_hp, pinata.pleb)
 pinata.attackable\_at = int(timeattackabledatetime.timestamp())
 return pinata
class SafemodePinataModel(Model):
 smmo\_id: int = Field(primary\_field=True)
 name: Optional[str] = None
 level: Optional[int] = None
 gold: Optional[int] = None
 hp: Optional[int] = None
 max\_hp: Optional[int] = None
 safemode: Optional[bool] = None
 pleb: Optional[bool] = None
 guild\_id: Optional[int] = None
 last\_active: Optional[int] = None
 last\_updated: Optional[int] = None
 attackable\_at: Optional[int] = None

 @staticmethod
 async def from\_json(player):
 pinata: SafemodePinataModel = SafemodePinataModel(smmo\_id=player.get('id'), last\_updated=time.time())
 pinata.name = player.get('name')
 pinata.level = player.get('level')
 pinata.gold = player.get('gold')
 pinata.hp = player.get('hp')
 pinata.max\_hp = player.get('max\_hp')
 pinata.safemode = player.get('safeMode')
 pinata.pleb = player.get('membership')
 pinata.last\_active = int(player.get('last\_activity'))
 return pinata
class BannedListModel(Model):
 list\_name: str
 list\_of\_banned\_id: list

"database.py"
import platform

from motor.motor\_asyncio import AsyncIOMotorClient
from odmantic import AIOEngine

if platform.system() == "Windows":
 client = AsyncIOMotorClient("mongodb://poised-server.local:27017/")
else:
 client = AsyncIOMotorClient("mongodb://localhost:27017/")

DATABASE: AIOEngine = AIOEngine(client=client, database="snc\_db")
이 파이썬 파일들이 오드맨틱 대신 비니를 사용한다면 어떻게 보일까요?"pinatas.py":임포트 시간에서 임포트 옵션에서 odmantic 임포트 필드, 모델from util.common import time\_until\_attackable클래스 PListMessageModel(모델): 피나타\_채널: 옵션[int] = 없음 server\_id: Optional[int] = None pinata\_message\_id: Optional[int] = None last\_updated: Optional[int] = None피나타모델(모델) 클래스: smmo\_id: int = Field(primary\_field=True) name: Optional[str] = None level: Optional[int] = None gold: Optional[int] = None hp: Optional[int] = None max\_hp: Optional[int] = None 안전 모드: Optional[bool] = None pleb: Optional[bool] = None guild\_id: Optional[int] = None last\_active: Optional[int] = None last\_updated: Optional[int] = None 공격 가능\_at: Optional[int] = None 정적 메서드 async def from\_json(player): 피나타: PinataModel = PinataModel(smmo\_id=player.get('id'), last\_updated=time.time()) pinata.name = player.get('name') pinata.level = 플레이어.get('레벨') pinata.gold = player.get('gold') pinata.hp = player.get('hp') pinata.max\_hp = player.get('max\_hp') pinata.safemode = player.get('safeMode') pinata.pleb = player.get('membership') pinata.last\_active = int(player.get('last\_activity')) timeattackableat-time = await time\_until\_attackable(pinata.hp, pinata.max\_hp, pinata.pleb) pinata.attackable\_at = int(timeattackabledatetime.timestamp()) 반환 피나타ActivePinataModel(모델) 클래스: smmo\_id: int = Field(primary\_field=True) name: Optional[str] = None level: Optional[int] = None gold: Optional[int] = None hp: Optional[int] = None max\_hp: Optional[int] = None 안전 모드: Optional[bool] = None pleb: Optional[bool] = None guild\_id: Optional[int] = None last\_active: Optional[int] = None last\_updated: Optional[int] = None 공격 가능\_at: Optional[int] = None 언급됨\_at: Optional[int] = None 언급된\_id: Optional[int] = None 정적 메서드 async def from\_json(player): 피나타: ActivePinataModel = ActivePinataModel(smmo\_id=player.get('id'), last\_updated=time.time()) pinata.name = player.get('name') pinata.level = 플레이어.get('레벨') pinata.gold = player.get('gold') pinata.hp = player.get('hp') pinata.max\_hp = player.get('max\_hp') pinata.safemode = player.get('safeMode') pinata.pleb = player.get('membership') pinata.last\_active = int(player.get('last\_activity')) timeattackableat-time = await time\_until\_attackable(pinata.hp, pinata.max\_hp, pinata.pleb) pinata.attackable\_at = int(timeattackabledatetime.timestamp()) 반환 피나타세이프모드피나타모델(모델) 클래스: smmo\_id: int = 필드(기본\_필드=True) 이름: 옵션[str] = 없음 level: Optional[int] = None gold: Optional[int] = None hp: Optional[int] = None max\_hp: Optional[int] = None 안전 모드: Optional[bool] = None pleb: Optional[bool] = None guild\_id: Optional[int] = None last\_active: Optional[int] = None last\_updated: Optional[int] = None 공격 가능\_at: Optional[int] = None 정적 메서드 async def from\_json(player): pinata: SafemodePinataModel = SafemodePinataModel(smmo\_id=player.get('id'), last\_updated=time.time()) pinata.name = player.get('name') pinata.level = 플레이어.get('레벨') pinata.gold = player.get('gold') pinata.hp = player.get('hp') pinata.max\_hp = player.get('max\_hp') pinata.safemode = player.get('safeMode') pinata.pleb = player.get('membership') pinata.last\_active = int(player.get('last\_activity')) 반환 피나타BannedListModel(모델) 클래스: list\_name: str list\_of\_banned\_id: 목록"database.py"플랫폼 임포트motor.motor\_asyncio에서 AsyncIOMotorClient를 임포트합니다.odmantic에서 AIOEngine 임포트platform.system() == "Windows": client = AsyncIOMotorClient("mongodb://poised-server.local:27017/")else: client = AsyncIOMotorClient("mongodb://localhost:27017/")데이터베이스: AIOEngine = AIOEngine(client=client, database="snc\_db")