Guest User

Untitled

a guest
Feb 19th, 2018
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.12 KB | None | 0 0
  1. Index: love_hate_api/__init__.py
  2. ===================================================================
  3. --- love_hate_api/__init__.py (revision 3695)
  4. +++ love_hate_api/__init__.py (working copy)
  5. @@ -22,7 +22,7 @@
  6.  
  7. def ban_item(self, user_id, item_id):
  8. self._save_item_feedback(user_id, item_id, BAN_VALUE)
  9. -
  10. +
  11. def unhate_item(self, user_id, item_id):
  12. return self._remove_user_preference(user_id, item_id)
  13.  
  14. @@ -51,19 +51,19 @@
  15. s.delete(ifeedback)
  16.  
  17. tags= s.execute("""
  18. - SELECT DISTINCT tag_id
  19. - FROM popego_ai.items_tags
  20. + SELECT DISTINCT tag_id
  21. + FROM popego_ai.items_tags
  22. WHERE item_id = %s
  23. ORDER BY tag_id """ % item_id).fetchall()
  24. - tags= map(lambda x:x[0], tags)
  25. + tags= map(lambda x:x[0], tags)
  26. if len(tags) == 0: return []
  27. -
  28. +
  29. QUERY= """
  30. UPDATE popego_ai.tags_feedback tf
  31. SET %(field)s= %(field)s - 1
  32. WHERE tf.tag_id IN %(tags)s
  33. """
  34. - params= {'user_id':user_id,
  35. + params= {'user_id':user_id,
  36. 'item_id':item_id,
  37. 'tags':list2str(tags)}
  38.  
  39. @@ -77,18 +77,18 @@
  40.  
  41. s.commit()
  42. return self.tagCloudService.get_tags_weight(user_id, tags)
  43. -
  44.  
  45.  
  46. +
  47. def _save_tag_feedback(self, user_id, item_id, value):
  48. s= self.session
  49. # tags es una lista de ids de los tags de item ordenados por id
  50. tags= s.execute("""
  51. - SELECT DISTINCT tag_id
  52. - FROM popego_ai.items_tags
  53. + SELECT DISTINCT tag_id
  54. + FROM popego_ai.items_tags
  55. WHERE item_id = %s
  56. ORDER BY tag_id """ % item_id).fetchall()
  57. - tags= map(lambda x:x[0], tags)
  58. + tags= map(lambda x:x[0], tags)
  59.  
  60. if len(tags) == 0: return
  61.  
  62. @@ -97,13 +97,13 @@
  63. params= {'tag_list':list2str(tags),
  64. 'user_id':user_id}
  65. feedback_info= s.execute("""
  66. - SELECT * FROM popego_ai.tags_feedback
  67. - WHERE user_id = %(user_id)s AND
  68. + SELECT * FROM popego_ai.tags_feedback
  69. + WHERE user_id = %(user_id)s AND
  70. tag_id IN %(tag_list)s
  71. - ORDER BY tag_id""" % params).fetchall()
  72. + ORDER BY tag_id""" % params).fetchall()
  73.  
  74. # me armo un iterador de las rows que ya estan en la db
  75. - feedback_iter= iter(feedback_info)
  76. + feedback_iter= iter(feedback_info)
  77. # actual_feedback es el elemento actual de feedback_info. Si es None quiere
  78. # decir que se termino el iterador (o que no habia ningun elemento)
  79. actual_feedback= None
  80. @@ -127,7 +127,7 @@
  81. # uso la informacion que esta en la row actual
  82. love_cnt= actual_feedback.love_cnt
  83. hate_cnt= actual_feedback.hate_cnt
  84. - if value == HATE_VALUE:
  85. + if value == HATE_VALUE:
  86. hate_cnt+= 1
  87. else:
  88. love_cnt+= 1
  89. @@ -136,15 +136,15 @@
  90. actual_feedback= feedback_iter.next()
  91. except StopIteration:
  92. actual_feedback= None
  93. -
  94.  
  95. +
  96. if len(insert_values) > 0:
  97. insert_query= """
  98. - INSERT INTO popego_ai.tags_feedback
  99. + INSERT INTO popego_ai.tags_feedback
  100. SELECT * FROM (VALUES %s) as foo(user_id, tag_id, love_cnt, hate_cnt)
  101. """ % ",".join(map(list2str, insert_values))
  102. - s.execute(insert_query)
  103. -
  104. + s.execute(insert_query)
  105. +
  106. if len(update_values) > 0:
  107. update_query= """
  108. UPDATE popego_ai.tags_feedback tf
  109. @@ -157,6 +157,34 @@
  110. s.commit()
  111. return self.tagCloudService.get_tags_weight(user_id, tags)
  112.  
  113. +
  114. + def _get_count_by_state_value(self, value, user_id):
  115. + query= """
  116. + SELECT COUNT(*)
  117. + FROM popego_ai.items_feedback
  118. + WHERE value=%d""" % value
  119. + if user_id:
  120. + query+= " AND user_id=%d" % user_id
  121. + return self.session.execute(query).fetchone()[0]
  122. +
  123. + def get_loved_items_count(self, user_id=None):
  124. + """Returns the number of loved items.
  125. +
  126. + If ``user_id`` is given, then count just those related to that user"""
  127. + return self._get_count_by_state_value(LOVE_VALUE, user_id)
  128. +
  129. + def get_hated_items_count(self, user_id=None):
  130. + """Returns the number of hate items.
  131. +
  132. + If ``user_id`` is given, then count just those related to that user"""
  133. + return self._get_count_by_state_value(HATE_VALUE, user_id)
  134. +
  135. + def get_banned_items_count(self, user_id=None):
  136. + """Returns the number of ban items.
  137. +
  138. + If ``user_id`` is given, then count just those related to that user"""
  139. + return self._get_count_by_state_value(BAN_VALUE, user_id)
  140. +
  141. def list2str(l):
  142. if len(l) == 1:
  143. return "(%s)" % l[0]
Add Comment
Please, Sign In to add comment