/v2ex/babel/__init__.py

https://github.com/luoshu/v2ex · Python · 298 lines · 275 code · 22 blank · 1 comment · 18 complexity · 895ead8bd2cc99339bb0208763a424c4 MD5 · raw file

  1. SYSTEM_VERSION = '2.5.0-dev'
  2. import datetime
  3. import hashlib
  4. from google.appengine.ext import db
  5. from google.appengine.api import memcache
  6. from google.appengine.api import users
  7. class Member(db.Model):
  8. num = db.IntegerProperty(indexed=True)
  9. auth = db.StringProperty(required=False, indexed=True)
  10. deactivated = db.IntegerProperty(required=True, default=0)
  11. username = db.StringProperty(required=False, indexed=True)
  12. username_lower = db.StringProperty(required=False, indexed=True)
  13. password = db.StringProperty(required=False, indexed=True)
  14. email = db.StringProperty(required=False, indexed=True)
  15. email_verified = db.IntegerProperty(required=False, indexed=True, default=0)
  16. website = db.StringProperty(required=False, default='')
  17. psn = db.StringProperty(required=False)
  18. twitter = db.StringProperty(required=False, default='')
  19. twitter_oauth = db.IntegerProperty(required=False, default=0)
  20. twitter_oauth_key = db.StringProperty(required=False)
  21. twitter_oauth_secret = db.StringProperty(required=False)
  22. twitter_oauth_string = db.StringProperty(required=False)
  23. twitter_sync = db.IntegerProperty(required=False, default=0)
  24. twitter_id = db.IntegerProperty(required=False)
  25. twitter_name = db.StringProperty(required=False)
  26. twitter_screen_name = db.StringProperty(required=False)
  27. twitter_location = db.StringProperty(required=False)
  28. twitter_description = db.TextProperty(required=False)
  29. twitter_profile_image_url = db.StringProperty(required=False)
  30. twitter_url = db.StringProperty(required=False)
  31. twitter_statuses_count = db.IntegerProperty(required=False)
  32. twitter_followers_count = db.IntegerProperty(required=False)
  33. twitter_friends_count = db.IntegerProperty(required=False)
  34. twitter_favourites_count = db.IntegerProperty(required=False)
  35. location = db.StringProperty(required=False, default='')
  36. tagline = db.TextProperty(required=False, default='')
  37. bio = db.TextProperty(required=False, default='')
  38. avatar_large_url = db.StringProperty(required=False, indexed=False)
  39. avatar_normal_url = db.StringProperty(required=False, indexed=False)
  40. avatar_mini_url = db.StringProperty(required=False, indexed=False)
  41. created = db.DateTimeProperty(auto_now_add=True)
  42. last_modified = db.DateTimeProperty(auto_now=True)
  43. last_signin = db.DateTimeProperty()
  44. blocked = db.TextProperty(required=False, default='')
  45. l10n = db.StringProperty(default='en')
  46. favorited_nodes = db.IntegerProperty(required=True, default=0)
  47. favorited_topics = db.IntegerProperty(required=True, default=0)
  48. favorited_members = db.IntegerProperty(required=True, default=0)
  49. followers_count = db.IntegerProperty(required=True, default=0)
  50. level = db.IntegerProperty(required=True, default=1000)
  51. notifications = db.IntegerProperty(required=True, default=0)
  52. notification_position = db.IntegerProperty(required=True, default=0)
  53. private_token = db.StringProperty(required=False, indexed=True)
  54. ua = db.StringProperty(required=False, default='')
  55. newbie = db.IntegerProperty(required=True, default=0)
  56. noob = db.IntegerProperty(required=True, default=0)
  57. show_home_top = db.IntegerProperty(required=True, default=1)
  58. show_quick_post = db.IntegerProperty(required=True, default=0)
  59. def hasFavorited(self, something):
  60. if type(something).__name__ == 'Node':
  61. n = 'r/n' + str(something.num) + '/m' + str(self.num)
  62. r = memcache.get(n)
  63. if r:
  64. return r
  65. else:
  66. q = db.GqlQuery("SELECT * FROM NodeBookmark WHERE node =:1 AND member = :2", something, self)
  67. if q.count() > 0:
  68. memcache.set(n, True, 86400 * 14)
  69. return True
  70. else:
  71. memcache.set(n, False, 86400 * 14)
  72. return False
  73. else:
  74. if type(something).__name__ == 'Topic':
  75. n = 'r/t' + str(something.num) + '/m' + str(self.num)
  76. r = memcache.get(n)
  77. if r:
  78. return r
  79. else:
  80. q = db.GqlQuery("SELECT * FROM TopicBookmark WHERE topic =:1 AND member = :2", something, self)
  81. if q.count() > 0:
  82. memcache.set(n, True, 86400 * 14)
  83. return True
  84. else:
  85. memcache.set(n, False, 86400 * 14)
  86. return False
  87. else:
  88. if type(something).__name__ == 'Member':
  89. n = 'r/m' + str(something.num) + '/m' + str(self.num)
  90. r = memcache.get(n)
  91. if r:
  92. return r
  93. else:
  94. q = db.GqlQuery("SELECT * FROM MemberBookmark WHERE one =:1 AND member_num = :2", something, self.num)
  95. if q.count() > 0:
  96. memcache.set(n, True, 86400 * 14)
  97. return True
  98. else:
  99. memcache.set(n, False, 86400 * 14)
  100. return False
  101. else:
  102. return False
  103. class Counter(db.Model):
  104. name = db.StringProperty(required=False, indexed=True)
  105. value = db.IntegerProperty()
  106. created = db.DateTimeProperty(auto_now_add=True)
  107. last_increased = db.DateTimeProperty(auto_now=True)
  108. class Section(db.Model):
  109. num = db.IntegerProperty(indexed=True)
  110. name = db.StringProperty(required=False, indexed=True)
  111. title = db.StringProperty(required=False, indexed=True)
  112. title_alternative = db.StringProperty(required=False, indexed=True)
  113. header = db.TextProperty(required=False)
  114. footer = db.TextProperty(required=False)
  115. nodes = db.IntegerProperty(default=0)
  116. created = db.DateTimeProperty(auto_now_add=True)
  117. last_modified = db.DateTimeProperty(auto_now=True)
  118. class Node(db.Model):
  119. num = db.IntegerProperty(indexed=True)
  120. section_num = db.IntegerProperty(indexed=True)
  121. name = db.StringProperty(required=False, indexed=True)
  122. title = db.StringProperty(required=False, indexed=True)
  123. title_alternative = db.StringProperty(required=False, indexed=True)
  124. header = db.TextProperty(required=False)
  125. footer = db.TextProperty(required=False)
  126. sidebar = db.TextProperty(required=False)
  127. sidebar_ads = db.TextProperty(required=False)
  128. category = db.StringProperty(required=False, indexed=True)
  129. topics = db.IntegerProperty(default=0)
  130. avatar_large_url = db.StringProperty(required=False, indexed=False)
  131. avatar_normal_url = db.StringProperty(required=False, indexed=False)
  132. avatar_mini_url = db.StringProperty(required=False, indexed=False)
  133. created = db.DateTimeProperty(auto_now_add=True)
  134. last_modified = db.DateTimeProperty(auto_now=True)
  135. class Topic(db.Model):
  136. num = db.IntegerProperty(indexed=True)
  137. node = db.ReferenceProperty(Node)
  138. node_num = db.IntegerProperty(indexed=True)
  139. node_name = db.StringProperty(required=False, indexed=True)
  140. node_title = db.StringProperty(required=False, indexed=False)
  141. member = db.ReferenceProperty(Member)
  142. member_num = db.IntegerProperty(indexed=True)
  143. title = db.StringProperty(required=False, indexed=True)
  144. content = db.TextProperty(required=False)
  145. content_rendered = db.TextProperty(required=False)
  146. content_length = db.IntegerProperty(required=True, default=0)
  147. has_content = db.BooleanProperty(required=True, default=True)
  148. hits = db.IntegerProperty(default=0)
  149. stars = db.IntegerProperty(required=True, default=0)
  150. replies = db.IntegerProperty(default=0)
  151. created_by = db.StringProperty(required=False, indexed=True)
  152. last_reply_by = db.StringProperty(required=False, indexed=True)
  153. source = db.StringProperty(required=False, indexed=True)
  154. type = db.StringProperty(required=False, indexed=True)
  155. type_color = db.StringProperty(required=False)
  156. explicit = db.IntegerProperty(required=True, default=0)
  157. created = db.DateTimeProperty(auto_now_add=True)
  158. last_modified = db.DateTimeProperty(auto_now=True)
  159. last_touched = db.DateTimeProperty()
  160. class Reply(db.Model):
  161. num = db.IntegerProperty(indexed=True)
  162. topic = db.ReferenceProperty(Topic)
  163. topic_num = db.IntegerProperty(indexed=True)
  164. member = db.ReferenceProperty(Member)
  165. member_num = db.IntegerProperty(indexed=True)
  166. content = db.TextProperty(required=False)
  167. source = db.StringProperty(required=False, indexed=True)
  168. created_by = db.StringProperty(required=False, indexed=True)
  169. created = db.DateTimeProperty(auto_now_add=True)
  170. last_modified = db.DateTimeProperty(auto_now=True)
  171. highlighted = db.IntegerProperty(required=True, default=0)
  172. class Avatar(db.Model):
  173. num = db.IntegerProperty(indexed=True)
  174. name = db.StringProperty(required=False, indexed=True)
  175. content = db.BlobProperty()
  176. class Note(db.Model):
  177. num = db.IntegerProperty(indexed=True)
  178. member = db.ReferenceProperty(Member)
  179. member_num = db.IntegerProperty(indexed=True)
  180. title = db.StringProperty(required=False, indexed=True)
  181. content = db.TextProperty(required=False)
  182. body = db.TextProperty(required=False)
  183. length = db.IntegerProperty(indexed=False, default=0)
  184. edits = db.IntegerProperty(indexed=False, default=1)
  185. created = db.DateTimeProperty(auto_now_add=True)
  186. last_modified = db.DateTimeProperty(auto_now=True)
  187. class PasswordResetToken(db.Model):
  188. token = db.StringProperty(required=False, indexed=True)
  189. email = db.StringProperty(required=False, indexed=True)
  190. member = db.ReferenceProperty(Member)
  191. valid = db.IntegerProperty(required=False, indexed=True, default=1)
  192. timestamp = db.IntegerProperty(required=False, indexed=True, default=0)
  193. class Place(db.Model):
  194. num = db.IntegerProperty(required=False, indexed=True)
  195. ip = db.StringProperty(required=False, indexed=True)
  196. name = db.StringProperty(required=False, indexed=False)
  197. visitors = db.IntegerProperty(required=False, default=0, indexed=True)
  198. longitude = db.FloatProperty(required=False, default=0.0, indexed=True)
  199. latitude = db.FloatProperty(required=False, default=0.0, indexed=True)
  200. created = db.DateTimeProperty(auto_now_add=True)
  201. last_modified = db.DateTimeProperty(auto_now=True)
  202. class PlaceMessage(db.Model):
  203. num = db.IntegerProperty(indexed=True)
  204. place = db.ReferenceProperty(Place)
  205. place_num = db.IntegerProperty(indexed=True)
  206. member = db.ReferenceProperty(Member)
  207. content = db.TextProperty(required=False)
  208. in_reply_to = db.SelfReferenceProperty()
  209. source = db.StringProperty(required=False, indexed=True)
  210. created = db.DateTimeProperty(auto_now_add=True)
  211. class Checkin(db.Model):
  212. place = db.ReferenceProperty(Place)
  213. member = db.ReferenceProperty(Member)
  214. last_checked_in = db.DateTimeProperty(auto_now=True)
  215. class Site(db.Model):
  216. num = db.IntegerProperty(required=False, indexed=True)
  217. title = db.StringProperty(required=False, indexed=False)
  218. slogan = db.StringProperty(required=False, indexed=False)
  219. description = db.TextProperty(required=False)
  220. domain = db.StringProperty(required=False, indexed=False)
  221. analytics = db.StringProperty(required=False, indexed=False)
  222. home_categories = db.TextProperty(required=False, indexed=False)
  223. meta = db.TextProperty(required=False, default='')
  224. home_top = db.TextProperty(required=False, default='')
  225. theme = db.StringProperty(required=False, default='default')
  226. l10n = db.StringProperty(default='en')
  227. use_topic_types = db.BooleanProperty(default=False)
  228. topic_types = db.TextProperty(default='')
  229. topic_view_level = db.IntegerProperty(required=True, default=-1)
  230. topic_create_level = db.IntegerProperty(required=True, default=1000)
  231. topic_reply_level = db.IntegerProperty(required=True, default=1000)
  232. class Minisite(db.Model):
  233. num = db.IntegerProperty(required=False, indexed=True)
  234. name = db.StringProperty(required=False, indexed=True)
  235. title = db.StringProperty(required=False, indexed=False)
  236. description = db.TextProperty(default='')
  237. pages = db.IntegerProperty(default=0)
  238. created = db.DateTimeProperty(auto_now_add=True)
  239. last_modified = db.DateTimeProperty(auto_now=True)
  240. class Page(db.Model):
  241. num = db.IntegerProperty(required=False, indexed=True)
  242. name = db.StringProperty(required=False, indexed=True)
  243. title = db.StringProperty(required=False, indexed=False)
  244. minisite = db.ReferenceProperty(Minisite)
  245. content = db.TextProperty(default='')
  246. content_rendered = db.TextProperty(default='')
  247. content_type = db.StringProperty(default='text/html')
  248. weight = db.IntegerProperty(required=True, default=0)
  249. mode = db.IntegerProperty(required=True, default=0)
  250. hits = db.IntegerProperty(required=True, default=0)
  251. created = db.DateTimeProperty(auto_now_add=True)
  252. last_modified = db.DateTimeProperty(auto_now=True)
  253. class NodeBookmark(db.Model):
  254. node = db.ReferenceProperty(Node, indexed=True)
  255. member = db.ReferenceProperty(Member, indexed=True)
  256. created = db.DateTimeProperty(auto_now_add=True)
  257. class TopicBookmark(db.Model):
  258. topic = db.ReferenceProperty(Topic, indexed=True)
  259. member = db.ReferenceProperty(Member, indexed=True)
  260. created = db.DateTimeProperty(auto_now_add=True)
  261. class MemberBookmark(db.Model):
  262. one = db.ReferenceProperty(Member, indexed=True)
  263. member_num = db.IntegerProperty(indexed=True)
  264. created = db.DateTimeProperty(auto_now_add=True)
  265. # Notification type: mention_topic, mention_reply, reply
  266. class Notification(db.Model):
  267. num = db.IntegerProperty(required=False, indexed=True)
  268. member = db.ReferenceProperty(Member, indexed=True)
  269. for_member_num = db.IntegerProperty(required=False, indexed=True)
  270. type = db.StringProperty(required=False, indexed=True)
  271. payload = db.TextProperty(required=False, default='')
  272. label1 = db.StringProperty(required=False, indexed=False)
  273. link1 = db.StringProperty(required=False, indexed=False)
  274. label2 = db.StringProperty(required=False, indexed=False)
  275. link2 = db.StringProperty(required=False, indexed=False)
  276. created = db.DateTimeProperty(auto_now_add=True)