diff -r 33cf0231e253 -r 6671e9a4c9c5 script/lib/iri_tweet/models.py --- 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)