diff -r 4c870c767d3e -r a5eff8f2b81d script/lib/iri_tweet/models.py --- a/script/lib/iri_tweet/models.py Tue Sep 20 16:55:16 2011 +0200 +++ b/script/lib/iri_tweet/models.py Thu Sep 22 12:37:53 2011 +0200 @@ -1,10 +1,11 @@ from sqlalchemy import (Boolean, Column, Enum, BigInteger, Integer, String, ForeignKey, DateTime, create_engine) from sqlalchemy.ext.declarative import declarative_base -from sqlalchemy.orm import relationship +from sqlalchemy.orm import relationship, sessionmaker import anyjson import datetime import email.utils +import iri_tweet Base = declarative_base() @@ -44,7 +45,7 @@ __tablename__ = "tweet_process_event" id = Column(Integer, primary_key=True, autoincrement=True) ts = Column(DateTime, default=datetime.datetime.utcnow, index=True) - type = Column(Enum("start","pid","shutdown","error", "start_worker", "stop_worker", name="process_event_type_enum"), nullable=False) + type = Column(Enum("start","pid","shutdown","error", "start_worker", "stop_worker", "model_version", "application_name", "application_version", name="process_event_type_enum"), nullable=False) args = Column(String) class EntityType(Base): @@ -255,19 +256,35 @@ media_id = Column(BigInteger, ForeignKey('tweet_media.id')) media = relationship(Media, primaryjoin=(media_id == Media.id)) +def add_model_version(session, must_commit=True): + pe = ProcessEvent(args=iri_tweet.get_version(), type="model_version") + session.add(pe) + if must_commit: + session.commit() def setup_database(*args, **kwargs): - - create_all = True - if "create_all" in kwargs: - create_all = kwargs["create_all"] - del(kwargs["create_all"]) + + session_argname = [ 'autoflush','binds', "class_", "_enable_transaction_accounting","expire_on_commit", "extension", "query_cls", "twophase", "weak_identity_map", "autocommit"] + + kwargs_ce = dict((k, v) for k,v in kwargs.items() if (k not in session_argname and k != "create_all")) + + engine = create_engine(*args, **kwargs_ce) + metadata = Base.metadata + + kwargs_sm = {'bind': engine} + + kwargs_sm.update([(argname, kwargs[argname]) for argname in session_argname if argname in kwargs]) - engine = create_engine(*args, **kwargs) - metadata = Base.metadata - - if create_all: + Session = sessionmaker(**kwargs_sm) + #set model version + + if kwargs.get('create_all', True): metadata.create_all(engine) + session = Session() + try: + add_model_version(session) + finally: + session.close() - return (engine, metadata) + return (engine, metadata, Session)