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) |