Subversion Repositories SmartDukaan

Rev

Rev 16325 | Rev 16333 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
13829 kshitij.so 1
import urllib2
2
import simplejson as json
3
import pymongo
15951 kshitij.so 4
from dtr.utils.utils import to_java_date, getNlcPoints, transformUrl
13918 kshitij.so 5
from datetime import datetime, timedelta
13829 kshitij.so 6
from operator import itemgetter
7
from dtr.utils.AmazonPriceOnlyScraper import AmazonScraper
14309 kshitij.so 8
from dtr.utils import AmazonDealScraper
15902 kshitij.so 9
from dtr.utils import FlipkartScraper,NewFlipkartScraper, ShopCluesScraper
14324 kshitij.so 10
from dtr.storage.MemCache import MemCache
14334 kshitij.so 11
from functools import partial
12
import threading
14760 kshitij.so 13
from dtr.utils.utils import getCashBack
14794 kshitij.so 14
import traceback
15174 kshitij.so 15
from shop2020.config.client.ConfigClient import ConfigClient
16065 kshitij.so 16
import chardet
13829 kshitij.so 17
 
15174 kshitij.so 18
config_client = ConfigClient()
19
host_memCache = config_client.get_property('mem_cache_host_dtr')
20
host = config_client.get_property('mongo_dtr_host')
14324 kshitij.so 21
 
15174 kshitij.so 22
mc = MemCache(host_memCache)
23
 
24
 
15902 kshitij.so 25
con  = None
26
SOURCE_MAP = {'AMAZON':1,'FLIPKART':2,'SNAPDEAL':3,'SAHOLIC':4, 'SHOPCLUES.COM':5}
13829 kshitij.so 27
 
28
headers = { 
29
           'User-agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11',
30
            'Accept' : 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',      
31
            'Accept-Language' : 'en-US,en;q=0.8',                     
32
            'Accept-Charset' : 'ISO-8859-1,utf-8;q=0.7,*;q=0.3'
33
        }
34
 
16327 kshitij.so 35
ignoreItems = [23364, 477, 476]
15608 kshitij.so 36
 
15174 kshitij.so 37
def get_mongo_connection(port=27017):
13829 kshitij.so 38
    global con
39
    if con is None:
40
        print "Establishing connection %s host and port %d" %(host,port)
41
        try:
42
            con = pymongo.MongoClient(host, port)
43
        except Exception, e:
44
            print e
45
            return None
46
    return con
47
 
14828 kshitij.so 48
def returnLatestPrice(data, source_id, ignoreLastUpdated = True):
13918 kshitij.so 49
    now = datetime.now()
13829 kshitij.so 50
    if source_id == 1:
51
        try:
13918 kshitij.so 52
            if data['identifier'] is None or len(data['identifier'].strip())==0:
13829 kshitij.so 53
                return {}
13918 kshitij.so 54
 
15615 kshitij.so 55
            if data['_id'] in ignoreItems:
56
                print "Ignored items returning for %d"%(data['_id'])
16117 kshitij.so 57
                return {'_id':data['_id'],'available_price':data['available_price'],'in_stock':data['in_stock'],'source_id':1,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'],'coupon':data['coupon'], 'codAvailable':data['codAvailable'], 'tagline': data['tagline'], 'offer': data['offer']}
15615 kshitij.so 58
 
59
 
14577 kshitij.so 60
            if data['dealFlag'] ==1 and data['dealType'] ==1:
61
                data['marketPlaceUrl'] = "http://www.amazon.in/dp/%s"%(data['identifier'].strip())
62
 
13918 kshitij.so 63
            try:
14828 kshitij.so 64
                if ignoreLastUpdated and data['priceUpdatedOn'] > to_java_date(now - timedelta(minutes=5)):
13918 kshitij.so 65
                    print "sku id is already updated",data['_id'] 
16117 kshitij.so 66
                    return {'_id':data['_id'],'available_price':data['available_price'],'in_stock':data['in_stock'],'source_id':1,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'],'coupon':data['coupon'], 'codAvailable':data['codAvailable'], 'tagline': data['tagline'], 'offer': data['offer']}
13918 kshitij.so 67
            except:
68
                pass
69
 
70
 
15956 kshitij.so 71
            url = "http://www.amazon.in/gp/aw/ol/%s?o=New&op=1"%(data['identifier'])
13829 kshitij.so 72
            lowestPrice = 0.0
14309 kshitij.so 73
            try:
74
                if data['dealFlag'] ==1 and data['dealType'] ==1:
75
                    print "Inside deal"
76
                    deal_url = "http://www.amazon.in/dp/%s"%(data['identifier'].strip())
77
                    print deal_url
15213 kshitij.so 78
                    dealScraperAmazon = AmazonDealScraper.AmazonScraper(True)
14309 kshitij.so 79
                    lowestPrice = dealScraperAmazon.read(deal_url)
80
                    print lowestPrice
81
                    if lowestPrice == 0:
82
                        raise
83
                else:    
15213 kshitij.so 84
                    scraperAmazon = AmazonScraper(True)
14309 kshitij.so 85
                    lowestPrice = scraperAmazon.read(url)
86
            except Exception as e:
87
                print e
15213 kshitij.so 88
                scraperAmazon = AmazonScraper(True)
14309 kshitij.so 89
                lowestPrice = scraperAmazon.read(url)
13929 kshitij.so 90
            print "LowestPrice ",lowestPrice
13829 kshitij.so 91
            inStock = 0
92
            if lowestPrice > 0:
93
                inStock = 1
94
            if lowestPrice > 0:
13971 kshitij.so 95
                get_mongo_connection().Catalog.MasterData.update({'_id':data['_id']}, {'$set' : {'available_price':lowestPrice,'updatedOn':to_java_date(now),'priceUpdatedOn':to_java_date(now),'in_stock':inStock}}, multi=True)
16024 kshitij.so 96
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'available_price':lowestPrice , 'in_stock':inStock,'dealType':data['dealType'],'codAvailable':data['codAvailable']}}, multi=True)
13829 kshitij.so 97
            else:
13929 kshitij.so 98
                lowestPrice = data['available_price']
13977 kshitij.so 99
                get_mongo_connection().Catalog.MasterData.update({'_id':data['_id']}, {'$set' : {'updatedOn':to_java_date(now),'in_stock':0,'priceUpdatedOn':to_java_date(now)}}, multi=True)
16024 kshitij.so 100
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'in_stock':0,'dealType':data['dealType'],'codAvailable':data['codAvailable']}}, multi=True)
13918 kshitij.so 101
 
16117 kshitij.so 102
            return {'_id':data['_id'],'available_price':lowestPrice,'in_stock':inStock,'source_id':1,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'], 'coupon':data['coupon'], 'codAvailable':data['codAvailable'], 'tagline': data['tagline'], 'offer': data['offer']}
14834 kshitij.so 103
        except Exception as e:
104
            print "Exception for _id %d and source %s"%(data['_id'], source_id)
105
            print e
16117 kshitij.so 106
            return {'_id':data['_id'],'available_price':data['available_price'],'in_stock':data['in_stock'],'source_id':1,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'], 'coupon':data['coupon'], 'codAvailable':data['codAvailable'], 'tagline': data['tagline'], 'offer': data['offer']}
13829 kshitij.so 107
 
14203 kshitij.so 108
    elif source_id ==4:
14207 kshitij.so 109
 
14203 kshitij.so 110
        try:
14212 kshitij.so 111
            if data['identifier'] is None or len(data['identifier'].strip())==0:
112
                return {}
113
 
114
            try:
14828 kshitij.so 115
                if ignoreLastUpdated and data['priceUpdatedOn'] > to_java_date(now - timedelta(minutes=5)):
14212 kshitij.so 116
                    print "sku id is already updated",data['_id'] 
16117 kshitij.so 117
                    return {'_id':data['_id'],'available_price':data['available_price'],'in_stock':data['in_stock'],'source_id':4,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'], 'coupon':data['coupon'], 'codAvailable':data['codAvailable'], 'tagline': data['tagline'], 'offer': data['offer']}
14212 kshitij.so 118
            except:
119
                pass
120
 
14840 kshitij.so 121
            url = "http://50.116.3.101:8080/mobileapi/dtr-pricing?id=%s"%(data['identifier'])
14212 kshitij.so 122
            lowestPrice = 0.0
123
            instock = 0
124
            req = urllib2.Request(url,headers=headers)
125
            response = urllib2.urlopen(req)
126
            json_input = response.read()
127
            response.close()
128
            priceInfo = json.loads(json_input)
129
            lowestPrice = priceInfo['response']['sellingPrice']
130
            if lowestPrice > 0:
131
                instock = 1
132
            if instock  == 1:
133
                get_mongo_connection().Catalog.MasterData.update({'_id':data['_id']}, {'$set' : {'available_price':lowestPrice,'updatedOn':to_java_date(now),'priceUpdatedOn':to_java_date(now),'in_stock':instock}}, multi=True)
16024 kshitij.so 134
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'available_price':lowestPrice , 'in_stock':instock,'codAvailable':data['codAvailable']}}, multi=True)
14212 kshitij.so 135
            else:
136
                lowestPrice = data['available_price']
137
                get_mongo_connection().Catalog.MasterData.update({'_id':data['_id']}, {'$set' : {'updatedOn':to_java_date(now),'in_stock':instock,'priceUpdatedOn':to_java_date(now)}}, multi=True)
16024 kshitij.so 138
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'in_stock':instock,'codAvailable':data['codAvailable']}}, multi=True)
14212 kshitij.so 139
 
16205 kshitij.so 140
            return {'_id':data['_id'],'available_price':lowestPrice,'in_stock':instock,'source_id':4,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'],'coupon':data['coupon'], 'codAvailable':data['codAvailable'],'tagline': data['tagline'], 'offer': data['offer']}
14834 kshitij.so 141
 
142
        except Exception as e:
143
            print "Exception for _id %d and source %s"%(data['_id'], source_id)
144
            print e
16205 kshitij.so 145
            return {'_id':data['_id'],'available_price':data['available_price'],'in_stock':data['in_stock'],'source_id':4,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'],'coupon':data['coupon'], 'codAvailable':data['codAvailable'],'tagline': data['tagline'], 'offer': data['offer']}
14203 kshitij.so 146
 
14207 kshitij.so 147
 
13829 kshitij.so 148
    elif source_id ==3:
149
        try:
13918 kshitij.so 150
            if data['identifier'] is None or len(data['identifier'].strip())==0:
13829 kshitij.so 151
                return {}
13918 kshitij.so 152
 
16206 kshitij.so 153
            if data['_id'] in ignoreItems:
154
                print "Ignored items returning for %d"%(data['_id'])
16265 kshitij.so 155
                return {'_id':data['_id'],'available_price':data['available_price'],'in_stock':data['in_stock'],'source_id':3,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'],'coupon':data['coupon'], 'codAvailable':data['codAvailable'], 'tagline': data['tagline'], 'offer': data['offer']}
16206 kshitij.so 156
 
13918 kshitij.so 157
            try:
14828 kshitij.so 158
                if ignoreLastUpdated and data['priceUpdatedOn'] > to_java_date(now - timedelta(minutes=5)):
13920 kshitij.so 159
                    print "sku id is already updated",data['_id']
16205 kshitij.so 160
                    return {'_id':data['_id'],'available_price':data['available_price'],'in_stock':data['in_stock'],'source_id':3,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'],'coupon':data['coupon'], 'codAvailable':data['codAvailable'],'tagline': data['tagline'], 'offer': data['offer']}
13919 kshitij.so 161
 
162
            except Exception as e:
13920 kshitij.so 163
                print "Exception snapdeal"
13919 kshitij.so 164
                print e
13918 kshitij.so 165
 
15819 kshitij.so 166
            url="http://www.snapdeal.com/acors/json/v2/gvbps?supc=%s&catUrl=&bn=&catId=175&start=0&count=10000"%(data['identifier'])
13829 kshitij.so 167
            req = urllib2.Request(url,headers=headers)
168
            response = urllib2.urlopen(req)
16065 kshitij.so 169
            snapdeal_data = response.read()
170
            encoding =  chardet.detect(snapdeal_data)
171
            try:
172
                snapdeal_data = snapdeal_data.decode(encoding.get('encoding'))
173
            except:
174
                snapdeal_data = snapdeal_data.decode(encoding.get('latin-1'))
175
            vendorInfo = json.loads(snapdeal_data)
14188 kshitij.so 176
            response.close()
13829 kshitij.so 177
            lowestOfferPrice = 0
178
            inStock = 0
15253 kshitij.so 179
            buyBoxPrice = 0
180
            isBuyBox = 1
15819 kshitij.so 181
            try:
182
                buyBoxStock = vendorInfo['primaryVendor']['buyableInventory']
183
                if buyBoxStock >0:
184
                    buyBoxPrice = vendorInfo['primaryVendor']['sellingPrice']
185
            except:
186
                pass
16065 kshitij.so 187
            print "buy box stock ",buyBoxStock
188
            print "bux box price ",buyBoxPrice
15819 kshitij.so 189
            sortedVendorsData = sorted(vendorInfo['vendors'], key=itemgetter('sellingPrice'))
15253 kshitij.so 190
            for sortedVendorData in sortedVendorsData:
191
                lowestOfferPrice = float(sortedVendorData['sellingPrice'])
192
                try:
193
                    stock = sortedVendorData['buyableInventory']
194
                except:
195
                    stock = 0
13829 kshitij.so 196
                if stock > 0 and lowestOfferPrice > 0:
197
                    inStock = 1
198
                    break
199
 
200
            print lowestOfferPrice
201
            print inStock
202
            print "*************"
15253 kshitij.so 203
 
204
            if buyBoxPrice != lowestOfferPrice:
205
                isBuyBox = 0
206
 
13829 kshitij.so 207
            if inStock  == 1:
15253 kshitij.so 208
                get_mongo_connection().Catalog.MasterData.update({'_id':data['_id']}, {'$set' : {'available_price':lowestOfferPrice,'updatedOn':to_java_date(now),'priceUpdatedOn':to_java_date(now),'in_stock':inStock,'buyBoxFlag':isBuyBox}}, multi=True)
16024 kshitij.so 209
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'available_price':lowestOfferPrice , 'in_stock':inStock,'codAvailable':data['codAvailable']}}, multi=True)
13829 kshitij.so 210
            else:
13929 kshitij.so 211
                lowestOfferPrice = data['available_price']
15253 kshitij.so 212
                get_mongo_connection().Catalog.MasterData.update({'_id':data['_id']}, {'$set' : {'updatedOn':to_java_date(now),'in_stock':inStock,'priceUpdatedOn':to_java_date(now),'buyBoxFlag':isBuyBox}}, multi=True)
16024 kshitij.so 213
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'in_stock':inStock,'codAvailable':data['codAvailable']}}, multi=True)
13918 kshitij.so 214
 
16117 kshitij.so 215
            return {'_id':data['_id'],'available_price':lowestOfferPrice,'in_stock':inStock,'source_id':3,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'],'coupon':data['coupon'], 'codAvailable':data['codAvailable'], 'tagline': data['tagline'], 'offer': data['offer']}
14834 kshitij.so 216
        except Exception as e:
15266 kshitij.so 217
            print traceback.print_exc()
14834 kshitij.so 218
            print "Exception for _id %d and source %s"%(data['_id'], source_id)
219
            print e
16117 kshitij.so 220
            return {'_id':data['_id'],'available_price':data['available_price'],'in_stock':data['in_stock'],'source_id':3,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'],'coupon':data['coupon'], 'codAvailable':data['codAvailable'], 'tagline': data['tagline'], 'offer': data['offer']}
13829 kshitij.so 221
 
222
    elif source_id == 2:
223
        try:
13918 kshitij.so 224
            if data['identifier'] is None or len(data['identifier'].strip())==0:
13829 kshitij.so 225
                return {}
13918 kshitij.so 226
 
15609 kshitij.so 227
            if data['_id'] in ignoreItems:
15608 kshitij.so 228
                print "Ignored items returning for %d"%(data['_id'])
16117 kshitij.so 229
                return {'_id':data['_id'],'available_price':data['available_price'],'in_stock':data['in_stock'],'source_id':2,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'],'coupon':data['coupon'], 'codAvailable':data['codAvailable'], 'tagline': data['tagline'], 'offer': data['offer']}
15608 kshitij.so 230
 
13918 kshitij.so 231
            try:
14828 kshitij.so 232
                if ignoreLastUpdated and data['priceUpdatedOn'] > to_java_date(now - timedelta(minutes=5)):
13918 kshitij.so 233
                    print "sku id is already updated",data['_id']
16117 kshitij.so 234
                    return {'_id':data['_id'],'available_price':data['available_price'],'in_stock':data['in_stock'],'source_id':2,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'],'coupon':data['coupon'], 'codAvailable':data['codAvailable'], 'tagline': data['tagline'], 'offer': data['offer']} 
13918 kshitij.so 235
            except:
236
                pass
237
 
238
            lowestSp = 0
239
            inStock = 0
15253 kshitij.so 240
            buyBoxPrice = 0
241
            isBuyBox = 0
14189 kshitij.so 242
            scraperProductPage = NewFlipkartScraper.FlipkartProductPageScraper()
14121 kshitij.so 243
            try:
244
                if data['marketPlaceUrl']!="" or data['marketPlaceUrl'] !="http://www.flipkart.com/ps/%s"%(data['identifier']):
245
                    result = scraperProductPage.read(data['marketPlaceUrl'])
14124 kshitij.so 246
                    print result
14125 kshitij.so 247
                    if result.get('lowestSp')!=0:
248
                        lowestSp = result.get('lowestSp')
14121 kshitij.so 249
                        inStock = result.get('inStock')
15253 kshitij.so 250
                        buyBoxPrice = result.get('buyBoxPrice')
14121 kshitij.so 251
            except:
252
                print "Unable to scrape product page ",data['identifier']
253
            if lowestSp ==0:
254
                url = "http://www.flipkart.com/ps/%s"%(data['identifier'])
14189 kshitij.so 255
                scraperFk = FlipkartScraper.FlipkartScraper()
15253 kshitij.so 256
                vendorsData, buyBoxInfo = (scraperFk.read(url))
14121 kshitij.so 257
                sortedVendorsData = []
258
                sortedVendorsData = sorted(vendorsData, key=itemgetter('sellingPrice'))
259
                print "data",sortedVendorsData
260
                for vData in sortedVendorsData:
261
                    lowestSp = vData['sellingPrice']
262
                    break
263
                if lowestSp > 0:
264
                    inStock = 1
15975 kshitij.so 265
                try:
266
                    buyBoxPrice = buyBoxInfo[0].get('sellingPrice')
267
                except:
268
                    buyBoxPrice = None
13829 kshitij.so 269
            print lowestSp
270
            print inStock
15253 kshitij.so 271
            if buyBoxPrice is not None and buyBoxPrice == lowestSp:
272
                isBuyBox = 1
13829 kshitij.so 273
            if lowestSp > 0:
15253 kshitij.so 274
                get_mongo_connection().Catalog.MasterData.update({'_id':data['_id']}, {'$set' : {'available_price':lowestSp,'updatedOn':to_java_date(now),'priceUpdatedOn':to_java_date(now),'in_stock':inStock,'buyBoxFlag':isBuyBox}}, multi=True)
16024 kshitij.so 275
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'available_price':lowestSp , 'in_stock':inStock,'codAvailable':data['codAvailable']}}, multi=True)
13829 kshitij.so 276
            else:
13929 kshitij.so 277
                lowestSp = data['available_price']
15253 kshitij.so 278
                get_mongo_connection().Catalog.MasterData.update({'_id':data['_id']}, {'$set' : {'updatedOn':to_java_date(now),'in_stock':inStock,'priceUpdatedOn':to_java_date(now),'buyBoxFlag':isBuyBox}}, multi=True)
16024 kshitij.so 279
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'in_stock':inStock,'codAvailable':data['codAvailable']}}, multi=True)
13918 kshitij.so 280
 
16117 kshitij.so 281
            return {'_id':data['_id'],'available_price':lowestSp,'in_stock':inStock,'source_id':2,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'],'coupon':data['coupon'], 'codAvailable':data['codAvailable'], 'tagline': data['tagline'], 'offer': data['offer']}
14342 kshitij.so 282
 
14834 kshitij.so 283
        except Exception as e:
284
            print "Exception for _id %d and source %s"%(data['_id'], source_id)
285
            print e
16117 kshitij.so 286
            return {'_id':data['_id'],'available_price':data['available_price'],'in_stock':data['in_stock'],'source_id':2,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'],'coupon':data['coupon'], 'codAvailable':data['codAvailable'], 'tagline': data['tagline'], 'offer': data['offer']}
15902 kshitij.so 287
 
288
    elif source_id == 5:
289
        try:
290
            if data['_id'] in ignoreItems:
291
                print "Ignored items returning for %d"%(data['_id'])
16117 kshitij.so 292
                return {'_id':data['_id'],'available_price':data['available_price'],'in_stock':data['in_stock'],'source_id':5,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'],'coupon':data['coupon'], 'codAvailable':data['codAvailable'], 'tagline': data['tagline'], 'offer': data['offer']}
15902 kshitij.so 293
 
294
            try:
295
                if ignoreLastUpdated and data['priceUpdatedOn'] > to_java_date(now - timedelta(minutes=5)):
296
                    print "sku id is already updated",data['_id'] 
16117 kshitij.so 297
                    return {'_id':data['_id'],'available_price':data['available_price'],'in_stock':data['in_stock'],'source_id':5,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'],'coupon':data['coupon'], 'codAvailable':data['codAvailable'], 'tagline': data['tagline'], 'offer': data['offer']}
15902 kshitij.so 298
            except:
299
                pass
300
 
301
 
302
            url = data['marketPlaceUrl']
303
            lowestPrice = 0.0
304
            try:
305
                sc = ShopCluesScraper.ShopCluesScraper()
15951 kshitij.so 306
                url = transformUrl(url, 5)
15902 kshitij.so 307
                productInfo = sc.read(url)
308
            except Exception as e:
16177 kshitij.so 309
                traceback.print_exc()
16176 kshitij.so 310
                productInfo = {}
16022 kshitij.so 311
                productInfo['price'] = 0.0
312
                productInfo['inStock'] = 0
313
                productInfo['isCod'] = 0
16178 kshitij.so 314
                productInfo['coupon'] = ""
16022 kshitij.so 315
 
15902 kshitij.so 316
            print "LowestPrice ",productInfo['price']
317
            if productInfo['price'] > 0 and productInfo['inStock']==1:
318
                get_mongo_connection().Catalog.MasterData.update({'_id':data['_id']}, {'$set' : {'available_price':productInfo['price'],'coupon':productInfo['coupon'],'codAvailable':productInfo['isCod'],'updatedOn':to_java_date(now),'priceUpdatedOn':to_java_date(now),'in_stock':productInfo['inStock']}})
16024 kshitij.so 319
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'available_price':productInfo['price'] , 'in_stock':productInfo['inStock'],'dealType':data['dealType'], 'rank':data['rank'],'codAvailable':productInfo['isCod']}})
15902 kshitij.so 320
            else:
321
                lowestPrice = data['available_price']
322
                get_mongo_connection().Catalog.MasterData.update({'_id':data['_id']}, {'$set' : {'updatedOn':to_java_date(now),'in_stock':0,'priceUpdatedOn':to_java_date(now)}})
16024 kshitij.so 323
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'in_stock':0,'dealType':data['dealType'],'rank':data['rank'],'codAvailable':productInfo['isCod']}})
15902 kshitij.so 324
 
16117 kshitij.so 325
            return {'_id':data['_id'],'available_price':productInfo['price'],'in_stock':productInfo['inStock'],'source_id':5,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'], 'coupon':productInfo['coupon'],'codAvailable':productInfo['isCod'], 'tagline': data['tagline'], 'offer': data['offer']}
15902 kshitij.so 326
        except Exception as e:
327
            print "Exception for _id %d and source %s"%(data['_id'], source_id)
16177 kshitij.so 328
            traceback.print_exc()
16117 kshitij.so 329
            return {'_id':data['_id'],'available_price':data['available_price'],'in_stock':data['in_stock'],'source_id':5,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'],'coupon':data['coupon'], 'codAvailable':data['codAvailable'], 'tagline': data['tagline'], 'offer': data['offer']}
15902 kshitij.so 330
 
13829 kshitij.so 331
    else:
332
        return {}
15902 kshitij.so 333
 
334
 
13918 kshitij.so 335
 
15253 kshitij.so 336
def recomputePoints(item, deal):
337
    try:
338
        nlcPoints = getNlcPoints(item, deal['minNlc'], deal['maxNlc'], deal['available_price'])
339
    except:
340
        print traceback.print_exc()
341
        nlcPoints = deal['nlcPoints']
342
    if item['manualDealThresholdPrice'] >= deal['available_price']:
343
        dealPoints = item['dealPoints']
344
    else:
345
        dealPoints = 0
346
    get_mongo_connection().Catalog.Deals.update({'_id':deal['_id']},{"$set":{'totalPoints':deal['totalPoints'] - deal['nlcPoints'] + nlcPoints - deal['dealPoints'] +dealPoints , 'nlcPoints': nlcPoints, 'dealPoints': dealPoints, 'manualDealThresholdPrice': item['manualDealThresholdPrice']}})
347
 
15266 kshitij.so 348
 
349
def populateNegativeDeals():
350
    negativeDeals = get_mongo_connection().Catalog.NegativeDeals.find().distinct('sku')
351
    mc.set("negative_deals", negativeDeals, 600)
352
 
353
def recomputeDeal(item):
16017 kshitij.so 354
 
13918 kshitij.so 355
    """Lets recompute deal for this bundle"""
15266 kshitij.so 356
    print "Recomputing for bundleId",item.get('skuBundleId')
357
    skuBundleId = item['skuBundleId']
13829 kshitij.so 358
 
13918 kshitij.so 359
    similarItems = list(get_mongo_connection().Catalog.Deals.find({'skuBundleId':skuBundleId}).sort([('available_price',pymongo.ASCENDING)]))
360
    bestPrice = float("inf")
361
    bestOne = None
362
    bestSellerPoints = 0
363
    toUpdate = []
16017 kshitij.so 364
    prepaidBestPrice = float("inf")
365
    prepaidBestOne = None
366
    prepaidBestSellerPoints = 0
13918 kshitij.so 367
    for similarItem in similarItems:
15266 kshitij.so 368
        if similarItem['_id'] == item['_id']:
369
            recomputePoints(item, similarItem)
16017 kshitij.so 370
        if similarItem['codAvailable'] ==1:
371
            if mc.get("negative_deals") is None:
372
                populateNegativeDeals()
16172 kshitij.so 373
            if similarItem['in_stock'] == 0  or similarItem['_id'] in mc.get("negative_deals"):
16017 kshitij.so 374
                get_mongo_connection().Catalog.Deals.update({ '_id' : similarItem['_id'] }, {'$set':{'showDeal':0, 'prepaidDeal':0 }})
375
                continue
376
            if similarItem['source_id'] == SOURCE_MAP.get('SHOPCLUES.COM') and similarItem['rank']==0:
377
                get_mongo_connection().Catalog.Deals.update({ '_id' : similarItem['_id'] }, {'$set':{'showDeal':0,'prepaidDeal':0 }})
378
                continue
379
            if similarItem['available_price'] < bestPrice:
380
                bestOne = similarItem
381
                bestPrice = similarItem['available_price']
382
                bestSellerPoints = similarItem['bestSellerPoints']
383
            elif similarItem['available_price'] == bestPrice and bestSellerPoints < similarItem['bestSellerPoints']:
384
                bestOne = similarItem
385
                bestPrice = similarItem['available_price']
386
                bestSellerPoints = similarItem['bestSellerPoints']
387
            else:
388
                pass
13918 kshitij.so 389
        else:
16017 kshitij.so 390
            if mc.get("negative_deals") is None:
391
                populateNegativeDeals()
16172 kshitij.so 392
            if similarItem['in_stock'] == 0  or similarItem['_id'] in mc.get("negative_deals"):
16017 kshitij.so 393
                get_mongo_connection().Catalog.Deals.update({ '_id' : similarItem['_id'] }, {'$set':{'showDeal':0, 'prepaidDeal':0 }})
394
                continue
395
            if similarItem['source_id'] == SOURCE_MAP.get('SHOPCLUES.COM') and similarItem['rank']==0:
396
                get_mongo_connection().Catalog.Deals.update({ '_id' : similarItem['_id'] }, {'$set':{'showDeal':0,'prepaidDeal':0 }})
397
                continue
398
            if similarItem['available_price'] < prepaidBestPrice:
399
                prepaidBestOne = similarItem
400
                prepaidBestPrice = similarItem['available_price']
401
                prepaidBestSellerPoints = similarItem['bestSellerPoints']
402
            elif similarItem['available_price'] == prepaidBestPrice and prepaidBestSellerPoints < similarItem['bestSellerPoints']:
403
                prepaidBestOne = similarItem
404
                prepaidBestPrice = similarItem['available_price']
405
                prepaidBestSellerPoints = similarItem['bestSellerPoints']
406
            else:
407
                pass
16024 kshitij.so 408
    print "bestOne ", bestOne
409
    print "prepaid best one",  prepaidBestOne
410
    if bestOne is not None or prepaidBestOne is not None:
13918 kshitij.so 411
        for similarItem in similarItems:
412
            toUpdate.append(similarItem['_id'])
16023 kshitij.so 413
        if bestOne is not None:
414
            toUpdate.remove(bestOne['_id'])
415
            get_mongo_connection().Catalog.Deals.update({ '_id' : bestOne['_id'] }, {'$set':{'showDeal':1,'prepaidDeal':0 }})
416
        if prepaidBestOne is not None:
16069 kshitij.so 417
            if bestOne is not None:
418
                if prepaidBestOne['available_price'] < bestOne['available_price']: 
419
                    toUpdate.remove(prepaidBestOne['_id'])
420
                    get_mongo_connection().Catalog.Deals.update({ '_id' : prepaidBestOne['_id'] }, {'$set':{'showDeal':0,'prepaidDeal':1 }})
16072 kshitij.so 421
            else:
422
                toUpdate.remove(prepaidBestOne['_id'])
423
                get_mongo_connection().Catalog.Deals.update({ '_id' : prepaidBestOne['_id'] }, {'$set':{'showDeal':0,'prepaidDeal':1 }})
13918 kshitij.so 424
    if len(toUpdate) > 0:
16017 kshitij.so 425
        get_mongo_connection().Catalog.Deals.update({ '_id' : { "$in": toUpdate } }, {'$set':{'showDeal':0,'prepaidDeal':0 }},upsert=False, multi=True)
426
 
14342 kshitij.so 427
    print "Done with recomputing"
13829 kshitij.so 428
 
429
def getLatestPrice(skuBundleId, source_id):
430
    temp = []
431
    itemIds = list(get_mongo_connection().Catalog.MasterData.find({'skuBundleId':skuBundleId,'source_id' : source_id}))
16026 kshitij.so 432
    item = None
13829 kshitij.so 433
    for item in itemIds:
14309 kshitij.so 434
        item['dealFlag'] = 0
435
        item['dealType'] = 0
15266 kshitij.so 436
        item['dealPoints'] = 0
437
        item['manualDealThresholdPrice'] = None
15912 kshitij.so 438
        if item['source_id'] ==5 and item['rank'] == 0:
439
            continue
15187 kshitij.so 440
        if item['source_id'] ==3:
441
            item['marketPlaceUrl'] = item['marketPlaceUrl']+'?supc='+item.get('identifier')
14309 kshitij.so 442
        manualDeals = list(get_mongo_connection().Catalog.ManualDeals.find({'startDate':{'$lte':to_java_date(datetime.now())},'endDate':{'$gte':to_java_date(datetime.now())},'source_id':source_id, 'sku':item['_id']}))
443
        if len(manualDeals) > 0:
444
            item['dealFlag'] = 1
14760 kshitij.so 445
            item['dealType'] =manualDeals[0]['dealType']
15266 kshitij.so 446
            item['dealPoints'] = manualDeals[0]['dealPoints']
447
            item['manualDealThresholdPrice'] = manualDeals[0]['dealThresholdPrice']
14760 kshitij.so 448
        info = returnLatestPrice(item, source_id)
14794 kshitij.so 449
        print info
14760 kshitij.so 450
        try:
451
            cashBack = getCashBack(item['_id'], item['source_id'], item['category_id'], mc, 'localhost')
14794 kshitij.so 452
            print "CashBack is ",cashBack
14760 kshitij.so 453
            if not cashBack or cashBack.get('cash_back_status')!=1:
14801 kshitij.so 454
                info['cash_back_type'] = 0
455
                info['cash_back'] = 0
14760 kshitij.so 456
            else:
457
                if cashBack['cash_back_type'] in (1,2):
458
                    info['cash_back_type'] = cashBack['cash_back_type']
459
                    info['cash_back'] = float(cashBack['cash_back'])
460
                else:
14801 kshitij.so 461
                    info['cash_back_type'] = 0
462
                    info['cash_back'] = 0
14760 kshitij.so 463
        except Exception as cashBackEx:
14794 kshitij.so 464
            traceback.print_exc()
14760 kshitij.so 465
            print "Error calculating cashback."
466
            info['cash_back_type'] = 0
467
            info['cash_back'] = 0
14794 kshitij.so 468
        print "info is ",info
14760 kshitij.so 469
        temp.append(info)
16026 kshitij.so 470
    if item is not None:
471
        try:
472
            thread = threading.Thread(target=recomputeDeal, args = (item,))
473
            thread.daemon = True
474
            thread.start()    
475
        except:
476
            print traceback.print_exc()
477
            print "Unable to compute deal for ",skuBundleId
13829 kshitij.so 478
    return temp
479
 
13864 kshitij.so 480
def getLatestPriceById(id):
481
    item = list(get_mongo_connection().Catalog.MasterData.find({'_id':id}))
14309 kshitij.so 482
    item[0]['dealFlag'] = 0
483
    item[0]['dealType'] = 0
15266 kshitij.so 484
    item[0]['dealPoints'] = 0
485
    item[0]['manualDealThresholdPrice'] = None
14309 kshitij.so 486
    manualDeals = list(get_mongo_connection().Catalog.ManualDeals.find({'startDate':{'$lte':to_java_date(datetime.now())},'endDate':{'$gte':to_java_date(datetime.now())},'source_id':item[0]['source_id'], 'sku':item[0]['_id']}))
487
    if len(manualDeals) > 0:
488
        item[0]['dealFlag'] = 1
15266 kshitij.so 489
        item[0]['dealType'] =manualDeals[0]['dealType']
490
        item[0]['dealPoints'] = manualDeals[0]['dealPoints']
491
        item[0]['manualDealThresholdPrice'] = manualDeals[0]['dealThresholdPrice']
14367 kshitij.so 492
 
14431 kshitij.so 493
    info = returnLatestPrice(item[0], item[0]['source_id'])
14794 kshitij.so 494
    print info
14367 kshitij.so 495
    try:
14794 kshitij.so 496
        cashBack = getCashBack(item[0]['_id'], item[0]['source_id'], item[0]['category_id'], mc, 'localhost')
497
        print "CashBack is ",cashBack
14760 kshitij.so 498
        if not cashBack or cashBack.get('cash_back_status')!=1:
14801 kshitij.so 499
            info['cash_back_type'] = 0
500
            info['cash_back'] = 0
14760 kshitij.so 501
        else:
502
            if cashBack['cash_back_type'] in (1,2):
503
                info['cash_back_type'] = cashBack['cash_back_type']
504
                info['cash_back'] = float(cashBack['cash_back'])
505
            else:
14801 kshitij.so 506
                info['cash_back_type'] = 0
507
                info['cash_back'] = 0
14760 kshitij.so 508
    except Exception as cashBackEx:
14794 kshitij.so 509
        traceback.print_exc()
14760 kshitij.so 510
        print cashBackEx
511
        print "Error calculating cashback."
512
        info['cash_back_type'] = 0
513
        info['cash_back'] = 0
514
    try:
15273 kshitij.so 515
        thread = threading.Thread(target=recomputeDeal, args = (item[0],))
14367 kshitij.so 516
        thread.daemon = True
517
        thread.start()    
518
    except:
519
        print "Unable to compute deal for ",item[0]['skuBundleId']
14431 kshitij.so 520
    return info
13829 kshitij.so 521
 
14828 kshitij.so 522
def updatePriceForNotificationBundles(skuBundleId):
15266 kshitij.so 523
    itemIds = list(get_mongo_connection().Catalog.MasterData.find({'skuBundleId':skuBundleId,'priceUpdatedOn':{'$lte':to_java_date(datetime.now() - timedelta(minutes=2))},'source_id':{"$in":SOURCE_MAP.values()}}))
14828 kshitij.so 524
    for item in itemIds:
14833 kshitij.so 525
        print item['_id']
14828 kshitij.so 526
        item['dealFlag'] = 0
527
        item['dealType'] = 0
15266 kshitij.so 528
        item['dealPoints'] = 0
529
        item['manualDealThresholdPrice'] = None
14828 kshitij.so 530
        manualDeals = list(get_mongo_connection().Catalog.ManualDeals.find({'startDate':{'$lte':to_java_date(datetime.now())},'endDate':{'$gte':to_java_date(datetime.now())},'source_id':item['source_id'], 'sku':item['_id']}))
531
        if len(manualDeals) > 0:
532
            item['dealFlag'] = 1
533
            item['dealType'] =manualDeals[0]['dealType']
15266 kshitij.so 534
            item['dealPoints'] = manualDeals[0]['dealPoints']
535
            item['manualDealThresholdPrice'] = manualDeals[0]['dealThresholdPrice']
14828 kshitij.so 536
        info = returnLatestPrice(item, item['source_id'],False)
537
        print info
538
 
13829 kshitij.so 539
def main():
15956 kshitij.so 540
    print datetime.now()
16325 kshitij.so 541
    print "retuned %s"%(str(getLatestPriceById(4490)))
15956 kshitij.so 542
    print datetime.now()
13829 kshitij.so 543
if __name__=='__main__':
13971 kshitij.so 544
    main()
545