Subversion Repositories SmartDukaan

Rev

Rev 3235 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3235 Rev 3313
Line 1... Line 1...
1
'''
1
'''
2
Created on 31-Aug-2011
2
Created on 31-Aug-2011
3
 
3
 
4
@author: Varun Gupta
4
@author: Varun Gupta
5
'''
5
'''
6
    
-
 
7
import tornado.httpserver
6
import tornado.httpserver
8
import tornado.ioloop
7
import tornado.ioloop
9
import tornado.web
8
import tornado.web
10
import json, os, ConfigParser, sys
9
import json, os, ConfigParser, sys
11
from PyLucene.Retriever import Retriever
10
from PyLucene.Retriever import Retriever
12
from Utils import getItemsWithTopScore, isPriceSame
11
from Utils import getItemsWithTopScore, isPriceSame, getProductClusters, getFilteredClustersWithTopScores, \
13
 
-
 
-
 
12
    getDisplayInfo
14
 
13
 
15
#shop2020/clients/CatalogClient.py
-
 
16
cmd_folder = os.path.dirname(os.path.abspath(os.environ["HOME"] + "/code/trunk/PyProj/src/shop2020/"))
14
cmd_folder = os.path.dirname(os.path.abspath(os.environ["HOME"] + "/code/trunk/PyProj/src/shop2020/"))
17
if cmd_folder not in sys.path:
15
if cmd_folder not in sys.path:
18
    sys.path.insert(0, cmd_folder)
16
    sys.path.insert(0, cmd_folder)
19
 
17
 
20
from shop2020.clients.CatalogClient import CatalogClient
18
from shop2020.clients.CatalogClient import CatalogClient
Line 55... Line 53...
55
        
53
        
56
        for item in items:
54
        for item in items:
57
            if item.category in (10002, 10003, 10004, 10005, 10010):  products[item.catalogItemId] = item
55
            if item.category in (10002, 10003, 10004, 10005, 10010):  products[item.catalogItemId] = item
58
 
56
 
59
        comparative_prices = []
57
        comparative_prices = []
60
        count_all, count_success, count_conflict, count_notfound = 0, 0, 0, 0
-
 
61
        
58
 
62
        for item in sorted(products.itervalues(), key = lambda item: item.brand):
59
        for item in sorted(products.itervalues(), key = lambda item: item.brand):
63
            count_all += 1
-
 
64
            try:
60
            try:
65
                model_name = item.modelName.strip() if len(item.modelName.strip()) > 0 else None
61
                model_name = item.modelName.strip() if len(item.modelName.strip()) > 0 else None
66
                model_number = item.modelNumber.strip() if len(item.modelNumber.strip()) > 0 else None
62
                model_number = item.modelNumber.strip() if len(item.modelNumber.strip()) > 0 else None
67
                
63
                
68
                search_results = retriever.retrieve(model_number = model_number, model_name = model_name, brand = item.brand)
64
                search_results = retriever.retrieve(model_number = model_number, model_name = model_name, brand = item.brand)
69
                phones_with_top_score = getItemsWithTopScore(search_results)
-
 
70
                
65
                
71
                if len(phones_with_top_score) > 0:
-
 
72
                    if isPriceSame(phones_with_top_score):
-
 
73
                        flipkart_price = phones_with_top_score[0]['price']
-
 
74
                        count_success += 1
-
 
75
                        data = ''
-
 
76
                        url = "http://www.flipkart.com%s" % phones_with_top_score[0]['url']
-
 
77
                    else:
-
 
78
                        flipkart_price = 'Conflict'
-
 
79
                        print item.brand, model_name, model_number
-
 
80
                        print 'CONFLICT\n'
-
 
81
                        print search_results
66
                clusters = getProductClusters(search_results)
82
                        print phones_with_top_score
-
 
83
                        count_conflict += 1
-
 
84
                        data = json.dumps(phones_with_top_score)
67
                filtered_clusters = getFilteredClustersWithTopScores(clusters)
85
                        url = '#'
-
 
86
                        
-
 
87
                else:
68
                
88
                    flipkart_price = 'Not Found'
-
 
89
                    print item.brand, model_name, model_number
69
                display_info = getDisplayInfo(filtered_clusters)
90
                    print 'NOT FOUND\n'
-
 
91
                    print search_results
-
 
92
                    print phones_with_top_score
-
 
93
                    count_notfound += 1
-
 
94
                    data = ''
-
 
95
                    url = ''
-
 
96
                
70
                
97
                product_name = "%s " % item.brand
71
                product_name = "%s " % item.brand
98
                product_name += "%s " % model_name if model_name is not None else ''
72
                product_name += "%s " % model_name if model_name is not None else ''
99
                product_name += model_number if model_number is not None else ''
73
                product_name += model_number if model_number is not None else ''
100
                
74
                
101
                comparative_prices.append({
-
 
102
                    'product_name': product_name,
75
                display_info['product_name'] = product_name
103
                    'saholic_price': item.sellingPrice,
76
                display_info['saholic'] = {'price': item.sellingPrice}
104
                    'flipkart_price': flipkart_price.replace('Rs. ', ''),
77
                comparative_prices.append(display_info)
105
                    'td_class': 'conflict' if flipkart_price in ('Conflict') else '',
-
 
106
                    'data': data,
-
 
107
                    'url': url
-
 
108
                })
-
 
109
            except Exception as e:
78
            except Exception as e:
110
                print e.message
79
                print e
111
        
80
        
112
        print count_all, count_success, count_conflict, count_notfound
-
 
113
        self.write(self.loader.load('PriceChart.html').generate(data = comparative_prices))
81
        self.write(self.loader.load('PriceChart.html').generate(data = comparative_prices))
114
 
82
 
115
 
83
 
116
class SearchHandler(tornado.web.RequestHandler):
-
 
117
    
-
 
118
    def get(self):
-
 
119
        self.loader = tornado.template.Loader('HTMLTemplates')
-
 
120
        
-
 
121
        try:
-
 
122
            search_query = self.get_argument("q")
-
 
123
            results = Retriever().retrieve(search_query)
-
 
124
            self.write(self.loader.load('SearchResults.html').generate(phones = results, query = search_query))
-
 
125
        
-
 
126
        except Exception:
-
 
127
            self.write(self.loader.load('SearchForm.html').generate())
-
 
128
 
-
 
129
settings  = {
84
settings  = {
130
        'static_path': os.path.join(os.path.dirname(__file__), 'static'),
85
        'static_path': os.path.join(os.path.dirname(__file__), 'static'),
131
        'login_url': '/login', 
86
        'login_url': '/login', 
132
        'cookie_secret' :"61oETzKXQAGaYdkL5gEmGeJJFuYh7EQnp2XdTP1o/Vo="
87
        'cookie_secret' :"61oETzKXQAGaYdkL5gEmGeJJFuYh7EQnp2XdTP1o/Vo="
133
}
88
}
134
 
89
 
135
application = tornado.web.Application([
90
application = tornado.web.Application([
136
                (r"/", MainHandler),
91
                (r"/", MainHandler),
137
                (r"/search", SearchHandler),
-
 
138
                (r"/login", LoginHandler),
92
                (r"/login", LoginHandler),
139
                (r"/(jquery-1.6.2.min\.js)", tornado.web.StaticFileHandler, dict(path=settings['static_path']))
93
                (r"/(jquery-1.6.2.min\.js)", tornado.web.StaticFileHandler, dict(path=settings['static_path']))
140
            ], **settings)
94
            ], **settings)
141
 
95
 
142
if __name__ == '__main__':
96
if __name__ == '__main__':