Rev 4106 | Rev 5639 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
'''Created on 20-Nov-2011@author: Varun Gupta'''import tornado.httpserverimport tornado.ioloopimport tornado.webimport json, os, ConfigParser, syscmd_folder = os.path.dirname(os.path.abspath(os.environ["HOME"] + "/code/trunk/PyProj/src/shop2020/"))if cmd_folder not in sys.path:sys.path.insert(0, cmd_folder)from shop2020.clients.CatalogClient import CatalogClientfrom shop2020.thriftpy.model.v1.catalog.ttypes import statusclass BaseHandler(tornado.web.RequestHandler):def get_current_user(self):return self.get_secure_cookie('userauth')class LoginHandler(BaseHandler):def get(self):self.loader = tornado.template.Loader('HTMLTemplates')self.write(self.loader.load('LoginForm.html').generate())def post(self):config = ConfigParser.SafeConfigParser()config.read('app.cfg')username = self.get_argument('username')password = self.get_argument('password')if username == config.get('auth', 'username') and password == config.get('auth', 'password'):print 'Password Matched'self.set_secure_cookie("userauth", username + '_' + password)self.redirect('/')else:self.redirect('/login')class MainHandler(BaseHandler):def mapSearchUrls(self, map, name):search_urls = {'flipkart': 'http://www.flipkart.com/search-mobiles?query=$$&from=all&searchGroup=mobiles','homeshop18': 'http://www.homeshop18.com/nokia%20n97/search:$$/categoryid:3024','adexmart': 'http://adexmart.com/search.php?orderby=position&orderway=desc&search_query=$$','infibeam': 'http://www.infibeam.com/Mobiles/search?q=$$','letsbuy': 'http://www.letsbuy.com/advanced_search_result.php?cPath=254&keywords=$$'}for key in search_urls.iterkeys():try:if map[key]['url'] == 'Not Found':map[key]['url'] = search_urls[key].replace('$$', name)except KeyError:map[key] = {'price': 'Not Found', 'url': search_urls[key].replace('$$', name)}return map@tornado.web.authenticateddef get(self):self.loader = tornado.template.Loader('HTMLTemplates')catalog_client = CatalogClient().get_client()items = catalog_client.getAllItemsByStatus(status.ACTIVE)items.extend(catalog_client.getAllItemsByStatus(status.PAUSED))items.extend(catalog_client.getAllItemsByStatus(status.PAUSED_BY_RISK))products = {}for item in items:if item.category in (10002, 10003, 10004, 10005, 10010): products[item.catalogItemId] = itemcomparative_prices = []phones_not_found = []for item in sorted(products.itervalues(), key = lambda item: item.brand):try:model_name = item.modelName.strip() if len(item.modelName.strip()) > 0 else Nonemodel_number = item.modelNumber.strip() if len(item.modelNumber.strip()) > 0 else Noneproduct_name = "%s " % item.brandproduct_name += "%s " % model_name if model_name is not None else ''product_name += model_number if model_number is not None else ''print product_namedata_file = open('/tmp/msp_dir/' + str(item.catalogItemId), 'r')data = json.load(data_file)data = self.mapSearchUrls(data, product_name)data['name'] = product_namedata['entity_id'] = item.catalogItemIdcomparative_prices.append(data)except IOError:phones_not_found.append(item.catalogItemId)except Exception as e:print eself.write(self.loader.load('MSPChart.html').generate(data = comparative_prices))print len(phones_not_found), 'Phones not found:', phones_not_foundsettings = {'static_path': os.path.join(os.path.dirname(__file__), 'static'),'login_url': '/login','cookie_secret' :"61oETzKXQAGaYdkL5gEmGeJJFuYh7EQnp2XdTP1o/Vo="}application = tornado.web.Application([(r"/", MainHandler),(r"/login", LoginHandler),(r"/(jquery-1.6.2.min\.js)", tornado.web.StaticFileHandler, dict(path=settings['static_path']))], **settings)if __name__ == '__main__':http_server = tornado.httpserver.HTTPServer(application)http_server.listen(8888)tornado.ioloop.IOLoop.instance().start()