Development of an internal social media platform with personalised dashboards for students
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

models.py 1.9KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. from __future__ import absolute_import
  2. import datetime
  3. from sqlalchemy import (Column, Integer, String, Text, DateTime,
  4. Sequence, Boolean, ForeignKey, SmallInteger)
  5. from sqlalchemy.orm import relation
  6. from sqlalchemy.ext.declarative import declarative_base, declared_attr
  7. from sqlalchemy.schema import MetaData
  8. class_registry = {}
  9. metadata = MetaData()
  10. ModelBase = declarative_base(metadata=metadata, class_registry=class_registry)
  11. class Queue(object):
  12. __table_args__ = {'sqlite_autoincrement': True, 'mysql_engine': 'InnoDB'}
  13. id = Column(Integer, Sequence('queue_id_sequence'), primary_key=True,
  14. autoincrement=True)
  15. name = Column(String(200), unique=True)
  16. def __init__(self, name):
  17. self.name = name
  18. def __str__(self):
  19. return '<Queue({self.name})>'.format(self=self)
  20. @declared_attr
  21. def messages(cls):
  22. return relation('Message', backref='queue', lazy='noload')
  23. class Message(object):
  24. __table_args__ = {'sqlite_autoincrement': True, 'mysql_engine': 'InnoDB'}
  25. id = Column(Integer, Sequence('message_id_sequence'),
  26. primary_key=True, autoincrement=True)
  27. visible = Column(Boolean, default=True, index=True)
  28. sent_at = Column('timestamp', DateTime, nullable=True, index=True,
  29. onupdate=datetime.datetime.now)
  30. payload = Column(Text, nullable=False)
  31. version = Column(SmallInteger, nullable=False, default=1)
  32. __mapper_args__ = {'version_id_col': version}
  33. def __init__(self, payload, queue):
  34. self.payload = payload
  35. self.queue = queue
  36. def __str__(self):
  37. return '<Message: {0.sent_at} {0.payload} {0.queue_id}>'.format(self)
  38. @declared_attr
  39. def queue_id(self):
  40. return Column(
  41. Integer,
  42. ForeignKey(
  43. '%s.id' % class_registry['Queue'].__tablename__,
  44. name='FK_kombu_message_queue'
  45. )
  46. )