script/lib/iri_tweet/models.py
changeset 263 6671e9a4c9c5
parent 261 d84c4aa2a9eb
child 289 a5eff8f2b81d
--- a/script/lib/iri_tweet/models.py	Thu Aug 25 02:22:19 2011 +0200
+++ b/script/lib/iri_tweet/models.py	Thu Aug 25 18:23:53 2011 +0200
@@ -27,27 +27,34 @@
     else:
         return anyjson.serialize(obj)
 
-class TweetBase(object):
-    
-    def __init__(self, **kwargs):
-        for key, value in kwargs.items():
-            if hasattr(self, key):
-                setattr(self, key, value)
+class TweetMeta(type(Base)):
+            
+    def __init__(cls, name, bases, ns): #@NoSelf
+        def init(self, **kwargs):
+            for key, value in kwargs.items():
+                if hasattr(self, key):
+                    setattr(self, key, value)
+            super(cls, self).__init__()
+        setattr(cls, '__init__', init)
+        super(TweetMeta, cls).__init__(name, bases, ns)
     
 
-class ProcessEvent(Base, TweetBase):
+class ProcessEvent(Base):
+    __metaclass__ = TweetMeta
     __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", name="process_event_type_enum"), nullable=False)
+    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)
     args = Column(String)
     
-class EntityType(Base, TweetBase):
+class EntityType(Base):
+    __metaclass__ = TweetMeta
     __tablename__ = "tweet_entity_type"
     id = Column(Integer, primary_key=True, autoincrement=True)
     label = Column(String)
 
-class Entity(Base, TweetBase):
+class Entity(Base):
+    __metaclass__ = TweetMeta
     __tablename__ = "tweet_entity"
     id = Column(Integer, primary_key=True)
     tweet_id = Column(BigInteger, ForeignKey('tweet_tweet.id'))
@@ -60,24 +67,26 @@
     __mapper_args__ = {'polymorphic_on': type, 'polymorphic_identity': 'entity_entity', 'with_polymorphic':'*'}
 
 
-class TweetSource(Base, TweetBase):
+class TweetSource(Base):
+    __metaclass__ = TweetMeta
     __tablename__ = 'tweet_tweet_source'
     id = Column(Integer, primary_key=True, autoincrement=True)
     original_json = Column(String)
-    received_at = Column(DateTime, default=datetime.datetime.utcnow(), index=True)
+    received_at = Column(DateTime, default=datetime.datetime.utcnow, index=True)
 
 
-class TweetLog(Base, TweetBase):
-    
+class TweetLog(Base):
+        
     TWEET_STATUS = {
         'OK' : 1,
         'ERROR' : 2,
         'NOT_TWEET': 3,
     }
+    __metaclass__ = TweetMeta
     
     __tablename__ = 'tweet_tweet_log'
     id = Column(Integer, primary_key=True, autoincrement=True)
-    ts = Column(DateTime, default=datetime.datetime.utcnow(), index=True)
+    ts = Column(DateTime, default=datetime.datetime.utcnow, index=True)
     tweet_source_id = Column(Integer, ForeignKey('tweet_tweet_source.id'))
     tweet_source = relationship("TweetSource", backref="logs")
     status = Column(Integer)
@@ -85,7 +94,8 @@
     error_stack = Column(String)
  
     
-class Tweet(Base, TweetBase):
+class Tweet(Base):
+    __metaclass__ = TweetMeta
     __tablename__ = 'tweet_tweet'
 
     id = Column(BigInteger, primary_key=True, autoincrement=False)
@@ -111,28 +121,31 @@
     tweet_source_id = Column(Integer, ForeignKey('tweet_tweet_source.id'))
     tweet_source = relationship("TweetSource", backref="tweet")
     entity_list = relationship(Entity, backref='tweet')
-    received_at = Column(DateTime, default=datetime.datetime.utcnow(), index=True)
+    received_at = Column(DateTime, default=datetime.datetime.utcnow, index=True)
         
 
-class UserMessage(Base, TweetBase):
+class UserMessage(Base):
+    __metaclass__ = TweetMeta
     __tablename__ = "tweet_user_message"
 
     id = Column(Integer, primary_key=True)
     user_id = Column(Integer, ForeignKey('tweet_user.id'))
     user = relationship("User", backref="messages")
-    created_at = Column(DateTime, default=datetime.datetime.utcnow())
+    created_at = Column(DateTime, default=datetime.datetime.utcnow)
     message_id = Column(Integer, ForeignKey('tweet_message.id'))
 
-class Message(Base, TweetBase):
+class Message(Base):
+    __metaclass__ = TweetMeta
     __tablename__ = "tweet_message"
     
     id = Column(Integer, primary_key=True)
-    created_at = Column(DateTime, default=datetime.datetime.utcnow())
+    created_at = Column(DateTime, default=datetime.datetime.utcnow)
     text = Column(String)
     users = relationship(UserMessage, backref='message')
         
 
-class User(Base, TweetBase):
+class User(Base):
+    __metaclass__ = TweetMeta
     __tablename__ = "tweet_user"
     
     id = Column(BigInteger, primary_key=True, autoincrement=False)
@@ -156,10 +169,12 @@
     profile_background_image_url = Column(String)
     profile_background_tile = Column(Boolean)
     profile_image_url = Column(String)
+    profile_image_url_https = Column(String)
     profile_link_color = Column(String)
     profile_sidebar_border_color = Column(String)
     profile_sidebar_fill_color = Column(String)
     profile_text_color = Column(String)
+    default_profile_image = Column(String)
     profile_use_background_image = Column(Boolean)
     protected = Column(Boolean)
     screen_name = Column(String, index=True)
@@ -171,27 +186,31 @@
     verified = Column(Boolean)
     
 
-class Hashtag(Base, TweetBase):
+class Hashtag(Base):
+    __metaclass__ = TweetMeta
     __tablename__ = "tweet_hashtag"
     id = Column(Integer, primary_key=True)
     text = Column(String, unique=True, index=True)
 
 
-class Url(Base, TweetBase):
+class Url(Base):
+    __metaclass__ = TweetMeta
     __tablename__ = "tweet_url"
     id = Column(Integer, primary_key=True)
     url = Column(String, unique=True)
     expanded_url = Column(String)
 
 
-class MediaType(Base, TweetBase):
+class MediaType(Base):
+    __metaclass__ = TweetMeta
     __tablename__ = "tweet_media_type"
     id = Column(Integer, primary_key=True, autoincrement=True)
     label = Column(String, unique=True, index=True)
 
     
 
-class Media(Base, TweetBase):
+class Media(Base):
+    __metaclass__ = TweetMeta
     __tablename__ = "tweet_media"
     id = Column(BigInteger, primary_key=True, autoincrement=False)
     id_str = Column(String, unique=True)