script/lib/iri_tweet/models.py
changeset 263 6671e9a4c9c5
parent 261 d84c4aa2a9eb
child 289 a5eff8f2b81d
equal deleted inserted replaced
262:33cf0231e253 263:6671e9a4c9c5
    25     if obj is None:
    25     if obj is None:
    26         return None
    26         return None
    27     else:
    27     else:
    28         return anyjson.serialize(obj)
    28         return anyjson.serialize(obj)
    29 
    29 
    30 class TweetBase(object):
    30 class TweetMeta(type(Base)):
    31     
    31             
    32     def __init__(self, **kwargs):
    32     def __init__(cls, name, bases, ns): #@NoSelf
    33         for key, value in kwargs.items():
    33         def init(self, **kwargs):
    34             if hasattr(self, key):
    34             for key, value in kwargs.items():
    35                 setattr(self, key, value)
    35                 if hasattr(self, key):
    36     
    36                     setattr(self, key, value)
    37 
    37             super(cls, self).__init__()
    38 class ProcessEvent(Base, TweetBase):
    38         setattr(cls, '__init__', init)
       
    39         super(TweetMeta, cls).__init__(name, bases, ns)
       
    40     
       
    41 
       
    42 class ProcessEvent(Base):
       
    43     __metaclass__ = TweetMeta
    39     __tablename__ = "tweet_process_event"
    44     __tablename__ = "tweet_process_event"
    40     id = Column(Integer, primary_key=True, autoincrement=True)
    45     id = Column(Integer, primary_key=True, autoincrement=True)
    41     ts = Column(DateTime, default=datetime.datetime.utcnow(), index=True)
    46     ts = Column(DateTime, default=datetime.datetime.utcnow, index=True)
    42     type = Column(Enum("start","pid","shutdown","error", name="process_event_type_enum"), nullable=False)
    47     type = Column(Enum("start","pid","shutdown","error", "start_worker", "stop_worker", name="process_event_type_enum"), nullable=False)
    43     args = Column(String)
    48     args = Column(String)
    44     
    49     
    45 class EntityType(Base, TweetBase):
    50 class EntityType(Base):
       
    51     __metaclass__ = TweetMeta
    46     __tablename__ = "tweet_entity_type"
    52     __tablename__ = "tweet_entity_type"
    47     id = Column(Integer, primary_key=True, autoincrement=True)
    53     id = Column(Integer, primary_key=True, autoincrement=True)
    48     label = Column(String)
    54     label = Column(String)
    49 
    55 
    50 class Entity(Base, TweetBase):
    56 class Entity(Base):
       
    57     __metaclass__ = TweetMeta
    51     __tablename__ = "tweet_entity"
    58     __tablename__ = "tweet_entity"
    52     id = Column(Integer, primary_key=True)
    59     id = Column(Integer, primary_key=True)
    53     tweet_id = Column(BigInteger, ForeignKey('tweet_tweet.id'))
    60     tweet_id = Column(BigInteger, ForeignKey('tweet_tweet.id'))
    54     type = Column(String)
    61     type = Column(String)
    55     entity_type_id = Column(Integer, ForeignKey('tweet_entity_type.id'), nullable=False)
    62     entity_type_id = Column(Integer, ForeignKey('tweet_entity_type.id'), nullable=False)
    58     indice_end = Column(Integer)
    65     indice_end = Column(Integer)
    59     source = Column(String)
    66     source = Column(String)
    60     __mapper_args__ = {'polymorphic_on': type, 'polymorphic_identity': 'entity_entity', 'with_polymorphic':'*'}
    67     __mapper_args__ = {'polymorphic_on': type, 'polymorphic_identity': 'entity_entity', 'with_polymorphic':'*'}
    61 
    68 
    62 
    69 
    63 class TweetSource(Base, TweetBase):
    70 class TweetSource(Base):
       
    71     __metaclass__ = TweetMeta
    64     __tablename__ = 'tweet_tweet_source'
    72     __tablename__ = 'tweet_tweet_source'
    65     id = Column(Integer, primary_key=True, autoincrement=True)
    73     id = Column(Integer, primary_key=True, autoincrement=True)
    66     original_json = Column(String)
    74     original_json = Column(String)
    67     received_at = Column(DateTime, default=datetime.datetime.utcnow(), index=True)
    75     received_at = Column(DateTime, default=datetime.datetime.utcnow, index=True)
    68 
    76 
    69 
    77 
    70 class TweetLog(Base, TweetBase):
    78 class TweetLog(Base):
    71     
    79         
    72     TWEET_STATUS = {
    80     TWEET_STATUS = {
    73         'OK' : 1,
    81         'OK' : 1,
    74         'ERROR' : 2,
    82         'ERROR' : 2,
    75         'NOT_TWEET': 3,
    83         'NOT_TWEET': 3,
    76     }
    84     }
       
    85     __metaclass__ = TweetMeta
    77     
    86     
    78     __tablename__ = 'tweet_tweet_log'
    87     __tablename__ = 'tweet_tweet_log'
    79     id = Column(Integer, primary_key=True, autoincrement=True)
    88     id = Column(Integer, primary_key=True, autoincrement=True)
    80     ts = Column(DateTime, default=datetime.datetime.utcnow(), index=True)
    89     ts = Column(DateTime, default=datetime.datetime.utcnow, index=True)
    81     tweet_source_id = Column(Integer, ForeignKey('tweet_tweet_source.id'))
    90     tweet_source_id = Column(Integer, ForeignKey('tweet_tweet_source.id'))
    82     tweet_source = relationship("TweetSource", backref="logs")
    91     tweet_source = relationship("TweetSource", backref="logs")
    83     status = Column(Integer)
    92     status = Column(Integer)
    84     error = Column(String)
    93     error = Column(String)
    85     error_stack = Column(String)
    94     error_stack = Column(String)
    86  
    95  
    87     
    96     
    88 class Tweet(Base, TweetBase):
    97 class Tweet(Base):
       
    98     __metaclass__ = TweetMeta
    89     __tablename__ = 'tweet_tweet'
    99     __tablename__ = 'tweet_tweet'
    90 
   100 
    91     id = Column(BigInteger, primary_key=True, autoincrement=False)
   101     id = Column(BigInteger, primary_key=True, autoincrement=False)
    92     id_str = Column(String)
   102     id_str = Column(String)
    93     contributors = Column(String)
   103     contributors = Column(String)
   109     user_id = Column(Integer, ForeignKey('tweet_user.id'))
   119     user_id = Column(Integer, ForeignKey('tweet_user.id'))
   110     user = relationship("User", backref="tweets")
   120     user = relationship("User", backref="tweets")
   111     tweet_source_id = Column(Integer, ForeignKey('tweet_tweet_source.id'))
   121     tweet_source_id = Column(Integer, ForeignKey('tweet_tweet_source.id'))
   112     tweet_source = relationship("TweetSource", backref="tweet")
   122     tweet_source = relationship("TweetSource", backref="tweet")
   113     entity_list = relationship(Entity, backref='tweet')
   123     entity_list = relationship(Entity, backref='tweet')
   114     received_at = Column(DateTime, default=datetime.datetime.utcnow(), index=True)
   124     received_at = Column(DateTime, default=datetime.datetime.utcnow, index=True)
   115         
   125         
   116 
   126 
   117 class UserMessage(Base, TweetBase):
   127 class UserMessage(Base):
       
   128     __metaclass__ = TweetMeta
   118     __tablename__ = "tweet_user_message"
   129     __tablename__ = "tweet_user_message"
   119 
   130 
   120     id = Column(Integer, primary_key=True)
   131     id = Column(Integer, primary_key=True)
   121     user_id = Column(Integer, ForeignKey('tweet_user.id'))
   132     user_id = Column(Integer, ForeignKey('tweet_user.id'))
   122     user = relationship("User", backref="messages")
   133     user = relationship("User", backref="messages")
   123     created_at = Column(DateTime, default=datetime.datetime.utcnow())
   134     created_at = Column(DateTime, default=datetime.datetime.utcnow)
   124     message_id = Column(Integer, ForeignKey('tweet_message.id'))
   135     message_id = Column(Integer, ForeignKey('tweet_message.id'))
   125 
   136 
   126 class Message(Base, TweetBase):
   137 class Message(Base):
       
   138     __metaclass__ = TweetMeta
   127     __tablename__ = "tweet_message"
   139     __tablename__ = "tweet_message"
   128     
   140     
   129     id = Column(Integer, primary_key=True)
   141     id = Column(Integer, primary_key=True)
   130     created_at = Column(DateTime, default=datetime.datetime.utcnow())
   142     created_at = Column(DateTime, default=datetime.datetime.utcnow)
   131     text = Column(String)
   143     text = Column(String)
   132     users = relationship(UserMessage, backref='message')
   144     users = relationship(UserMessage, backref='message')
   133         
   145         
   134 
   146 
   135 class User(Base, TweetBase):
   147 class User(Base):
       
   148     __metaclass__ = TweetMeta
   136     __tablename__ = "tweet_user"
   149     __tablename__ = "tweet_user"
   137     
   150     
   138     id = Column(BigInteger, primary_key=True, autoincrement=False)
   151     id = Column(BigInteger, primary_key=True, autoincrement=False)
   139     id_str = Column(String)
   152     id_str = Column(String)
   140     contributors_enabled = Column(Boolean)
   153     contributors_enabled = Column(Boolean)
   154     notifications = Column(String)
   167     notifications = Column(String)
   155     profile_background_color = Column(String)
   168     profile_background_color = Column(String)
   156     profile_background_image_url = Column(String)
   169     profile_background_image_url = Column(String)
   157     profile_background_tile = Column(Boolean)
   170     profile_background_tile = Column(Boolean)
   158     profile_image_url = Column(String)
   171     profile_image_url = Column(String)
       
   172     profile_image_url_https = Column(String)
   159     profile_link_color = Column(String)
   173     profile_link_color = Column(String)
   160     profile_sidebar_border_color = Column(String)
   174     profile_sidebar_border_color = Column(String)
   161     profile_sidebar_fill_color = Column(String)
   175     profile_sidebar_fill_color = Column(String)
   162     profile_text_color = Column(String)
   176     profile_text_color = Column(String)
       
   177     default_profile_image = Column(String)
   163     profile_use_background_image = Column(Boolean)
   178     profile_use_background_image = Column(Boolean)
   164     protected = Column(Boolean)
   179     protected = Column(Boolean)
   165     screen_name = Column(String, index=True)
   180     screen_name = Column(String, index=True)
   166     show_all_inline_media = Column(Boolean)
   181     show_all_inline_media = Column(Boolean)
   167     statuses_count = Column(Integer)
   182     statuses_count = Column(Integer)
   169     url = Column(String)
   184     url = Column(String)
   170     utc_offset = Column(Integer)
   185     utc_offset = Column(Integer)
   171     verified = Column(Boolean)
   186     verified = Column(Boolean)
   172     
   187     
   173 
   188 
   174 class Hashtag(Base, TweetBase):
   189 class Hashtag(Base):
       
   190     __metaclass__ = TweetMeta
   175     __tablename__ = "tweet_hashtag"
   191     __tablename__ = "tweet_hashtag"
   176     id = Column(Integer, primary_key=True)
   192     id = Column(Integer, primary_key=True)
   177     text = Column(String, unique=True, index=True)
   193     text = Column(String, unique=True, index=True)
   178 
   194 
   179 
   195 
   180 class Url(Base, TweetBase):
   196 class Url(Base):
       
   197     __metaclass__ = TweetMeta
   181     __tablename__ = "tweet_url"
   198     __tablename__ = "tweet_url"
   182     id = Column(Integer, primary_key=True)
   199     id = Column(Integer, primary_key=True)
   183     url = Column(String, unique=True)
   200     url = Column(String, unique=True)
   184     expanded_url = Column(String)
   201     expanded_url = Column(String)
   185 
   202 
   186 
   203 
   187 class MediaType(Base, TweetBase):
   204 class MediaType(Base):
       
   205     __metaclass__ = TweetMeta
   188     __tablename__ = "tweet_media_type"
   206     __tablename__ = "tweet_media_type"
   189     id = Column(Integer, primary_key=True, autoincrement=True)
   207     id = Column(Integer, primary_key=True, autoincrement=True)
   190     label = Column(String, unique=True, index=True)
   208     label = Column(String, unique=True, index=True)
   191 
   209 
   192     
   210     
   193 
   211 
   194 class Media(Base, TweetBase):
   212 class Media(Base):
       
   213     __metaclass__ = TweetMeta
   195     __tablename__ = "tweet_media"
   214     __tablename__ = "tweet_media"
   196     id = Column(BigInteger, primary_key=True, autoincrement=False)
   215     id = Column(BigInteger, primary_key=True, autoincrement=False)
   197     id_str = Column(String, unique=True)
   216     id_str = Column(String, unique=True)
   198     media_url = Column(String, unique=True)
   217     media_url = Column(String, unique=True)
   199     media_url_https = Column(String, unique=True)
   218     media_url_https = Column(String, unique=True)