Subversion Repositories SmartDukaan

Rev

Rev 4198 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
4106 varun.gupt 1
'''
2
Created on 20-Nov-2011
3
 
4
@author: Varun Gupta
5
'''
6
import tornado.httpserver
7
import tornado.ioloop
8
import tornado.web
9
import json, os, ConfigParser, sys
10
 
11
cmd_folder = os.path.dirname(os.path.abspath(os.environ["HOME"] + "/code/trunk/PyProj/src/shop2020/"))
12
if cmd_folder not in sys.path:
13
    sys.path.insert(0, cmd_folder)
14
 
15
from shop2020.clients.CatalogClient import CatalogClient
16
from shop2020.thriftpy.model.v1.catalog.ttypes import status
17
 
18
class BaseHandler(tornado.web.RequestHandler):
19
    def get_current_user(self):
20
        return self.get_secure_cookie('userauth')
21
 
22
class LoginHandler(BaseHandler):
23
    def get(self):
24
        self.loader = tornado.template.Loader('HTMLTemplates')
25
        self.write(self.loader.load('LoginForm.html').generate())
26
 
27
    def post(self):
28
        config = ConfigParser.SafeConfigParser()
29
        config.read('app.cfg')
30
 
31
        username = self.get_argument('username')
32
        password = self.get_argument('password')
33
 
34
        if username == config.get('auth', 'username') and password == config.get('auth', 'password'):
35
            print 'Password Matched'
36
            self.set_secure_cookie("userauth", username + '_' + password)
37
            self.redirect('/')
38
        else:
39
            self.redirect('/login')
40
 
41
class MainHandler(BaseHandler):
42
 
43
    def mapSearchUrls(self, map, name):
44
 
45
        search_urls = {
46
            'flipkart': 'http://www.flipkart.com/search-mobiles?query=$$&from=all&searchGroup=mobiles',
47
            'homeshop18': 'http://www.homeshop18.com/nokia%20n97/search:$$/categoryid:3024',
48
            'adexmart': 'http://adexmart.com/search.php?orderby=position&orderway=desc&search_query=$$',
49
            'infibeam': 'http://www.infibeam.com/Mobiles/search?q=$$',
50
            'letsbuy': 'http://www.letsbuy.com/advanced_search_result.php?cPath=254&keywords=$$'
51
        }
52
 
53
        for key in search_urls.iterkeys():
54
            try:
55
                if map[key]['url'] == 'Not Found':
56
                    map[key]['url'] = search_urls[key].replace('$$', name)
57
            except KeyError:
58
                map[key] = {'price': 'Not Found', 'url': search_urls[key].replace('$$', name)}
59
        return map
60
 
61
    @tornado.web.authenticated
62
    def get(self):
63
        self.loader = tornado.template.Loader('HTMLTemplates')
64
        catalog_client = CatalogClient().get_client()
65
        items = catalog_client.getAllItemsByStatus(status.ACTIVE)
66
        items.extend(catalog_client.getAllItemsByStatus(status.PAUSED))
67
        items.extend(catalog_client.getAllItemsByStatus(status.PAUSED_BY_RISK))
68
        products = {}
69
 
70
        for item in items:
71
            if item.category in (10002, 10003, 10004, 10005, 10010):  products[item.catalogItemId] = item
72
 
73
        comparative_prices = []
74
        phones_not_found = []
75
 
76
        for item in sorted(products.itervalues(), key = lambda item: item.brand):
77
            try:
78
                model_name = item.modelName.strip() if len(item.modelName.strip()) > 0 else None
79
                model_number = item.modelNumber.strip() if len(item.modelNumber.strip()) > 0 else None
80
 
81
                product_name = "%s " % item.brand
82
                product_name += "%s " % model_name if model_name is not None else ''
83
                product_name += model_number if model_number is not None else ''
84
                print product_name
85
 
86
                data_file = open('/tmp/msp_dir/' + str(item.catalogItemId), 'r')
87
                data = json.load(data_file)
88
                data = self.mapSearchUrls(data, product_name)
89
                data['name'] = product_name
90
                data['entity_id'] = item.catalogItemId
91
                comparative_prices.append(data)
92
 
93
            except IOError:
94
                phones_not_found.append(item.catalogItemId)
95
 
96
            except Exception as e:
97
                print e
98
 
99
        self.write(self.loader.load('MSPChart.html').generate(data = comparative_prices))
100
        print len(phones_not_found), 'Phones not found:', phones_not_found
101
 
102
settings  = {
103
        'static_path': os.path.join(os.path.dirname(__file__), 'static'),
104
        'login_url': '/login', 
105
        'cookie_secret' :"61oETzKXQAGaYdkL5gEmGeJJFuYh7EQnp2XdTP1o/Vo="
106
}
107
 
108
application = tornado.web.Application([
109
                (r"/", MainHandler),
110
                (r"/login", LoginHandler),
111
                (r"/(jquery-1.6.2.min\.js)", tornado.web.StaticFileHandler, dict(path=settings['static_path']))
112
            ], **settings)
113
 
114
if __name__ == '__main__':
115
    http_server = tornado.httpserver.HTTPServer(application)
116
    http_server.listen(8889)
117
    tornado.ioloop.IOLoop.instance().start()