correct getting duration from content. try to improve error management
#
# See LICENCE for detail
# Copyright (c) 2014 IRI
#
import datetime
import json
import uuid
from sqlalchemy import (Column, Integer, String, DateTime, Text, Table, Index,
text, ForeignKey, Boolean)
from sqlalchemy.orm import relationship, backref
from sqlalchemy.sql import func
from sqlalchemy.dialects.postgresql import UUID, JSON
from database import Base, engine
class Annotation(Base):
__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_code = Column(String(255), ForeignKey('event.code'), nullable=False)
channel = Column(String(255), nullable=False)
content = Column(JSON)
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):
content = params.get('content', {})
if not isinstance(content, basestring):
params['content'] = json.dumps(content)
if 'uuid' not in params:
params['uuid'] = uuid.uuid4()
if 'ts' not in params:
params['ts'] = datetime.utcnow()
stmt = Annotation.__table__.insert().values(**params).compile(engine)
defer = conn.runOperation(stmt.string, stmt.params)
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)
start_date = Column(DateTime(), nullable=True)
active = Column(Boolean(), nullable=False, default=True, server_default='1')
sessions = relationship("EventSession", order_by="EventSession.order", backref="event")
def __unicode__(self):
return self.code
Index('idx_event_code', Event.code)
Index('idx_event_active', Event.active)
Index('idx_event_start_date', Event.start_date)
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)
start_ts = Column(DateTime(timezone=True), nullable=True)
duration = Column(Integer, nullable=True)
categories_json = Column(JSON, nullable=True)
Index('idx_event_session_order', EventSession.order)
Index('idx_event_session_start_ts', EventSession.start_ts)