Subversion Repositories SmartDukaan

Rev

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.httpserver
import tornado.ioloop
import tornado.web
import json, os, ConfigParser, sys

cmd_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 CatalogClient
from shop2020.thriftpy.model.v1.catalog.ttypes import status

class 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.authenticated
    def 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] = item

        comparative_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 None
                model_number = item.modelNumber.strip() if len(item.modelNumber.strip()) > 0 else None
                
                product_name = "%s " % item.brand
                product_name += "%s " % model_name if model_name is not None else ''
                product_name += model_number if model_number is not None else ''
                print product_name
                
                data_file = open('/tmp/msp_dir/' + str(item.catalogItemId), 'r')
                data = json.load(data_file)
                data = self.mapSearchUrls(data, product_name)
                data['name'] = product_name
                data['entity_id'] = item.catalogItemId
                comparative_prices.append(data)
                
            except IOError:
                phones_not_found.append(item.catalogItemId)
                 
            except Exception as e:
                print e
        
        self.write(self.loader.load('MSPChart.html').generate(data = comparative_prices))
        print len(phones_not_found), 'Phones not found:', phones_not_found

settings  = {
        '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()