crudkit/muck/models/dbref.py

42 lines
1.2 KiB
Python

from sqlalchemy import Column, Integer, String, ForeignKey, Boolean
from sqlalchemy.orm import relationship
from crudkit.core.base import CRUDMixin, Base
class Dbref(Base, CRUDMixin):
__tablename__ = "dbref"
type = Column(String, nullable=False)
name = Column(String, nullable=False)
is_deleted = Column(Boolean, nullable=False, default=False)
owner_id = Column(Integer, ForeignKey("dbref.id"))
location_id = Column(Integer, ForeignKey("dbref.id"))
owner = relationship("Dbref", remote_side=[CRUDMixin.id], foreign_keys=[owner_id])
location = relationship("Dbref", remote_side=[CRUDMixin.id], foreign_keys=[location_id])
__mapper_args__ = {
"polymorphic_on": type,
"polymorphic_identity": "dbref"
}
def __str__(self):
return f"#{self.id} ({self.type}): {self.name}"
def is_type(self, *types: str) -> bool:
return self.type in types
@property
def is_room(self): return self.is_type("room")
@property
def is_thing(self): return self.is_type("thing")
@property
def is_exit(self): return self.is_type("exit")
@property
def is_player(self): return self.is_type("player")
@property
def is_program(self): return self.is_type("programI ho")