script/lib/iri_tweet/models.py
changeset 289 a5eff8f2b81d
parent 263 6671e9a4c9c5
child 392 aa445cd7300e
--- 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)