Subversion Repositories SmartDukaan

Rev

Rev 16178 | Rev 16206 | 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
 
15902 kshitij.so 35
ignoreItems = []
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
 
153
            try:
14828 kshitij.so 154
                if ignoreLastUpdated and data['priceUpdatedOn'] > to_java_date(now - timedelta(minutes=5)):
13920 kshitij.so 155
                    print "sku id is already updated",data['_id']
16205 kshitij.so 156
                    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 157
 
158
            except Exception as e:
13920 kshitij.so 159
                print "Exception snapdeal"
13919 kshitij.so 160
                print e
13918 kshitij.so 161
 
15819 kshitij.so 162
            url="http://www.snapdeal.com/acors/json/v2/gvbps?supc=%s&catUrl=&bn=&catId=175&start=0&count=10000"%(data['identifier'])
13829 kshitij.so 163
            req = urllib2.Request(url,headers=headers)
164
            response = urllib2.urlopen(req)
16065 kshitij.so 165
            snapdeal_data = response.read()
166
            encoding =  chardet.detect(snapdeal_data)
167
            try:
168
                snapdeal_data = snapdeal_data.decode(encoding.get('encoding'))
169
            except:
170
                snapdeal_data = snapdeal_data.decode(encoding.get('latin-1'))
171
            vendorInfo = json.loads(snapdeal_data)
14188 kshitij.so 172
            response.close()
13829 kshitij.so 173
            lowestOfferPrice = 0
174
            inStock = 0
15253 kshitij.so 175
            buyBoxPrice = 0
176
            isBuyBox = 1
15819 kshitij.so 177
            try:
178
                buyBoxStock = vendorInfo['primaryVendor']['buyableInventory']
179
                if buyBoxStock >0:
180
                    buyBoxPrice = vendorInfo['primaryVendor']['sellingPrice']
181
            except:
182
                pass
16065 kshitij.so 183
            print "buy box stock ",buyBoxStock
184
            print "bux box price ",buyBoxPrice
15819 kshitij.so 185
            sortedVendorsData = sorted(vendorInfo['vendors'], key=itemgetter('sellingPrice'))
15253 kshitij.so 186
            for sortedVendorData in sortedVendorsData:
187
                lowestOfferPrice = float(sortedVendorData['sellingPrice'])
188
                try:
189
                    stock = sortedVendorData['buyableInventory']
190
                except:
191
                    stock = 0
13829 kshitij.so 192
                if stock > 0 and lowestOfferPrice > 0:
193
                    inStock = 1
194
                    break
195
 
196
            print lowestOfferPrice
197
            print inStock
198
            print "*************"
15253 kshitij.so 199
 
200
            if buyBoxPrice != lowestOfferPrice:
201
                isBuyBox = 0
202
 
13829 kshitij.so 203
            if inStock  == 1:
15253 kshitij.so 204
                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 205
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'available_price':lowestOfferPrice , 'in_stock':inStock,'codAvailable':data['codAvailable']}}, multi=True)
13829 kshitij.so 206
            else:
13929 kshitij.so 207
                lowestOfferPrice = data['available_price']
15253 kshitij.so 208
                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 209
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'in_stock':inStock,'codAvailable':data['codAvailable']}}, multi=True)
13918 kshitij.so 210
 
16117 kshitij.so 211
            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 212
        except Exception as e:
15266 kshitij.so 213
            print traceback.print_exc()
14834 kshitij.so 214
            print "Exception for _id %d and source %s"%(data['_id'], source_id)
215
            print e
16117 kshitij.so 216
            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 217
 
218
    elif source_id == 2:
219
        try:
13918 kshitij.so 220
            if data['identifier'] is None or len(data['identifier'].strip())==0:
13829 kshitij.so 221
                return {}
13918 kshitij.so 222
 
15609 kshitij.so 223
            if data['_id'] in ignoreItems:
15608 kshitij.so 224
                print "Ignored items returning for %d"%(data['_id'])
16117 kshitij.so 225
                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 226
 
13918 kshitij.so 227
            try:
14828 kshitij.so 228
                if ignoreLastUpdated and data['priceUpdatedOn'] > to_java_date(now - timedelta(minutes=5)):
13918 kshitij.so 229
                    print "sku id is already updated",data['_id']
16117 kshitij.so 230
                    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 231
            except:
232
                pass
233
 
234
            lowestSp = 0
235
            inStock = 0
15253 kshitij.so 236
            buyBoxPrice = 0
237
            isBuyBox = 0
14189 kshitij.so 238
            scraperProductPage = NewFlipkartScraper.FlipkartProductPageScraper()
14121 kshitij.so 239
            try:
240
                if data['marketPlaceUrl']!="" or data['marketPlaceUrl'] !="http://www.flipkart.com/ps/%s"%(data['identifier']):
241
                    result = scraperProductPage.read(data['marketPlaceUrl'])
14124 kshitij.so 242
                    print result
14125 kshitij.so 243
                    if result.get('lowestSp')!=0:
244
                        lowestSp = result.get('lowestSp')
14121 kshitij.so 245
                        inStock = result.get('inStock')
15253 kshitij.so 246
                        buyBoxPrice = result.get('buyBoxPrice')
14121 kshitij.so 247
            except:
248
                print "Unable to scrape product page ",data['identifier']
249
            if lowestSp ==0:
250
                url = "http://www.flipkart.com/ps/%s"%(data['identifier'])
14189 kshitij.so 251
                scraperFk = FlipkartScraper.FlipkartScraper()
15253 kshitij.so 252
                vendorsData, buyBoxInfo = (scraperFk.read(url))
14121 kshitij.so 253
                sortedVendorsData = []
254
                sortedVendorsData = sorted(vendorsData, key=itemgetter('sellingPrice'))
255
                print "data",sortedVendorsData
256
                for vData in sortedVendorsData:
257
                    lowestSp = vData['sellingPrice']
258
                    break
259
                if lowestSp > 0:
260
                    inStock = 1
15975 kshitij.so 261
                try:
262
                    buyBoxPrice = buyBoxInfo[0].get('sellingPrice')
263
                except:
264
                    buyBoxPrice = None
13829 kshitij.so 265
            print lowestSp
266
            print inStock
15253 kshitij.so 267
            if buyBoxPrice is not None and buyBoxPrice == lowestSp:
268
                isBuyBox = 1
13829 kshitij.so 269
            if lowestSp > 0:
15253 kshitij.so 270
                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 271
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'available_price':lowestSp , 'in_stock':inStock,'codAvailable':data['codAvailable']}}, multi=True)
13829 kshitij.so 272
            else:
13929 kshitij.so 273
                lowestSp = data['available_price']
15253 kshitij.so 274
                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 275
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'in_stock':inStock,'codAvailable':data['codAvailable']}}, multi=True)
13918 kshitij.so 276
 
16117 kshitij.so 277
            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 278
 
14834 kshitij.so 279
        except Exception as e:
280
            print "Exception for _id %d and source %s"%(data['_id'], source_id)
281
            print e
16117 kshitij.so 282
            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 283
 
284
    elif source_id == 5:
285
        try:
286
            if data['_id'] in ignoreItems:
287
                print "Ignored items returning for %d"%(data['_id'])
16117 kshitij.so 288
                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 289
 
290
            try:
291
                if ignoreLastUpdated and data['priceUpdatedOn'] > to_java_date(now - timedelta(minutes=5)):
292
                    print "sku id is already updated",data['_id'] 
16117 kshitij.so 293
                    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 294
            except:
295
                pass
296
 
297
 
298
            url = data['marketPlaceUrl']
299
            lowestPrice = 0.0
300
            try:
301
                sc = ShopCluesScraper.ShopCluesScraper()
15951 kshitij.so 302
                url = transformUrl(url, 5)
15902 kshitij.so 303
                productInfo = sc.read(url)
304
            except Exception as e:
16177 kshitij.so 305
                traceback.print_exc()
16176 kshitij.so 306
                productInfo = {}
16022 kshitij.so 307
                productInfo['price'] = 0.0
308
                productInfo['inStock'] = 0
309
                productInfo['isCod'] = 0
16178 kshitij.so 310
                productInfo['coupon'] = ""
16022 kshitij.so 311
 
15902 kshitij.so 312
            print "LowestPrice ",productInfo['price']
313
            if productInfo['price'] > 0 and productInfo['inStock']==1:
314
                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 315
                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 316
            else:
317
                lowestPrice = data['available_price']
318
                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 319
                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 320
 
16117 kshitij.so 321
            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 322
        except Exception as e:
323
            print "Exception for _id %d and source %s"%(data['_id'], source_id)
16177 kshitij.so 324
            traceback.print_exc()
16117 kshitij.so 325
            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 326
 
13829 kshitij.so 327
    else:
328
        return {}
15902 kshitij.so 329
 
330
 
13918 kshitij.so 331
 
15253 kshitij.so 332
def recomputePoints(item, deal):
333
    try:
334
        nlcPoints = getNlcPoints(item, deal['minNlc'], deal['maxNlc'], deal['available_price'])
335
    except:
336
        print traceback.print_exc()
337
        nlcPoints = deal['nlcPoints']
338
    if item['manualDealThresholdPrice'] >= deal['available_price']:
339
        dealPoints = item['dealPoints']
340
    else:
341
        dealPoints = 0
342
    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']}})
343
 
15266 kshitij.so 344
 
345
def populateNegativeDeals():
346
    negativeDeals = get_mongo_connection().Catalog.NegativeDeals.find().distinct('sku')
347
    mc.set("negative_deals", negativeDeals, 600)
348
 
349
def recomputeDeal(item):
16017 kshitij.so 350
 
13918 kshitij.so 351
    """Lets recompute deal for this bundle"""
15266 kshitij.so 352
    print "Recomputing for bundleId",item.get('skuBundleId')
353
    skuBundleId = item['skuBundleId']
13829 kshitij.so 354
 
13918 kshitij.so 355
    similarItems = list(get_mongo_connection().Catalog.Deals.find({'skuBundleId':skuBundleId}).sort([('available_price',pymongo.ASCENDING)]))
356
    bestPrice = float("inf")
357
    bestOne = None
358
    bestSellerPoints = 0
359
    toUpdate = []
16017 kshitij.so 360
    prepaidBestPrice = float("inf")
361
    prepaidBestOne = None
362
    prepaidBestSellerPoints = 0
13918 kshitij.so 363
    for similarItem in similarItems:
15266 kshitij.so 364
        if similarItem['_id'] == item['_id']:
365
            recomputePoints(item, similarItem)
16017 kshitij.so 366
        if similarItem['codAvailable'] ==1:
367
            if mc.get("negative_deals") is None:
368
                populateNegativeDeals()
16172 kshitij.so 369
            if similarItem['in_stock'] == 0  or similarItem['_id'] in mc.get("negative_deals"):
16017 kshitij.so 370
                get_mongo_connection().Catalog.Deals.update({ '_id' : similarItem['_id'] }, {'$set':{'showDeal':0, 'prepaidDeal':0 }})
371
                continue
372
            if similarItem['source_id'] == SOURCE_MAP.get('SHOPCLUES.COM') and similarItem['rank']==0:
373
                get_mongo_connection().Catalog.Deals.update({ '_id' : similarItem['_id'] }, {'$set':{'showDeal':0,'prepaidDeal':0 }})
374
                continue
375
            if similarItem['available_price'] < bestPrice:
376
                bestOne = similarItem
377
                bestPrice = similarItem['available_price']
378
                bestSellerPoints = similarItem['bestSellerPoints']
379
            elif similarItem['available_price'] == bestPrice and bestSellerPoints < similarItem['bestSellerPoints']:
380
                bestOne = similarItem
381
                bestPrice = similarItem['available_price']
382
                bestSellerPoints = similarItem['bestSellerPoints']
383
            else:
384
                pass
13918 kshitij.so 385
        else:
16017 kshitij.so 386
            if mc.get("negative_deals") is None:
387
                populateNegativeDeals()
16172 kshitij.so 388
            if similarItem['in_stock'] == 0  or similarItem['_id'] in mc.get("negative_deals"):
16017 kshitij.so 389
                get_mongo_connection().Catalog.Deals.update({ '_id' : similarItem['_id'] }, {'$set':{'showDeal':0, 'prepaidDeal':0 }})
390
                continue
391
            if similarItem['source_id'] == SOURCE_MAP.get('SHOPCLUES.COM') and similarItem['rank']==0:
392
                get_mongo_connection().Catalog.Deals.update({ '_id' : similarItem['_id'] }, {'$set':{'showDeal':0,'prepaidDeal':0 }})
393
                continue
394
            if similarItem['available_price'] < prepaidBestPrice:
395
                prepaidBestOne = similarItem
396
                prepaidBestPrice = similarItem['available_price']
397
                prepaidBestSellerPoints = similarItem['bestSellerPoints']
398
            elif similarItem['available_price'] == prepaidBestPrice and prepaidBestSellerPoints < similarItem['bestSellerPoints']:
399
                prepaidBestOne = similarItem
400
                prepaidBestPrice = similarItem['available_price']
401
                prepaidBestSellerPoints = similarItem['bestSellerPoints']
402
            else:
403
                pass
16024 kshitij.so 404
    print "bestOne ", bestOne
405
    print "prepaid best one",  prepaidBestOne
406
    if bestOne is not None or prepaidBestOne is not None:
13918 kshitij.so 407
        for similarItem in similarItems:
408
            toUpdate.append(similarItem['_id'])
16023 kshitij.so 409
        if bestOne is not None:
410
            toUpdate.remove(bestOne['_id'])
411
            get_mongo_connection().Catalog.Deals.update({ '_id' : bestOne['_id'] }, {'$set':{'showDeal':1,'prepaidDeal':0 }})
412
        if prepaidBestOne is not None:
16069 kshitij.so 413
            if bestOne is not None:
414
                if prepaidBestOne['available_price'] < bestOne['available_price']: 
415
                    toUpdate.remove(prepaidBestOne['_id'])
416
                    get_mongo_connection().Catalog.Deals.update({ '_id' : prepaidBestOne['_id'] }, {'$set':{'showDeal':0,'prepaidDeal':1 }})
16072 kshitij.so 417
            else:
418
                toUpdate.remove(prepaidBestOne['_id'])
419
                get_mongo_connection().Catalog.Deals.update({ '_id' : prepaidBestOne['_id'] }, {'$set':{'showDeal':0,'prepaidDeal':1 }})
13918 kshitij.so 420
    if len(toUpdate) > 0:
16017 kshitij.so 421
        get_mongo_connection().Catalog.Deals.update({ '_id' : { "$in": toUpdate } }, {'$set':{'showDeal':0,'prepaidDeal':0 }},upsert=False, multi=True)
422
 
14342 kshitij.so 423
    print "Done with recomputing"
13829 kshitij.so 424
 
425
def getLatestPrice(skuBundleId, source_id):
426
    temp = []
427
    itemIds = list(get_mongo_connection().Catalog.MasterData.find({'skuBundleId':skuBundleId,'source_id' : source_id}))
16026 kshitij.so 428
    item = None
13829 kshitij.so 429
    for item in itemIds:
14309 kshitij.so 430
        item['dealFlag'] = 0
431
        item['dealType'] = 0
15266 kshitij.so 432
        item['dealPoints'] = 0
433
        item['manualDealThresholdPrice'] = None
15912 kshitij.so 434
        if item['source_id'] ==5 and item['rank'] == 0:
435
            continue
15187 kshitij.so 436
        if item['source_id'] ==3:
437
            item['marketPlaceUrl'] = item['marketPlaceUrl']+'?supc='+item.get('identifier')
14309 kshitij.so 438
        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']}))
439
        if len(manualDeals) > 0:
440
            item['dealFlag'] = 1
14760 kshitij.so 441
            item['dealType'] =manualDeals[0]['dealType']
15266 kshitij.so 442
            item['dealPoints'] = manualDeals[0]['dealPoints']
443
            item['manualDealThresholdPrice'] = manualDeals[0]['dealThresholdPrice']
14760 kshitij.so 444
        info = returnLatestPrice(item, source_id)
14794 kshitij.so 445
        print info
14760 kshitij.so 446
        try:
447
            cashBack = getCashBack(item['_id'], item['source_id'], item['category_id'], mc, 'localhost')
14794 kshitij.so 448
            print "CashBack is ",cashBack
14760 kshitij.so 449
            if not cashBack or cashBack.get('cash_back_status')!=1:
14801 kshitij.so 450
                info['cash_back_type'] = 0
451
                info['cash_back'] = 0
14760 kshitij.so 452
            else:
453
                if cashBack['cash_back_type'] in (1,2):
454
                    info['cash_back_type'] = cashBack['cash_back_type']
455
                    info['cash_back'] = float(cashBack['cash_back'])
456
                else:
14801 kshitij.so 457
                    info['cash_back_type'] = 0
458
                    info['cash_back'] = 0
14760 kshitij.so 459
        except Exception as cashBackEx:
14794 kshitij.so 460
            traceback.print_exc()
14760 kshitij.so 461
            print "Error calculating cashback."
462
            info['cash_back_type'] = 0
463
            info['cash_back'] = 0
14794 kshitij.so 464
        print "info is ",info
14760 kshitij.so 465
        temp.append(info)
16026 kshitij.so 466
    if item is not None:
467
        try:
468
            thread = threading.Thread(target=recomputeDeal, args = (item,))
469
            thread.daemon = True
470
            thread.start()    
471
        except:
472
            print traceback.print_exc()
473
            print "Unable to compute deal for ",skuBundleId
13829 kshitij.so 474
    return temp
475
 
13864 kshitij.so 476
def getLatestPriceById(id):
477
    item = list(get_mongo_connection().Catalog.MasterData.find({'_id':id}))
14309 kshitij.so 478
    item[0]['dealFlag'] = 0
479
    item[0]['dealType'] = 0
15266 kshitij.so 480
    item[0]['dealPoints'] = 0
481
    item[0]['manualDealThresholdPrice'] = None
14309 kshitij.so 482
    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']}))
483
    if len(manualDeals) > 0:
484
        item[0]['dealFlag'] = 1
15266 kshitij.so 485
        item[0]['dealType'] =manualDeals[0]['dealType']
486
        item[0]['dealPoints'] = manualDeals[0]['dealPoints']
487
        item[0]['manualDealThresholdPrice'] = manualDeals[0]['dealThresholdPrice']
14367 kshitij.so 488
 
14431 kshitij.so 489
    info = returnLatestPrice(item[0], item[0]['source_id'])
14794 kshitij.so 490
    print info
14367 kshitij.so 491
    try:
14794 kshitij.so 492
        cashBack = getCashBack(item[0]['_id'], item[0]['source_id'], item[0]['category_id'], mc, 'localhost')
493
        print "CashBack is ",cashBack
14760 kshitij.so 494
        if not cashBack or cashBack.get('cash_back_status')!=1:
14801 kshitij.so 495
            info['cash_back_type'] = 0
496
            info['cash_back'] = 0
14760 kshitij.so 497
        else:
498
            if cashBack['cash_back_type'] in (1,2):
499
                info['cash_back_type'] = cashBack['cash_back_type']
500
                info['cash_back'] = float(cashBack['cash_back'])
501
            else:
14801 kshitij.so 502
                info['cash_back_type'] = 0
503
                info['cash_back'] = 0
14760 kshitij.so 504
    except Exception as cashBackEx:
14794 kshitij.so 505
        traceback.print_exc()
14760 kshitij.so 506
        print cashBackEx
507
        print "Error calculating cashback."
508
        info['cash_back_type'] = 0
509
        info['cash_back'] = 0
510
    try:
15273 kshitij.so 511
        thread = threading.Thread(target=recomputeDeal, args = (item[0],))
14367 kshitij.so 512
        thread.daemon = True
513
        thread.start()    
514
    except:
515
        print "Unable to compute deal for ",item[0]['skuBundleId']
14431 kshitij.so 516
    return info
13829 kshitij.so 517
 
14828 kshitij.so 518
def updatePriceForNotificationBundles(skuBundleId):
15266 kshitij.so 519
    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 520
    for item in itemIds:
14833 kshitij.so 521
        print item['_id']
14828 kshitij.so 522
        item['dealFlag'] = 0
523
        item['dealType'] = 0
15266 kshitij.so 524
        item['dealPoints'] = 0
525
        item['manualDealThresholdPrice'] = None
14828 kshitij.so 526
        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']}))
527
        if len(manualDeals) > 0:
528
            item['dealFlag'] = 1
529
            item['dealType'] =manualDeals[0]['dealType']
15266 kshitij.so 530
            item['dealPoints'] = manualDeals[0]['dealPoints']
531
            item['manualDealThresholdPrice'] = manualDeals[0]['dealThresholdPrice']
14828 kshitij.so 532
        info = returnLatestPrice(item, item['source_id'],False)
533
        print info
534
 
13829 kshitij.so 535
def main():
15956 kshitij.so 536
    print datetime.now()
16176 kshitij.so 537
    print "retuned %s"%(str(getLatestPriceById(24010)))
15956 kshitij.so 538
    print datetime.now()
13829 kshitij.so 539
if __name__=='__main__':
13971 kshitij.so 540
    main()
541