PageRenderTime 42ms CodeModel.GetById 13ms RepoModel.GetById 0ms app.codeStats 0ms

/model.py

https://gitlab.com/manoj-makkuboy/vikuit
Python | 396 lines | 286 code | 72 blank | 38 comment | 0 complexity | 3dc9da058081cdf5423b02a1b5c159d8 MD5 | raw file
  1. #!/usr/bin/python
  2. # -*- coding: utf-8 -*-
  3. ##
  4. # (C) Copyright 2011 Jose Blanco <jose.blanco[a]vikuit.com>
  5. # (C) Copyright 2011 Jose Carrasco <jose.carrasco[a]vikuit.com>
  6. #
  7. # This file is part of "vikuit".
  8. #
  9. # "vikuit" is free software: you can redistribute it and/or modify
  10. # it under the terms of the GNU Affero General Public License as published by
  11. # the Free Software Foundation, either version 3 of the License, or
  12. # (at your option) any later version.
  13. #
  14. # "vikuit" is distributed in the hope that it will be useful,
  15. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  16. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  17. # GNU Affero General Public License for more details.
  18. #
  19. # You should have received a copy of the GNU Affero General Public License
  20. # along with "vikuit". If not, see <http://www.gnu.org/licenses/>.
  21. ##
  22. from google.appengine.ext import db
  23. from google.appengine.api import users
  24. from google.appengine.ext import search
  25. class UserData(search.SearchableModel):
  26. nickname = db.StringProperty(required=True)
  27. personal_message = db.StringProperty()
  28. email = db.StringProperty(required=True)
  29. avatar = db.BlobProperty()
  30. thumbnail = db.BlobProperty()
  31. image_version = db.IntegerProperty()
  32. list_urls = db.StringListProperty()
  33. im_addresses = db.StringListProperty()
  34. about_user = db.TextProperty()
  35. password = db.StringProperty(required=False)#mod to accept Google account
  36. registrationType = db.IntegerProperty()#0 -local, 1 - google
  37. rol = db.StringProperty()
  38. google_adsense = db.StringProperty()
  39. google_adsense_channel = db.StringProperty()
  40. token = db.StringProperty()
  41. checked = db.BooleanProperty()
  42. # articles
  43. articles = db.IntegerProperty(required=True)
  44. draft_articles = db.IntegerProperty(required=True)
  45. # messages
  46. messages = db.IntegerProperty(required=True)
  47. draft_messages = db.IntegerProperty(required=True)
  48. unread_messages = db.IntegerProperty()
  49. sent_messages = db.IntegerProperty()
  50. # comments
  51. comments = db.IntegerProperty(required=True)
  52. # rating
  53. rating_count = db.IntegerProperty(required=True)
  54. rating_total = db.IntegerProperty(required=True)
  55. rating_average = db.IntegerProperty(required=True)
  56. # forums
  57. threads = db.IntegerProperty(required=True)
  58. responses = db.IntegerProperty(required=True)
  59. # communities
  60. communities = db.IntegerProperty(required=True)
  61. # favourites
  62. favourites = db.IntegerProperty(required=True)
  63. # others
  64. real_name = db.StringProperty()
  65. country = db.StringProperty()
  66. city = db.StringProperty()
  67. public = db.BooleanProperty(required=True)
  68. contacts = db.IntegerProperty()
  69. last_update = db.DateTimeProperty(auto_now=True)
  70. creation_date = db.DateTimeProperty(auto_now_add=True)
  71. deletion_date = db.DateTimeProperty()
  72. last_login = db.DateTimeProperty()
  73. banned_date = db.DateTimeProperty()
  74. not_full_rss = db.BooleanProperty()
  75. class ArticleHtml(db.Model):
  76. content = db.TextProperty(required=True)
  77. class ArticleTTS(db.Model):
  78. tts_stream = db.TextProperty(required=True)
  79. tts_urls = db.StringListProperty()
  80. class Article(search.SearchableModel):
  81. author = db.ReferenceProperty(UserData,required=True)
  82. author_nickname = db.StringProperty()
  83. title = db.StringProperty(required=True)
  84. description = db.StringProperty(required=True)
  85. content = db.TextProperty(required=True)
  86. content_html = db.ReferenceProperty(ArticleHtml)
  87. content_tts = db.ReferenceProperty(ArticleTTS)
  88. lic = db.StringProperty(required=True)
  89. views = db.IntegerProperty(required=True)
  90. rating_count = db.IntegerProperty(required=True)
  91. rating_total = db.IntegerProperty(required=True)
  92. rating_average = db.IntegerProperty()
  93. url_path = db.StringProperty(required=True)
  94. responses = db.IntegerProperty(required=True)
  95. tags = db.StringListProperty()
  96. favourites = db.IntegerProperty(required=True)
  97. draft = db.BooleanProperty(required=True)
  98. article_type = db.StringProperty(required=True)
  99. subscribers = db.StringListProperty()
  100. last_update = db.DateTimeProperty(auto_now=True)
  101. creation_date = db.DateTimeProperty(auto_now_add=True)
  102. deletion_date = db.DateTimeProperty()
  103. deletion_message = db.StringProperty()
  104. deletion_user = db.ReferenceProperty(UserData,collection_name='du')
  105. class Mblog(search.SearchableModel):
  106. author = db.ReferenceProperty(UserData,required=True)
  107. author_nickname = db.StringProperty()
  108. content = db.TextProperty(required=True)
  109. responses = db.IntegerProperty(required=True)
  110. creation_date = db.DateTimeProperty(auto_now_add=True)
  111. deletion_date = db.DateTimeProperty()
  112. deletion_user_nick = db.StringProperty()
  113. class Module(db.Model):
  114. name = db.TextProperty(required=True)
  115. active = db.BooleanProperty()
  116. class Comment(db.Model):
  117. content = db.TextProperty(required=True)
  118. article = db.ReferenceProperty(Article,required=True)
  119. author = db.ReferenceProperty(UserData,required=True)
  120. author_nickname = db.StringProperty()
  121. response_number = db.IntegerProperty()
  122. last_update = db.DateTimeProperty(auto_now=True)
  123. creation_date = db.DateTimeProperty(auto_now_add=True)
  124. deletion_date = db.DateTimeProperty()
  125. editions = db.IntegerProperty()
  126. last_edition = db.DateTimeProperty()
  127. class Vote(db.Model):
  128. user = db.ReferenceProperty(UserData,required=True)
  129. article = db.ReferenceProperty(Article,required=True)
  130. rating = db.IntegerProperty(required=True)
  131. class Tag(db.Model):
  132. tag = db.StringProperty(required=True)
  133. count = db.IntegerProperty(required=True)
  134. class Category(db.Model):
  135. parent_category = db.SelfReferenceProperty()
  136. title = db.StringProperty(required=True)
  137. url_path = db.StringProperty()
  138. description = db.StringProperty(required=True)
  139. communities = db.IntegerProperty(required=True)
  140. articles = db.IntegerProperty(required=True)
  141. subcategories = None
  142. class Community(search.SearchableModel):
  143. owner = db.ReferenceProperty(UserData,required=True)
  144. owner_nickname = db.StringProperty()
  145. title = db.StringProperty(required=True)
  146. description = db.StringProperty(required=True, multiline=True)
  147. url_path = db.StringProperty(required=True)
  148. old_url_path = db.StringProperty()
  149. subscribers = db.StringListProperty()
  150. members = db.IntegerProperty(required=True)
  151. articles = db.IntegerProperty(required=True)
  152. threads = db.IntegerProperty(required=True)
  153. responses = db.IntegerProperty(required=True)
  154. last_update = db.DateTimeProperty(auto_now=True)
  155. creation_date = db.DateTimeProperty(auto_now_add=True)
  156. deletion_date = db.DateTimeProperty()
  157. avatar = db.BlobProperty()
  158. thumbnail = db.BlobProperty()
  159. image_version = db.IntegerProperty()
  160. all_users = db.BooleanProperty()
  161. category = db.ReferenceProperty(Category, collection_name='communities_set')
  162. activity = db.IntegerProperty()
  163. class CommunityUser(db.Model):
  164. user = db.ReferenceProperty(UserData,required=True)
  165. community = db.ReferenceProperty(Community,required=True)
  166. creation_date = db.DateTimeProperty(auto_now_add=True)
  167. # denormalizationzation
  168. user_nickname = db.StringProperty()
  169. community_title = db.StringProperty()
  170. community_url_path = db.StringProperty()
  171. class CommunityArticle(db.Model):
  172. article = db.ReferenceProperty(Article,required=True)
  173. community = db.ReferenceProperty(Community,required=True)
  174. creation_date = db.DateTimeProperty(auto_now_add=True)
  175. # denormalization
  176. article_author_nickname = db.StringProperty()
  177. article_title = db.StringProperty()
  178. article_url_path = db.StringProperty()
  179. community_title = db.StringProperty()
  180. community_url_path = db.StringProperty()
  181. class Thread(search.SearchableModel):
  182. community = db.ReferenceProperty(Community,required=True)
  183. community_title = db.StringProperty()
  184. community_url_path = db.StringProperty()
  185. author = db.ReferenceProperty(UserData,required=True)
  186. author_nickname = db.StringProperty()
  187. title = db.StringProperty(required=True)
  188. url_path = db.StringProperty()
  189. content = db.TextProperty(required=True)
  190. subscribers = db.StringListProperty()
  191. last_response_date = db.DateTimeProperty()
  192. response_number = db.IntegerProperty()
  193. editions = db.IntegerProperty()
  194. last_edition = db.DateTimeProperty()
  195. # responses
  196. parent_thread = db.SelfReferenceProperty()
  197. responses = db.IntegerProperty(required=True)
  198. latest_response = db.DateTimeProperty()
  199. last_update = db.DateTimeProperty(auto_now=True)
  200. creation_date = db.DateTimeProperty(auto_now_add=True)
  201. deletion_date = db.DateTimeProperty()
  202. deletion_message = db.StringProperty()
  203. views = db.IntegerProperty()
  204. class Favourite(db.Model):
  205. article = db.ReferenceProperty(Article,required=True)
  206. user = db.ReferenceProperty(UserData,required=True)
  207. creation_date = db.DateTimeProperty(auto_now_add=True)
  208. # denormalize
  209. article_author_nickname = db.StringProperty()
  210. article_title = db.StringProperty()
  211. article_url_path = db.StringProperty()
  212. user_nickname = db.StringProperty()
  213. class Contact(db.Model):
  214. user_from = db.ReferenceProperty(UserData,required=True,collection_name='cf')
  215. user_to = db.ReferenceProperty(UserData,required=True,collection_name='ct')
  216. creation_date = db.DateTimeProperty(auto_now_add=True)
  217. # denormalize
  218. user_from_nickname = db.StringProperty()
  219. user_to_nickname = db.StringProperty()
  220. class Application(db.Model):
  221. name = db.StringProperty()
  222. logo = db.BlobProperty()
  223. theme = db.StringProperty()
  224. subject = db.StringProperty()
  225. locale = db.StringProperty()
  226. users = db.IntegerProperty()
  227. communities = db.IntegerProperty()
  228. articles = db.IntegerProperty()
  229. threads = db.IntegerProperty()
  230. url = db.StringProperty()
  231. mail_contact = db.StringProperty()
  232. mail_subject_prefix = db.StringProperty()
  233. mail_sender = db.StringProperty()
  234. mail_footer = db.StringProperty()
  235. recaptcha_public_key = db.StringProperty()
  236. recaptcha_private_key = db.StringProperty()
  237. google_adsense = db.StringProperty()
  238. google_adsense_channel = db.StringProperty()
  239. google_analytics = db.StringProperty()
  240. max_results = db.IntegerProperty()
  241. max_results_sublist = db.IntegerProperty()
  242. session_seed = db.StringProperty()
  243. version = db.StringProperty()
  244. class Message(db.Model):
  245. user_from = db.ReferenceProperty(UserData,required=True,collection_name='mf')
  246. user_to = db.ReferenceProperty(UserData,required=True,collection_name='mt')
  247. creation_date = db.DateTimeProperty(auto_now_add=True)
  248. title = db.StringProperty(required=True)
  249. url_path = db.StringProperty(required=True)
  250. content = db.TextProperty(required=True)
  251. read = db.BooleanProperty(required=True)
  252. from_deletion_date = db.DateTimeProperty()
  253. to_deletion_date = db.DateTimeProperty()
  254. user_from_nickname = db.StringProperty()
  255. user_to_nickname = db.StringProperty()
  256. class RelatedCommunity(db.Model):
  257. community_from = db.ReferenceProperty(Community,required=True,collection_name='gf')
  258. community_to = db.ReferenceProperty(Community,required=True,collection_name='gt')
  259. creation_date = db.DateTimeProperty(auto_now_add=True)
  260. # denormalization
  261. community_from_title = db.StringProperty(required=True)
  262. community_from_url_path = db.StringProperty(required=True)
  263. community_to_title = db.StringProperty(required=True)
  264. community_to_url_path = db.StringProperty(required=True)
  265. class UserSubscription(db.Model):
  266. user = db.ReferenceProperty(UserData,required=True)
  267. user_email = db.StringProperty(required=True)
  268. user_nickname = db.StringProperty(required=True)
  269. subscription_type = db.StringProperty(required=True)
  270. subscription_id = db.IntegerProperty(required=True)
  271. creation_date = db.DateTimeProperty()
  272. class Follower(db.Model):
  273. object_type = db.StringProperty(required=True)
  274. object_id = db.IntegerProperty(required=True)
  275. followers = db.StringListProperty()
  276. class Event(db.Model):
  277. event_type = db.StringProperty(required=True)
  278. followers = db.StringListProperty()
  279. user = db.ReferenceProperty(UserData,required=True)
  280. user_nickname = db.StringProperty(required=True)
  281. user_to = db.ReferenceProperty(UserData,collection_name='events_user_to')
  282. user_to_nickname = db.StringProperty()
  283. community = db.ReferenceProperty(Community)
  284. community_title = db.StringProperty()
  285. community_url_path = db.StringProperty()
  286. article = db.ReferenceProperty(Article)
  287. article_author_nickname = db.StringProperty()
  288. article_title = db.StringProperty()
  289. article_url_path = db.StringProperty()
  290. thread = db.ReferenceProperty(Thread)
  291. thread_title = db.StringProperty()
  292. thread_url_path = db.StringProperty()
  293. response_number = db.IntegerProperty()
  294. creation_date = db.DateTimeProperty(auto_now_add=True)
  295. class MailQueue(db.Model):
  296. subject = db.StringProperty(required=True)
  297. body = db.TextProperty(required=True)
  298. to = db.StringListProperty()
  299. bcc = db.StringListProperty()
  300. class Recommendation(db.Model):
  301. article_from = db.ReferenceProperty(Article,collection_name='recommendations_from')
  302. article_to = db.ReferenceProperty(Article,collection_name='recommendations_to')
  303. value = db.FloatProperty()
  304. article_from_title = db.StringProperty(required=True)
  305. article_to_title = db.StringProperty(required=True)
  306. article_from_author_nickname = db.StringProperty(required=True)
  307. article_to_author_nickname = db.StringProperty(required=True)
  308. article_from_url_path = db.StringProperty(required=True)
  309. article_to_url_path = db.StringProperty(required=True)
  310. class Task(db.Model):
  311. task_type = db.StringProperty(required=True)
  312. priority = db.IntegerProperty(required=True)
  313. data = db.StringProperty(required=True, multiline=True)
  314. creation_date = db.DateTimeProperty(auto_now_add=True)
  315. class Image(db.Model):
  316. # No restrictions by community or user
  317. # All files are public, but only owner or admin can browse them
  318. # Due image size, those must be deleted.
  319. author = db.ReferenceProperty(UserData,required=True)
  320. author_nickname = db.StringProperty(required=True)
  321. thumbnail = db.BlobProperty(required=True)
  322. url_path = db.StringProperty(required=True)#Unique
  323. image_version = db.IntegerProperty()
  324. creation_date = db.DateTimeProperty(auto_now_add=True)