diff -r 69a7e0b101de -r 926f0426ce78 annot-server/models.py --- 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)