Subversion Repositories SmartDukaan

Rev

Rev 20090 | Blame | Compare with Previous | Last modification | View Log | RSS feed

from walrus import *
from dtr.utils.utils import get_mongo_connection, REVERSE_SOURCE_MAP, CATEGORY_MAP, SUB_CATEGORY_MAP
import random

xstr = lambda s: s or ""
database = Database()
ac = database.autocomplete()

class Suggestion():
    def __init__(self, category_id, subCategoryId, suggestion, category_name):
        self.category_id = category_id
        self.subCategoryId = subCategoryId
        self.suggestion = suggestion
        self.category_name = category_name


def filterSuggestions(categorySuggestion):
    returnObj = []
    for cat in ('Mobiles','Tablets'):
        v = categorySuggestion.get(CATEGORY_MAP.get(cat))
        if v is not None:
            returnObj.append(v[0].__dict__)
            select_range = 5 if len(v[1:]) > 5 else len(v[1:]) 
            random_list = random.sample(set(v[1:]), select_range)
            for random_suggestion in random_list:
                returnObj.append(random_suggestion.__dict__)
            categorySuggestion.pop(CATEGORY_MAP.get(cat))
    for v in categorySuggestion.itervalues():
        returnObj.append(v[0].__dict__)
        select_range = 3 if len(v[1:]) > 3 else len(v[1:]) 
        random_list = random.sample(set(v[1:]), select_range)
        for random_suggestion in random_list:
            returnObj.append(random_suggestion.__dict__)
    return returnObj

def getSuggestions(search_text):
    categorySuggestion = {}
    results = list(ac.search(search_text))
    returnObj = []
    if len(results) > 10:
        """Lets group data"""
        for i in results:
            if i.get('subCategoryId'):
                if not categorySuggestion.has_key(i.get('subCategoryId')):
                    suggestion_obj_primary = Suggestion(i.get('category_id'),i.get('subCategoryId'),search_text,SUB_CATEGORY_MAP.get(i.get('subCategoryId')))
                    suggestion_obj = Suggestion(i.get('category_id'),i.get('subCategoryId'), i.get('title'),None)
                    categorySuggestion[i.get('subCategoryId')] = [suggestion_obj_primary,suggestion_obj]
                else:
                    suggestion_obj = Suggestion(i.get('category_id'),i.get('subCategoryId'),i.get('title'), None)
                    categorySuggestion.get(i.get('subCategoryId')).append(suggestion_obj)
            else:
                if not categorySuggestion.has_key(i.get('category_id')):
                    suggestion_obj_primary = Suggestion(i.get('category_id'),i.get('subCategoryId'),search_text, CATEGORY_MAP.get(i.get('category_id')))
                    suggestion_obj = Suggestion(i.get('category_id'),i.get('subCategoryId'),i.get('title'), None)
                    categorySuggestion[i.get('category_id')] = [suggestion_obj_primary, suggestion_obj]
                else:
                    suggestion_obj = Suggestion(i.get('category_id'),i.get('subCategoryId'),i.get('title'), None)
                    categorySuggestion.get(i.get('category_id')).append(suggestion_obj)
        
        returnObj = filterSuggestions(categorySuggestion)    
        
    else:
        for i in results:
            category_name = None
            if i.get('category_id') == 6:
                category_name = SUB_CATEGORY_MAP.get(i.get('subCategoryId'))
            elif i.get('category_id') in (3,5):
                category_name = CATEGORY_MAP.get(i.get('category_id'))
            else:
                pass
            returnObj.append({'suggestion':i.get('title'),'category_id':i.get('category_id'),'subCategoryId':i.get('subCategoryId'),'category_name':category_name})
    
    return returnObj


def main():
    print datetime.datetime.now()
    print getSuggestions("iph")
    print datetime.datetime.now()

if __name__ == "__main__":
    main()