Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Index: love_hate_api/__init__.py
- ===================================================================
- --- love_hate_api/__init__.py (revision 3695)
- +++ love_hate_api/__init__.py (working copy)
- @@ -22,7 +22,7 @@
- def ban_item(self, user_id, item_id):
- self._save_item_feedback(user_id, item_id, BAN_VALUE)
- -
- +
- def unhate_item(self, user_id, item_id):
- return self._remove_user_preference(user_id, item_id)
- @@ -51,19 +51,19 @@
- s.delete(ifeedback)
- tags= s.execute("""
- - SELECT DISTINCT tag_id
- - FROM popego_ai.items_tags
- + SELECT DISTINCT tag_id
- + FROM popego_ai.items_tags
- WHERE item_id = %s
- ORDER BY tag_id """ % item_id).fetchall()
- - tags= map(lambda x:x[0], tags)
- + tags= map(lambda x:x[0], tags)
- if len(tags) == 0: return []
- -
- +
- QUERY= """
- UPDATE popego_ai.tags_feedback tf
- SET %(field)s= %(field)s - 1
- WHERE tf.tag_id IN %(tags)s
- """
- - params= {'user_id':user_id,
- + params= {'user_id':user_id,
- 'item_id':item_id,
- 'tags':list2str(tags)}
- @@ -77,18 +77,18 @@
- s.commit()
- return self.tagCloudService.get_tags_weight(user_id, tags)
- -
- +
- def _save_tag_feedback(self, user_id, item_id, value):
- s= self.session
- # tags es una lista de ids de los tags de item ordenados por id
- tags= s.execute("""
- - SELECT DISTINCT tag_id
- - FROM popego_ai.items_tags
- + SELECT DISTINCT tag_id
- + FROM popego_ai.items_tags
- WHERE item_id = %s
- ORDER BY tag_id """ % item_id).fetchall()
- - tags= map(lambda x:x[0], tags)
- + tags= map(lambda x:x[0], tags)
- if len(tags) == 0: return
- @@ -97,13 +97,13 @@
- params= {'tag_list':list2str(tags),
- 'user_id':user_id}
- feedback_info= s.execute("""
- - SELECT * FROM popego_ai.tags_feedback
- - WHERE user_id = %(user_id)s AND
- + SELECT * FROM popego_ai.tags_feedback
- + WHERE user_id = %(user_id)s AND
- tag_id IN %(tag_list)s
- - ORDER BY tag_id""" % params).fetchall()
- + ORDER BY tag_id""" % params).fetchall()
- # me armo un iterador de las rows que ya estan en la db
- - feedback_iter= iter(feedback_info)
- + feedback_iter= iter(feedback_info)
- # actual_feedback es el elemento actual de feedback_info. Si es None quiere
- # decir que se termino el iterador (o que no habia ningun elemento)
- actual_feedback= None
- @@ -127,7 +127,7 @@
- # uso la informacion que esta en la row actual
- love_cnt= actual_feedback.love_cnt
- hate_cnt= actual_feedback.hate_cnt
- - if value == HATE_VALUE:
- + if value == HATE_VALUE:
- hate_cnt+= 1
- else:
- love_cnt+= 1
- @@ -136,15 +136,15 @@
- actual_feedback= feedback_iter.next()
- except StopIteration:
- actual_feedback= None
- -
- +
- if len(insert_values) > 0:
- insert_query= """
- - INSERT INTO popego_ai.tags_feedback
- + INSERT INTO popego_ai.tags_feedback
- SELECT * FROM (VALUES %s) as foo(user_id, tag_id, love_cnt, hate_cnt)
- """ % ",".join(map(list2str, insert_values))
- - s.execute(insert_query)
- -
- + s.execute(insert_query)
- +
- if len(update_values) > 0:
- update_query= """
- UPDATE popego_ai.tags_feedback tf
- @@ -157,6 +157,34 @@
- s.commit()
- return self.tagCloudService.get_tags_weight(user_id, tags)
- +
- + def _get_count_by_state_value(self, value, user_id):
- + query= """
- + SELECT COUNT(*)
- + FROM popego_ai.items_feedback
- + WHERE value=%d""" % value
- + if user_id:
- + query+= " AND user_id=%d" % user_id
- + return self.session.execute(query).fetchone()[0]
- +
- + def get_loved_items_count(self, user_id=None):
- + """Returns the number of loved items.
- +
- + If ``user_id`` is given, then count just those related to that user"""
- + return self._get_count_by_state_value(LOVE_VALUE, user_id)
- +
- + def get_hated_items_count(self, user_id=None):
- + """Returns the number of hate items.
- +
- + If ``user_id`` is given, then count just those related to that user"""
- + return self._get_count_by_state_value(HATE_VALUE, user_id)
- +
- + def get_banned_items_count(self, user_id=None):
- + """Returns the number of ban items.
- +
- + If ``user_id`` is given, then count just those related to that user"""
- + return self._get_count_by_state_value(BAN_VALUE, user_id)
- +
- def list2str(l):
- if len(l) == 1:
- return "(%s)" % l[0]
Add Comment
Please, Sign In to add comment