Created
August 25, 2008 16:18
-
-
Save k0001/7087 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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] |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment