Redesign1 #1

Merged
yaro merged 36 commits from Redesign1 into main 2025-09-22 14:12:39 -05:00
8 changed files with 89 additions and 24 deletions
Showing only changes of commit d9ed6d5cd7 - Show all commits

14
muck/app.py Normal file
View file

@ -0,0 +1,14 @@
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, scoped_session
from muck.models.dbref import Base
from muck.init import bootstrap_world
engine = create_engine("sqlite:///muck.db", echo=True)
SessionLocal = scoped_session(sessionmaker(bind=engine))
Base.metadata.create_all(engine)
session = SessionLocal()
bootstrap_world(session)

3
muck/config.py Normal file
View file

@ -0,0 +1,3 @@
class Config:
DB_URI = "sqlite:///muck.db"
DB_TRACK_MODIFICATIONS = False

39
muck/init.py Normal file
View file

@ -0,0 +1,39 @@
from muck.models.room import Room
from muck.models.player import Player
def bootstrap_world(session):
if session.query(Room).first() or session.query(Player).first():
print("World already initialized.")
return
print("Bootstrapping world...")
room_zero = Room(
id=0,
name="Room Zero",
props={"_": {"de": "You are in Room Zero. It is very dark in here."}}
)
the_one = Player(
id=1,
name="One",
password="potrzebie",
props={"_": {"de": "You see The One."}}
)
the_one.location = room_zero
the_one.home = room_zero
the_one.creator = the_one
the_one.owner = the_one
the_one.modifier = the_one
the_one.last_user = the_one
room_zero.owner = the_one
room_zero.creator = the_one
room_zero.modifier = the_one
room_zero.last_user = the_one
session.add_all([room_zero, the_one])
session.commit()
print("World initialized.")

5
muck/models/__init__.py Normal file
View file

@ -0,0 +1,5 @@
from muck.models.dbref import Dbref
from muck.models.exit import Exit
from sqlalchemy.orm import relationship
Dbref.exits = relationship("Exit", back_populates="source", foreign_keys=[Exit.location_id])

View file

@ -1,5 +1,5 @@
from sqlalchemy import Column, Integer, String, ForeignKey, Boolean, DateTime, JSON, Enum as SQLEnum, func from sqlalchemy import Column, Integer, String, ForeignKey, Boolean, DateTime, JSON, Enum as SQLEnum, func
from sqlalchemy.orm import relationship from sqlalchemy.orm import relationship, foreign, remote
from crudkit.core.base import CRUDMixin, Base from crudkit.core.base import CRUDMixin, Base
from enum import Enum from enum import Enum
@ -29,23 +29,22 @@ class Dbref(Base, CRUDMixin):
last_used = Column(DateTime, nullable=False, default=func.now()) last_used = Column(DateTime, nullable=False, default=func.now())
use_count = Column(Integer, nullable=False, default=0) use_count = Column(Integer, nullable=False, default=0)
location_id = Column(Integer, ForeignKey("dbref.id"), nullable=False) location_id = Column(Integer, ForeignKey("dbref.id"), nullable=True, default=0)
location = relationship("Dbref", remote_side=[CRUDMixin.id], foreign_keys=[location_id], back_populates="contents") location = relationship("Dbref", foreign_keys=[location_id], back_populates="contents", primaryjoin=lambda: foreign(Dbref.location_id) == remote(Dbref.id), remote_side=lambda: Dbref.id)
contents = relationship("Dbref", backref="location", foreign_keys=location_id) contents = relationship("Dbref", foreign_keys=[location_id], back_populates="location")
exits = relationship("Exit", backref="source", foreign_keys=location_id)
owner_id = Column(Integer, ForeignKey("dbref.id"), nullable=False) owner_id = Column(Integer, ForeignKey("dbref.id"), nullable=True)
owner = relationship("Player", remote_side=[CRUDMixin.id], foreign_keys=[owner_id]) owner = relationship("Player", remote_side=[CRUDMixin.id], foreign_keys=[owner_id], primaryjoin=lambda: Dbref.owner_id == remote(Dbref.id), post_update=True)
creator_id = Column(Integer, ForeignKey("dbref.id"), nullable=False) creator_id = Column(Integer, ForeignKey("dbref.id"), nullable=True)
creator = relationship("Player", remote_side=[CRUDMixin.id], foreign_keys=[creator_id]) creator = relationship("Player", remote_side=[CRUDMixin.id], foreign_keys=[creator_id], primaryjoin=lambda: Dbref.creator_id == remote(Dbref.id), post_update=True)
modifier_id = Column(Integer, ForeignKey("dbref.id"), nullable=False) modifier_id = Column(Integer, ForeignKey("dbref.id"), nullable=True)
modifier = relationship("Player", remote_side=[CRUDMixin.id], foreign_keys=[modifier_id]) modifier = relationship("Player", remote_side=[CRUDMixin.id], foreign_keys=[modifier_id], primaryjoin=lambda: Dbref.modifier_id == remote(Dbref.id), post_update=True)
last_user_id = Column(Integer, ForeignKey("dbref.id"), nullable=False) last_user_id = Column(Integer, ForeignKey("dbref.id"), nullable=True)
last_user = relationship("Player", remote_side=[CRUDMixin.id], foreign_keys=[last_user_id]) last_user = relationship("Player", remote_side=[CRUDMixin.id], foreign_keys=[last_user_id], primaryjoin=lambda: Dbref.last_user_id == remote(Dbref.id), post_update=True)
__mapper_args__ = { __mapper_args__ = {
"polymorphic_on": type, "polymorphic_on": type,

View file

@ -1,5 +1,5 @@
from sqlalchemy import Column, Integer, ForeignKey from sqlalchemy import Column, Integer, ForeignKey
from sqlalchemy.orm import relationship from sqlalchemy.orm import relationship, foreign, remote
from crudkit.core.base import CRUDMixin from crudkit.core.base import CRUDMixin
@ -11,8 +11,11 @@ class Exit(Dbref):
id = Column(Integer, ForeignKey("dbref.id"), primary_key=True) id = Column(Integer, ForeignKey("dbref.id"), primary_key=True)
destination_id = Column(Integer, ForeignKey("dbref.id"), nullable=True) destination_id = Column(Integer, ForeignKey("dbref.id"), nullable=True)
destination = relationship("Dbref", remote_side=[CRUDMixin.id], foreign_keys=[destination_id]) destination = relationship("Dbref", remote_side=[CRUDMixin.id], foreign_keys=[destination_id], primaryjoin=lambda: foreign(Exit.destination_id) == remote(Dbref.id))
source = relationship("Dbref", back_populates="exits", foreign_keys=[Dbref.location_id], remote_side=[Dbref.id])
__mapper_args__ = { __mapper_args__ = {
"polymorphic_identity": ObjectType.EXIT "polymorphic_identity": ObjectType.EXIT,
"inherit_condition": id == Dbref.id
} }

View file

@ -1,5 +1,5 @@
from sqlalchemy import Column, Integer, Boolean, String, ForeignKey from sqlalchemy import Column, Integer, Boolean, String, ForeignKey
from sqlalchemy.orm import relationship from sqlalchemy.orm import relationship, foreign, remote
from crudkit.core.base import CRUDMixin from crudkit.core.base import CRUDMixin
@ -15,12 +15,13 @@ class Player(Dbref):
block = Column(Integer, nullable=True) block = Column(Integer, nullable=True)
password = Column(String, nullable=False) password = Column(String, nullable=False)
home_id = Column(Integer, ForeignKey("dbref.id"), nullable=False) home_id = Column(Integer, ForeignKey("dbref.id"), nullable=True)
home = relationship("Dbref", remote_side=[CRUDMixin.id], foreign_keys=[home_id]) home = relationship("Dbref", remote_side=[CRUDMixin.id], foreign_keys=[home_id], primaryjoin=lambda: foreign(Player.home_id) == remote(Dbref.id))
current_program_id = Column(Integer, ForeignKey("dbref.id"), nullable=True) current_program_id = Column(Integer, ForeignKey("dbref.id"), nullable=True)
current_program = relationship("Dbref", remote_side=[CRUDMixin.id], foreign_keys=[current_program_id]) current_program = relationship("Dbref", remote_side=[CRUDMixin.id], foreign_keys=[current_program_id], primaryjoin=lambda: foreign(Player.current_program_id) == remote(Dbref.id))
__mapper_args__ = { __mapper_args__ = {
"polymorphic_identity": ObjectType.PLAYER "polymorphic_identity": ObjectType.PLAYER,
"inherit_condition": id == Dbref.id
} }

View file

@ -1,5 +1,5 @@
from sqlalchemy import Column, Integer, ForeignKey from sqlalchemy import Column, Integer, ForeignKey
from sqlalchemy.orm import relationship from sqlalchemy.orm import relationship, foreign, remote
from crudkit.core.base import CRUDMixin from crudkit.core.base import CRUDMixin
@ -11,8 +11,9 @@ class Room(Dbref):
id = Column(Integer, ForeignKey("dbref.id"), primary_key=True) id = Column(Integer, ForeignKey("dbref.id"), primary_key=True)
dropto_id = Column(Integer, ForeignKey("dbref.id"), nullable=True) dropto_id = Column(Integer, ForeignKey("dbref.id"), nullable=True)
dropto = relationship("Dbref", remote_side=[CRUDMixin.id], foreign_keys=[dropto_id]) dropto = relationship("Dbref", remote_side=[CRUDMixin.id], foreign_keys=[dropto_id], primaryjoin=lambda: foreign(Room.dropto_id) == remote(Dbref.id))
__mapper_args__ = { __mapper_args__ = {
"polymorphic_identity": ObjectType.ROOM "polymorphic_identity": ObjectType.ROOM,
"inherit_condition": id == Dbref.id
} }