--- a/annot-server/models.py Fri Oct 17 17:54:06 2014 +0200
+++ b/annot-server/models.py Sun Oct 19 12:52:38 2014 +0200
@@ -8,38 +8,28 @@
import json
import uuid
-from sqlalchemy import Column, Integer, String, DateTime, Table, Index, text
+from sqlalchemy import Column, Integer, String, DateTime, Text, Table, Index, text, ForeignKey
+from sqlalchemy.orm import relationship, backref
from sqlalchemy.sql import func
from sqlalchemy.dialects.postgresql import UUID, JSON
from database import Base, engine
-#def get_table_create_stmt():
-# return (
-# "CREATE TABLE IF NOT EXISTS annotations ( "
-# "id serial PRIMARY KEY, "
-# "uuid uuid UNIQUE, "
-# "created timestamp default (now() at time zone 'utc') NOT NULL, "
-# "ts timestamptz NOT NULL, "
-# "event varchar(255) NOT NULL, "
-# "channel varchar(255) NOT NULL, "
-# "content json);"
-# )
class Annotation(Base):
- __tablename__ = 'annotations'
+ __tablename__ = 'annotation'
id = Column(Integer, primary_key=True, nullable=False)
uuid = Column(UUID, unique=True, nullable=False)
created = Column(DateTime, nullable=False, server_default=text("(now() at time zone 'utc')") )
ts = Column(DateTime(timezone=True), nullable=False)
- event = Column(String(255), nullable=False)
+ event_code = Column(String(255), ForeignKey('event.code'), nullable=False)
channel = Column(String(255), nullable=False)
content = Column(JSON)
-Index('idx_event', Annotation.event)
-Index('idx_channel', Annotation.channel)
-Index('idx_ts', Annotation.ts)
+Index('idx_annotation_event', Annotation.event_code)
+Index('idx_annotation_channel', Annotation.channel)
+Index('idx_annotation_ts', Annotation.ts)
def insert_annot_async(params, conn):
@@ -59,3 +49,31 @@
defer.addCallback(lambda _: stmt.params)
return defer
+
+
+class Event(Base):
+ __tablename__ = 'event'
+
+ id = Column(Integer, primary_key=True, nullable=False)
+ code = Column(String(255), unique=True, nullable=False)
+ label = Column(String(2048), nullable=False)
+ description = Column(Text(), nullable=True)
+
+ sessions = relationship("EventSession", order_by="EventSession.order", backref="event")
+
+ def __unicode__(self):
+ return self.code
+
+Index('idx_event_code', Event.code)
+
+class EventSession(Base):
+ __tablename__ = 'event_session'
+
+ id = Column(Integer, primary_key=True, nullable=False)
+ event_id = Column(Integer, ForeignKey(Event.id), nullable=False)
+ project_id = Column(String(2048), nullable=True)
+ order = Column(Integer, nullable=False, default=0)
+ categories_json = Column(JSON, nullable=True)
+
+
+Index('idx_event_session_order', EventSession.order)