summaryrefslogtreecommitdiff
path: root/kombu/transport/sqlalchemy/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'kombu/transport/sqlalchemy/models.py')
-rw-r--r--kombu/transport/sqlalchemy/models.py67
1 files changed, 67 insertions, 0 deletions
diff --git a/kombu/transport/sqlalchemy/models.py b/kombu/transport/sqlalchemy/models.py
new file mode 100644
index 00000000..5fd56c0c
--- /dev/null
+++ b/kombu/transport/sqlalchemy/models.py
@@ -0,0 +1,67 @@
+"""Kombu transport using SQLAlchemy as the message store."""
+from __future__ import absolute_import, unicode_literals
+
+import datetime
+
+from sqlalchemy import (Column, Integer, String, Text, DateTime,
+ Sequence, Boolean, ForeignKey, SmallInteger)
+from sqlalchemy.ext.declarative import declarative_base, declared_attr
+from sqlalchemy.orm import relation
+from sqlalchemy.schema import MetaData
+
+class_registry = {}
+metadata = MetaData()
+ModelBase = declarative_base(metadata=metadata, class_registry=class_registry)
+
+
+class Queue(object):
+ """The queue class."""
+
+ __table_args__ = {'sqlite_autoincrement': True, 'mysql_engine': 'InnoDB'}
+
+ id = Column(Integer, Sequence('queue_id_sequence'), primary_key=True,
+ autoincrement=True)
+ name = Column(String(200), unique=True)
+
+ def __init__(self, name):
+ self.name = name
+
+ def __str__(self):
+ return '<Queue({self.name})>'.format(self=self)
+
+ @declared_attr
+ def messages(cls):
+ return relation('Message', backref='queue', lazy='noload')
+
+
+class Message(object):
+ """The message class."""
+
+ __table_args__ = {'sqlite_autoincrement': True, 'mysql_engine': 'InnoDB'}
+
+ id = Column(Integer, Sequence('message_id_sequence'),
+ primary_key=True, autoincrement=True)
+ visible = Column(Boolean, default=True, index=True)
+ sent_at = Column('timestamp', DateTime, nullable=True, index=True,
+ onupdate=datetime.datetime.now)
+ payload = Column(Text, nullable=False)
+ version = Column(SmallInteger, nullable=False, default=1)
+
+ __mapper_args__ = {'version_id_col': version}
+
+ def __init__(self, payload, queue):
+ self.payload = payload
+ self.queue = queue
+
+ def __str__(self):
+ return '<Message: {0.sent_at} {0.payload} {0.queue_id}>'.format(self)
+
+ @declared_attr
+ def queue_id(self):
+ return Column(
+ Integer,
+ ForeignKey(
+ '%s.id' % class_registry['Queue'].__tablename__,
+ name='FK_kombu_message_queue'
+ )
+ )