commit ea43d2e40e59cb0240ea362fe30f9a435a4a2a1f Author: Tim Abbott Date: Tue Aug 28 12:41:50 2012 -0400 Initial commit of sqlalchemy models. (imported from commit 8f4763da55bd3f2bbea090d196c6d7850e2b2c71) diff --git a/models.py b/models.py new file mode 100644 index 0000000000..8462595e16 --- /dev/null +++ b/models.py @@ -0,0 +1,142 @@ +from sqlalchemy import create_engine +engine = create_engine('sqlite:////tmp/humbug.db', echo=False) +from sqlalchemy import Column, Integer, String, ForeignKey +from sqlalchemy.ext.declarative import declarative_base +Base = declarative_base() + +class User(Base): + __tablename__ = 'users' + + id = Column(Integer, primary_key=True) + username = Column(String) + realm_id = Column(Integer) + email = Column(String) + password = Column(String) # obviously going to be replaced with Django stuff here + + def __init__(self, username, realm_id, email, password): + self.username = username + self.email = email + self.realm_id = realm_id + self.password = password + + def __repr__(self): + return "" % (self.username, self.email, self.realm_id, self.password) + +class Stream(Base): + __tablename__ = 'streams' + + id = Column(Integer, primary_key=True) + realm_id = Column(Integer, ForeignKey('realms.id')) + name = Column(String) + + def __init__(self, realm_id, name): + self.realm_id = realm_id + self.name = name + + def __repr__(self): + # In theory this should maybe look up the realm name + return "" % (self.realm_id, self.name) + +class Recipient(Base): + __tablename__ = 'recipients' + + id = Column(Integer, primary_key=True) + # type is either "user" or "stream" + type = Column(String) + # type_id is a foreign key into either the streams or users table, + # as determined by the "type" field + type_id = Column(Integer) + + def __init__(self, type, type_id): + self.type = type + self.type_id = type_id + + def __repr__(self): + # In theory this should maybe lookup the names for the IDs + return "" % (self.type, self.type_id) + +class Subscription(Base): + __tablename__ = 'subscriptions' + + id = Column(Integer, primary_key=True) + user_id = Column(Integer, ForeignKey('users.id')) + recipient_id = Column(Integer, ForeignKey('recipients.id')) + + def __init__(self, user_id, recipient_id): + self.user_id = user_id + self.recipient_id = recipient_id + + def __repr__(self): + # In theory this should maybe lookup the names for the IDs + return "" % (self.user_id, self.recipient_id) + +class Message(Base): + __tablename__ = 'messages' + + id = Column(Integer, primary_key=True) + # message_id is NOT unique -- it can be repeated with multi-recipient personals + message_id = Column(Integer) + sender_id = Column(Integer, ForeignKey('users.id')) + recipient_id = Column(Integer, ForeignKey('recipients.id')) + thread = Column(String) + content = Column(String) # Maybe should change this to an ID + time = Column(Integer) # Should use a real datetime thingy here + + def __init__(self, message_id, sender_id, recipient_id, thread, time, content): + self.sender_id = sender_id + self.recipient_id = recipient_id + self.thread = thread + self.time = time + self.content = content + self.message_id = message_id + + def __repr__(self): + return "" % \ + (self.message_id, self.sender_id, self.recipient_id, self.thread, self.time, self.content) + +class UserMessage(Base): + __tablename__ = 'user_messages' + + user_id = Column(Integer, ForeignKey('users.id'), primary_key=True) + message_id = Column(Integer, ForeignKey('messages.id'), primary_key=True) + # Maybe add an "archived" bit later + + def __init__(self, user_id, message_id): + self.user_id = user_id + self.message_id = message_id + + def __repr__(self): + # Ideally this should lookup the name for at least the user ID + return "" % (self.user_id, self.message_id) + +class Realm(Base): + __tablename__ = 'realms' + + id = Column(Integer, primary_key=True) + name = Column(String) + domain = Column(String) + + def __init__(self, name, domain): + self.name = name + self.domain = domain + + def __repr__(self): + # Ideally this should lookup the name for at least the user ID + return "" % (self.name, self.domain) + +Base.metadata.create_all(engine) +from sqlalchemy.orm import sessionmaker +Session = sessionmaker(bind=engine) +session = Session() + +if __name__ == "__main__": + jeff = User(username="Jeff", realm_id=1, email="sipbexch@mit.edu", password="blank") + tim = User(username="Tim", realm_id=1, email="starnine@mit.edu", password="blank") + + m = Message(sender_id=jeff.id, recipient_id=tim.id, + thread="personnel", time=1, content="We rock!", message_id=1) + session.add(jeff) + session.add(tim) + session.add(m) + print session.query(Message).filter_by(sender_id=jeff.id).first() + session.commit()