script/lib/iri_tweet/models.py
changeset 254 2209e66bb50b
parent 253 e9335ee3cf71
child 255 500cd0405c7a
equal deleted inserted replaced
253:e9335ee3cf71 254:2209e66bb50b
    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 EntityType(Base):
       
    31     __tablename__ = "tweet_entity_type"
       
    32     id = Column(Integer, primary_key=True, autoincrement=True)
       
    33     label = Column(String)
       
    34 
    30 class Entity(Base):
    35 class Entity(Base):
    31     __tablename__ = "tweet_entity"
    36     __tablename__ = "tweet_entity"
    32     id = Column(Integer, primary_key = True)
    37     id = Column(Integer, primary_key=True)
    33     tweet_id = Column(BigInteger, ForeignKey('tweet_tweet.id'))
    38     tweet_id = Column(BigInteger, ForeignKey('tweet_tweet.id'))
    34     #tweet = relationship(Tweet, primaryjoin = tweet_id == Tweet.id)
       
    35     type = Column(String)
    39     type = Column(String)
       
    40     entity_type_id = Column(Integer, ForeignKey('tweet_entity_type.id'), nullable=False)
       
    41     entity_type = relationship("EntityType", backref="entities")
    36     indice_start = Column(Integer)
    42     indice_start = Column(Integer)
    37     indice_end = Column(Integer)
    43     indice_end = Column(Integer)
    38     __mapper_args__ = {'polymorphic_on': type}
    44     source = Column(String)
    39 
    45     __mapper_args__ = {'polymorphic_on': type, 'polymorphic_identity': 'entity_entity', 'with_polymorphic':'*'}
    40     def __init__(self, **kwargs):
    46 
    41         for key, value in kwargs.items():
    47     def __init__(self, **kwargs):
    42             if hasattr(self,key):
    48         for key, value in kwargs.items():
    43                 setattr(self,key,value)
    49             if hasattr(self, key):
       
    50                 setattr(self, key, value)
    44 
    51 
    45 class TweetSource(Base):
    52 class TweetSource(Base):
    46     __tablename__ = 'tweet_tweet_source'
    53     __tablename__ = 'tweet_tweet_source'
    47     id = Column(Integer, primary_key = True, autoincrement=True)
    54     id = Column(Integer, primary_key=True, autoincrement=True)
    48     original_json = Column(String)
    55     original_json = Column(String)
    49     received_at = Column(DateTime, default=datetime.datetime.now())
    56     received_at = Column(DateTime, default=datetime.datetime.now(), index=True)
    50     
    57     
    51     def __init__(self, **kwargs):
    58     def __init__(self, **kwargs):
    52         for key, value in kwargs.items():
    59         for key, value in kwargs.items():
    53             if hasattr(self,key):
    60             if hasattr(self, key):
    54                 setattr(self,key,value)
    61                 setattr(self, key, value)
    55 
    62 
    56 
    63 
    57 class TweetLog(Base):
    64 class TweetLog(Base):
    58     
    65     
    59     TWEET_STATUS = {
    66     TWEET_STATUS = {
    60         'OK' : 1,
    67         'OK' : 1,
    61         'ERROR' : 2,
    68         'ERROR' : 2,
    62     }
    69     }
    63     
    70     
    64     __tablename__ = 'tweet_tweet_log'
    71     __tablename__ = 'tweet_tweet_log'
    65     id = Column(Integer, primary_key = True, autoincrement=True)
    72     id = Column(Integer, primary_key=True, autoincrement=True)
    66     tweet_source_id = Column(Integer, ForeignKey('tweet_tweet_source.id'))
    73     tweet_source_id = Column(Integer, ForeignKey('tweet_tweet_source.id'))
    67     tweet_source = relationship("TweetSource", backref="logs")
    74     tweet_source = relationship("TweetSource", backref="logs")
    68     status = Column(Integer)
    75     status = Column(Integer)
    69     error = Column(String)
    76     error = Column(String)
    70     error_stack = Column(String)
    77     error_stack = Column(String)
    74     __tablename__ = 'tweet_tweet'
    81     __tablename__ = 'tweet_tweet'
    75 
    82 
    76     id = Column(BigInteger, primary_key=True, autoincrement=False)
    83     id = Column(BigInteger, primary_key=True, autoincrement=False)
    77     id_str = Column(String)
    84     id_str = Column(String)
    78     contributors = Column(String)
    85     contributors = Column(String)
    79     coordinates =  Column(String) 
    86     coordinates = Column(String) 
    80     created_at = Column(DateTime)
    87     created_at = Column(DateTime)
    81     favorited = Column(Boolean)
    88     favorited = Column(Boolean)
    82     geo = Column(String)
    89     geo = Column(String)
    83     in_reply_to_screen_name = Column(String)
    90     in_reply_to_screen_name = Column(String)
    84     in_reply_to_status_id = Column(BigInteger) 
    91     in_reply_to_status_id = Column(BigInteger) 
    85     in_reply_to_status_id_str = Column(String)
    92     in_reply_to_status_id_str = Column(String)
    86     in_reply_to_user_id = Column(Integer)
    93     in_reply_to_user_id = Column(BigInteger)
    87     in_reply_to_user_id_str = Column(String)
    94     in_reply_to_user_id_str = Column(String)
    88     place = Column(String)
    95     place = Column(String)
    89     retweet_count = Column(Integer)
    96     retweet_count = Column(String)
    90     retweeted = Column(Boolean)
    97     retweeted = Column(Boolean)
    91     source = Column(String)
    98     source = Column(String)
    92     text = Column(String)
    99     text = Column(String)
    93     truncated = Column(Boolean)
   100     truncated = Column(Boolean)
    94     user_id = Column(Integer, ForeignKey('tweet_user.id'))
   101     user_id = Column(Integer, ForeignKey('tweet_user.id'))
    95     user = relationship("User", backref="tweets")
   102     user = relationship("User", backref="tweets")
    96     tweet_source_id = Column(Integer, ForeignKey('tweet_tweet_source.id'))
   103     tweet_source_id = Column(Integer, ForeignKey('tweet_tweet_source.id'))
    97     tweet_source = relationship("TweetSource", backref="tweet")
   104     tweet_source = relationship("TweetSource", backref="tweet")
    98     entity_list = relationship(Entity, backref='tweet')
   105     entity_list = relationship(Entity, backref='tweet')
    99     received_at = Column(DateTime, default=datetime.datetime.now())
   106     received_at = Column(DateTime, default=datetime.datetime.now(), index=True)
   100         
   107         
   101     def __init__(self, **kwargs):
   108     def __init__(self, **kwargs):
   102         for key, value in kwargs.items():
   109         for key, value in kwargs.items():
   103             if hasattr(self,key):
   110             if hasattr(self, key):
   104                 setattr(self,key,value)
   111                 setattr(self, key, value)
   105 
   112 
   106 class UserMessage(Base):
   113 class UserMessage(Base):
   107     __tablename__ = "tweet_user_message"
   114     __tablename__ = "tweet_user_message"
   108 
   115 
   109     id = Column(Integer, primary_key = True)
   116     id = Column(Integer, primary_key=True)
   110     user_id = Column(Integer, ForeignKey('tweet_user.id'))
   117     user_id = Column(Integer, ForeignKey('tweet_user.id'))
   111     user = relationship("User", backref="messages")
   118     user = relationship("User", backref="messages")
   112     created_at = Column(DateTime, default=datetime.datetime.now())
   119     created_at = Column(DateTime, default=datetime.datetime.now())
   113     message_id = Column(Integer, ForeignKey('tweet_message.id'))
   120     message_id = Column(Integer, ForeignKey('tweet_message.id'))
   114 
   121 
   115 class Message(Base):
   122 class Message(Base):
   116     __tablename__ = "tweet_message"
   123     __tablename__ = "tweet_message"
   117     
   124     
   118     id = Column(Integer, primary_key = True)
   125     id = Column(Integer, primary_key=True)
   119     created_at = Column(DateTime, default=datetime.datetime.now())
   126     created_at = Column(DateTime, default=datetime.datetime.now())
   120     text = Column(String)
   127     text = Column(String)
   121     users = relationship(UserMessage, backref='message')
   128     users = relationship(UserMessage, backref='message')
   122         
   129         
   123 
   130 
   124 class User(Base):
   131 class User(Base):
   125     __tablename__ = "tweet_user"
   132     __tablename__ = "tweet_user"
   126     
   133     
   127     id = Column(Integer, primary_key = True, autoincrement=False)
   134     id = Column(BigInteger, primary_key=True, autoincrement=False)
   128     id_str= Column(String)
   135     id_str = Column(String)
   129     contributors_enabled= Column(Boolean)
   136     contributors_enabled = Column(Boolean)
   130     created_at= Column(DateTime)
   137     created_at = Column(DateTime)
   131     description= Column(String)
   138     description = Column(String)
   132     favourites_count = Column(Integer)
   139     favourites_count = Column(Integer)
   133     follow_request_sent = Column(Boolean)
   140     follow_request_sent = Column(Boolean)
   134     followers_count = Column(Integer)
   141     followers_count = Column(Integer)
   135     following = Column(String)
   142     following = Column(String)
   136     friends_count = Column(Integer)
   143     friends_count = Column(Integer)
   137     geo_enabled= Column(Boolean)
   144     geo_enabled = Column(Boolean)
   138     is_translator= Column(Boolean)
   145     is_translator = Column(Boolean)
   139     lang = Column(String)
   146     lang = Column(String)
   140     listed_count = Column(Integer)
   147     listed_count = Column(Integer)
   141     location= Column(String)
   148     location = Column(String)
   142     name = Column(String)
   149     name = Column(String)
   143     notifications = Column(String)
   150     notifications = Column(String)
   144     profile_background_color= Column(String)
   151     profile_background_color = Column(String)
   145     profile_background_image_url= Column(String)
   152     profile_background_image_url = Column(String)
   146     profile_background_tile= Column(Boolean)
   153     profile_background_tile = Column(Boolean)
   147     profile_image_url= Column(String)
   154     profile_image_url = Column(String)
   148     profile_link_color= Column(String)
   155     profile_link_color = Column(String)
   149     profile_sidebar_border_color= Column(String)
   156     profile_sidebar_border_color = Column(String)
   150     profile_sidebar_fill_color= Column(String)
   157     profile_sidebar_fill_color = Column(String)
   151     profile_text_color= Column(String)
   158     profile_text_color = Column(String)
   152     profile_use_background_image= Column(Boolean)
   159     profile_use_background_image = Column(Boolean)
   153     protected= Column(Boolean)
   160     protected = Column(Boolean)
   154     screen_name= Column(String, index=True, unique=True)
   161     screen_name = Column(String, index=True, unique=True)
   155     show_all_inline_media= Column(Boolean)
   162     show_all_inline_media = Column(Boolean)
   156     statuses_count = Column(Integer)
   163     statuses_count = Column(Integer)
   157     time_zone= Column(String)
   164     time_zone = Column(String)
   158     url= Column(String)
   165     url = Column(String)
   159     utc_offset = Column(Integer)
   166     utc_offset = Column(Integer)
   160     verified= Column(Boolean)
   167     verified = Column(Boolean)
   161 
   168 
   162     def __init__(self, **kwargs):
   169     def __init__(self, **kwargs):
   163         for key, value in kwargs.items():
   170         for key, value in kwargs.items():
   164             if hasattr(self,key):
   171             if hasattr(self, key):
   165                 setattr(self,key,value)    
   172                 setattr(self, key, value)    
   166     
   173     
   167 
   174 
   168 class Hashtag(Base):
   175 class Hashtag(Base):
   169     __tablename__ = "tweet_hashtag"
   176     __tablename__ = "tweet_hashtag"
   170     id = Column(Integer, primary_key=True)
   177     id = Column(Integer, primary_key=True)
   171     text = Column(String, unique = True, index = True)
   178     text = Column(String, unique=True, index=True)
   172     def __init__(self, **kwargs):
   179     def __init__(self, **kwargs):
   173         for key, value in kwargs.items():
   180         for key, value in kwargs.items():
   174             if hasattr(self,key):
   181             if hasattr(self, key):
   175                 setattr(self,key,value)
   182                 setattr(self, key, value)
   176 
       
   177 
       
   178 
   183 
   179 class Url(Base):
   184 class Url(Base):
   180     __tablename__ = "tweet_url"
   185     __tablename__ = "tweet_url"
   181     id = Column(Integer, primary_key=True)
   186     id = Column(Integer, primary_key=True)
   182     url = Column(String, unique=True)
   187     url = Column(String, unique=True)
   183     expanded_url = Column(String)
   188     expanded_url = Column(String)
   184     def __init__(self, **kwargs):
   189     def __init__(self, **kwargs):
   185         for key, value in kwargs.items():
   190         for key, value in kwargs.items():
   186             if hasattr(self,key):
   191             if hasattr(self, key):
   187                 setattr(self,key,value)
   192                 setattr(self, key, value)
       
   193 
       
   194 class MediaType(Base):
       
   195     __tablename__ = "tweet_media_type"
       
   196     id = Column(Integer, primary_key=True, autoincrement=True)
       
   197     label = Column(String, unique=True, index=True)
       
   198     def __init__(self, **kwargs):
       
   199         for key, value in kwargs.items():
       
   200             if hasattr(self, key):
       
   201                 setattr(self, key, value)
       
   202     
       
   203 
       
   204 class Media(Base):
       
   205     __tablename__ = "tweet_media"
       
   206     id = Column(BigInteger, primary_key=True, autoincrement=False)
       
   207     id_str = Column(String, unique=True)
       
   208     media_url = Column(String, unique=True)
       
   209     media_url_https = Column(String, unique=True)
       
   210     url = Column(String)
       
   211     display_url = Column(String)
       
   212     expanded_url = Column(String)
       
   213     sizes = Column(String)
       
   214     type_id = Column(Integer, ForeignKey("tweet_media_type.id"))
       
   215     type = relationship(MediaType, primaryjoin=type_id == MediaType.id)
       
   216     def __init__(self, **kwargs):
       
   217         for key, value in kwargs.items():
       
   218             if hasattr(self, key):
       
   219                 setattr(self, key, value)
   188 
   220 
   189     
   221     
   190 
   222 
   191 class EntityHashtag(Entity):
   223 class EntityHashtag(Entity):
   192     __tablename__ = "tweet_entity_hashtag"
   224     __tablename__ = "tweet_entity_hashtag"
   195     hashtag_id = Column(Integer, ForeignKey("tweet_hashtag.id"))
   227     hashtag_id = Column(Integer, ForeignKey("tweet_hashtag.id"))
   196     hashtag = relationship(Hashtag, primaryjoin=hashtag_id == Hashtag.id)
   228     hashtag = relationship(Hashtag, primaryjoin=hashtag_id == Hashtag.id)
   197     def __init__(self, **kwargs):
   229     def __init__(self, **kwargs):
   198         super(EntityHashtag, self).__init__(**kwargs)
   230         super(EntityHashtag, self).__init__(**kwargs)
   199         for key, value in kwargs.items():
   231         for key, value in kwargs.items():
   200             if hasattr(self,key):
   232             if hasattr(self, key):
   201                 setattr(self,key,value)
   233                 setattr(self, key, value)
   202 
   234 
   203     
   235     
   204 class EntityUrl(Entity):
   236 class EntityUrl(Entity):
   205     __tablename__ = "tweet_entity_url"
   237     __tablename__ = "tweet_entity_url"
   206     __mapper_args__ = {'polymorphic_identity': 'entity_url'}
   238     __mapper_args__ = {'polymorphic_identity': 'entity_url'}
   208     url_id = Column(Integer, ForeignKey("tweet_url.id"))
   240     url_id = Column(Integer, ForeignKey("tweet_url.id"))
   209     url = relationship(Url, primaryjoin=url_id == Url.id)
   241     url = relationship(Url, primaryjoin=url_id == Url.id)
   210     def __init__(self, **kwargs):
   242     def __init__(self, **kwargs):
   211         super(EntityUrl, self).__init__(**kwargs)
   243         super(EntityUrl, self).__init__(**kwargs)
   212         for key, value in kwargs.items():
   244         for key, value in kwargs.items():
   213             if hasattr(self,key):
   245             if hasattr(self, key):
   214                 setattr(self,key,value)
   246                 setattr(self, key, value)
   215 
   247 
   216 class EntityUser(Entity):
   248 class EntityUser(Entity):
   217     __tablename__ = "tweet_entity_user"
   249     __tablename__ = "tweet_entity_user"
   218     __mapper_args__ = {'polymorphic_identity': 'entity_user'}
   250     __mapper_args__ = {'polymorphic_identity': 'entity_user'}
   219     id = Column(Integer, ForeignKey('tweet_entity.id'), primary_key=True)
   251     id = Column(Integer, ForeignKey('tweet_entity.id'), primary_key=True)
   220     user_id = Column(Integer, ForeignKey('tweet_user.id'))
   252     user_id = Column(BigInteger, ForeignKey('tweet_user.id'))
   221     user = relationship(User, primaryjoin=user_id == User.id)
   253     user = relationship(User, primaryjoin=(user_id == User.id))
   222 
   254 
   223     def __init__(self, **kwargs):
   255     def __init__(self, **kwargs):
   224         super(EntityUser, self).__init__(**kwargs)
   256         super(EntityUser, self).__init__(**kwargs)
   225         for key, value in kwargs.items():
   257         for key, value in kwargs.items():
   226             if hasattr(self,key):
   258             if hasattr(self, key):
   227                 setattr(self,key,value)
   259                 setattr(self, key, value)
   228                 
   260                 
       
   261 class EntityMedia(Entity):
       
   262     __tablename__ = "tweet_entity_media"
       
   263     __mapper_args__ = {'polymorphic_identity': 'entity_media'}
       
   264     id = Column(Integer, ForeignKey('tweet_entity.id'), primary_key=True)
       
   265     media_id = Column(BigInteger, ForeignKey('tweet_media.id'))
       
   266     media = relationship(Media, primaryjoin=(media_id == Media.id))
       
   267 
       
   268     def __init__(self, **kwargs):
       
   269         super(EntityMedia, self).__init__(**kwargs)
       
   270         for key, value in kwargs.items():
       
   271             if hasattr(self, key):
       
   272                 setattr(self, key, value)
       
   273 
   229                 
   274                 
   230 def setup_database(*args, **kwargs):
   275 def setup_database(*args, **kwargs):
   231         
   276         
   232     create_all = True
   277     create_all = True
   233     if "create_all" in kwargs:
   278     if "create_all" in kwargs:
   261     u'metadata': {u'result_type': 'unicode'}
   306     u'metadata': {u'result_type': 'unicode'}
   262 }
   307 }
   263 
   308 
   264 tweet_tweet = {
   309 tweet_tweet = {
   265     'contributors': None,
   310     'contributors': None,
   266     'coordinates': None, 
   311     'coordinates': None,
   267     'created_at': 'date', 
   312     'created_at': 'date',
   268     'entities': "tweet_entity", 
   313     'entities': "tweet_entity",
   269     'favorited': "bool",
   314     'favorited': "bool",
   270     'geo': None,
   315     'geo': None,
   271     'id': "long",
   316     'id': "long",
   272     'id_str': "string",
   317     'id_str': "string",
   273     'in_reply_to_screen_name': "string", 
   318     'in_reply_to_screen_name': "string",
   274     'in_reply_to_status_id': "long", 
   319     'in_reply_to_status_id': "long",
   275     'in_reply_to_status_id_str': "string",
   320     'in_reply_to_status_id_str': "string",
   276     'in_reply_to_user_id': "int",
   321     'in_reply_to_user_id': "int",
   277     'in_reply_to_user_id_str': "string",
   322     'in_reply_to_user_id_str': "string",
   278     'place': "string",
   323     'place': "string",
   279     'retweet_count': "int",
   324     'retweet_count': "int",
   352     "text": "string"
   397     "text": "string"
   353 }
   398 }
   354 
   399 
   355 tweet_url = {
   400 tweet_url = {
   356     "url": "string",
   401     "url": "string",
   357     "expanded_url" : "string",    
   402     "expanded_url" : "string",
   358 }
   403 }
   359 
   404