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")