Subversion Repositories SmartDukaan

Rev

Rev 15619 | Rev 15623 | 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
15253 kshitij.so 4
from dtr.utils.utils import to_java_date, getNlcPoints
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
14121 kshitij.so 9
from dtr.utils import FlipkartScraper,NewFlipkartScraper
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
13829 kshitij.so 16
 
15174 kshitij.so 17
config_client = ConfigClient()
18
host_memCache = config_client.get_property('mem_cache_host_dtr')
19
host = config_client.get_property('mongo_dtr_host')
14324 kshitij.so 20
 
15174 kshitij.so 21
mc = MemCache(host_memCache)
22
 
23
 
13829 kshitij.so 24
con = None
14205 kshitij.so 25
SOURCE_MAP = {'AMAZON':1,'FLIPKART':2,'SNAPDEAL':3,'SAHOLIC':4}
13829 kshitij.so 26
 
27
headers = { 
28
           'User-agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11',
29
            'Accept' : 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',      
30
            'Accept-Language' : 'en-US,en;q=0.8',                     
31
            'Accept-Charset' : 'ISO-8859-1,utf-8;q=0.7,*;q=0.3'
32
        }
33
 
15619 kshitij.so 34
ignoreItems = [475,476,477,478,4490,4491,10360,10361,14893, 23165, 8682]
15608 kshitij.so 35
 
15174 kshitij.so 36
def get_mongo_connection(port=27017):
13829 kshitij.so 37
    global con
38
    if con is None:
39
        print "Establishing connection %s host and port %d" %(host,port)
40
        try:
41
            con = pymongo.MongoClient(host, port)
42
        except Exception, e:
43
            print e
44
            return None
45
    return con
46
 
14828 kshitij.so 47
def returnLatestPrice(data, source_id, ignoreLastUpdated = True):
13918 kshitij.so 48
    now = datetime.now()
13829 kshitij.so 49
    if source_id == 1:
50
        try:
13918 kshitij.so 51
            if data['identifier'] is None or len(data['identifier'].strip())==0:
13829 kshitij.so 52
                return {}
13918 kshitij.so 53
 
15615 kshitij.so 54
            if data['_id'] in ignoreItems:
55
                print "Ignored items returning for %d"%(data['_id'])
56
                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']}
57
 
58
 
14577 kshitij.so 59
            if data['dealFlag'] ==1 and data['dealType'] ==1:
60
                data['marketPlaceUrl'] = "http://www.amazon.in/dp/%s"%(data['identifier'].strip())
61
 
13918 kshitij.so 62
            try:
14828 kshitij.so 63
                if ignoreLastUpdated and data['priceUpdatedOn'] > to_java_date(now - timedelta(minutes=5)):
13918 kshitij.so 64
                    print "sku id is already updated",data['_id'] 
13920 kshitij.so 65
                    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']}
13918 kshitij.so 66
            except:
67
                pass
68
 
69
 
13829 kshitij.so 70
            url = "http://www.amazon.in/gp/offer-listing/%s/ref=olp_sort_ps"%(data['identifier'])
71
            lowestPrice = 0.0
14309 kshitij.so 72
            try:
73
                if data['dealFlag'] ==1 and data['dealType'] ==1:
74
                    print "Inside deal"
75
                    deal_url = "http://www.amazon.in/dp/%s"%(data['identifier'].strip())
76
                    print deal_url
15213 kshitij.so 77
                    dealScraperAmazon = AmazonDealScraper.AmazonScraper(True)
14309 kshitij.so 78
                    lowestPrice = dealScraperAmazon.read(deal_url)
79
                    print lowestPrice
80
                    if lowestPrice == 0:
81
                        raise
82
                else:    
15213 kshitij.so 83
                    scraperAmazon = AmazonScraper(True)
14309 kshitij.so 84
                    lowestPrice = scraperAmazon.read(url)
85
            except Exception as e:
86
                print e
15213 kshitij.so 87
                scraperAmazon = AmazonScraper(True)
14309 kshitij.so 88
                lowestPrice = scraperAmazon.read(url)
13929 kshitij.so 89
            print "LowestPrice ",lowestPrice
13829 kshitij.so 90
            inStock = 0
91
            if lowestPrice > 0:
92
                inStock = 1
93
            if lowestPrice > 0:
13971 kshitij.so 94
                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)
14309 kshitij.so 95
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'available_price':lowestPrice , 'in_stock':inStock,'dealType':data['dealType']}}, multi=True)
13829 kshitij.so 96
            else:
13929 kshitij.so 97
                lowestPrice = data['available_price']
13977 kshitij.so 98
                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)
14309 kshitij.so 99
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'in_stock':0,'dealType':data['dealType']}}, multi=True)
13918 kshitij.so 100
 
13829 kshitij.so 101
            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']}
14834 kshitij.so 102
        except Exception as e:
103
            print "Exception for _id %d and source %s"%(data['_id'], source_id)
104
            print e
13920 kshitij.so 105
            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']}
13829 kshitij.so 106
 
14203 kshitij.so 107
    elif source_id ==4:
14207 kshitij.so 108
 
14203 kshitij.so 109
        try:
14212 kshitij.so 110
            if data['identifier'] is None or len(data['identifier'].strip())==0:
111
                return {}
112
 
113
            try:
14828 kshitij.so 114
                if ignoreLastUpdated and data['priceUpdatedOn'] > to_java_date(now - timedelta(minutes=5)):
14212 kshitij.so 115
                    print "sku id is already updated",data['_id'] 
116
                    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']}
117
            except:
118
                pass
119
 
14840 kshitij.so 120
            url = "http://50.116.3.101:8080/mobileapi/dtr-pricing?id=%s"%(data['identifier'])
14212 kshitij.so 121
            lowestPrice = 0.0
122
            instock = 0
123
            req = urllib2.Request(url,headers=headers)
124
            response = urllib2.urlopen(req)
125
            json_input = response.read()
126
            response.close()
127
            priceInfo = json.loads(json_input)
128
            lowestPrice = priceInfo['response']['sellingPrice']
129
            if lowestPrice > 0:
130
                instock = 1
131
            if instock  == 1:
132
                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)
133
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'available_price':lowestPrice , 'in_stock':instock}}, multi=True)
134
            else:
135
                lowestPrice = data['available_price']
136
                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)
137
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'in_stock':instock}}, multi=True)
138
 
139
            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']}
14834 kshitij.so 140
 
141
        except Exception as e:
142
            print "Exception for _id %d and source %s"%(data['_id'], source_id)
143
            print e
14212 kshitij.so 144
            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']}
14203 kshitij.so 145
 
14207 kshitij.so 146
 
13829 kshitij.so 147
    elif source_id ==3:
148
        try:
13918 kshitij.so 149
            if data['identifier'] is None or len(data['identifier'].strip())==0:
13829 kshitij.so 150
                return {}
13918 kshitij.so 151
 
152
            try:
14828 kshitij.so 153
                if ignoreLastUpdated and data['priceUpdatedOn'] > to_java_date(now - timedelta(minutes=5)):
13920 kshitij.so 154
                    print "sku id is already updated",data['_id']
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']}
13919 kshitij.so 156
 
157
            except Exception as e:
13920 kshitij.so 158
                print "Exception snapdeal"
13919 kshitij.so 159
                print e
13918 kshitij.so 160
 
15253 kshitij.so 161
            url="http://www.snapdeal.com/acors/json/gvbps?supc=%s&catId=175"%(data['identifier'])
13829 kshitij.so 162
            req = urllib2.Request(url,headers=headers)
163
            response = urllib2.urlopen(req)
14210 kshitij.so 164
            json_input = response.read()
14188 kshitij.so 165
            response.close()
13829 kshitij.so 166
            vendorInfo = json.loads(json_input)
167
            lowestOfferPrice = 0
168
            inStock = 0
15253 kshitij.so 169
            buyBoxPrice = 0
170
            isBuyBox = 1
13829 kshitij.so 171
            for vendor in vendorInfo:
15253 kshitij.so 172
                buyBoxPrice = float(vendor['sellingPrice'])
173
                try:
174
                    buyBoxStock = vendor['buyableInventory']
175
                except:
176
                    buyBoxStock = 0
177
                if buyBoxStock > 0 and buyBoxPrice > 0:
178
                    break
179
 
180
            sortedVendorsData = sorted(vendorInfo, key=itemgetter('sellingPrice'))
181
            for sortedVendorData in sortedVendorsData:
182
                lowestOfferPrice = float(sortedVendorData['sellingPrice'])
183
                try:
184
                    stock = sortedVendorData['buyableInventory']
185
                except:
186
                    stock = 0
13829 kshitij.so 187
                if stock > 0 and lowestOfferPrice > 0:
188
                    inStock = 1
189
                    break
190
 
191
            print lowestOfferPrice
192
            print inStock
193
            print "*************"
15253 kshitij.so 194
 
195
            if buyBoxPrice != lowestOfferPrice:
196
                isBuyBox = 0
197
 
13829 kshitij.so 198
            if inStock  == 1:
15253 kshitij.so 199
                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)
13918 kshitij.so 200
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'available_price':lowestOfferPrice , 'in_stock':inStock}}, multi=True)
13829 kshitij.so 201
            else:
13929 kshitij.so 202
                lowestOfferPrice = data['available_price']
15253 kshitij.so 203
                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)
13918 kshitij.so 204
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'in_stock':inStock}}, multi=True)
205
 
13829 kshitij.so 206
            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']}
14834 kshitij.so 207
        except Exception as e:
15266 kshitij.so 208
            print traceback.print_exc()
14834 kshitij.so 209
            print "Exception for _id %d and source %s"%(data['_id'], source_id)
210
            print e
13920 kshitij.so 211
            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']}
13829 kshitij.so 212
 
213
    elif source_id == 2:
214
        try:
13918 kshitij.so 215
            if data['identifier'] is None or len(data['identifier'].strip())==0:
13829 kshitij.so 216
                return {}
13918 kshitij.so 217
 
15609 kshitij.so 218
            if data['_id'] in ignoreItems:
15608 kshitij.so 219
                print "Ignored items returning for %d"%(data['_id'])
15622 kshitij.so 220
                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']}
15608 kshitij.so 221
 
13918 kshitij.so 222
            try:
14828 kshitij.so 223
                if ignoreLastUpdated and data['priceUpdatedOn'] > to_java_date(now - timedelta(minutes=5)):
13918 kshitij.so 224
                    print "sku id is already updated",data['_id']
13920 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']} 
13918 kshitij.so 226
            except:
227
                pass
228
 
229
            lowestSp = 0
230
            inStock = 0
15253 kshitij.so 231
            buyBoxPrice = 0
232
            isBuyBox = 0
14189 kshitij.so 233
            scraperProductPage = NewFlipkartScraper.FlipkartProductPageScraper()
14121 kshitij.so 234
            try:
235
                if data['marketPlaceUrl']!="" or data['marketPlaceUrl'] !="http://www.flipkart.com/ps/%s"%(data['identifier']):
236
                    result = scraperProductPage.read(data['marketPlaceUrl'])
14124 kshitij.so 237
                    print result
14125 kshitij.so 238
                    if result.get('lowestSp')!=0:
239
                        lowestSp = result.get('lowestSp')
14121 kshitij.so 240
                        inStock = result.get('inStock')
15253 kshitij.so 241
                        buyBoxPrice = result.get('buyBoxPrice')
14121 kshitij.so 242
            except:
243
                print "Unable to scrape product page ",data['identifier']
244
            if lowestSp ==0:
245
                url = "http://www.flipkart.com/ps/%s"%(data['identifier'])
14189 kshitij.so 246
                scraperFk = FlipkartScraper.FlipkartScraper()
15253 kshitij.so 247
                vendorsData, buyBoxInfo = (scraperFk.read(url))
14121 kshitij.so 248
                sortedVendorsData = []
249
                sortedVendorsData = sorted(vendorsData, key=itemgetter('sellingPrice'))
250
                print "data",sortedVendorsData
251
                for vData in sortedVendorsData:
252
                    lowestSp = vData['sellingPrice']
253
                    break
254
                if lowestSp > 0:
255
                    inStock = 1
15253 kshitij.so 256
                buyBoxPrice = buyBoxInfo[0].get('sellingPrice')
13829 kshitij.so 257
            print lowestSp
258
            print inStock
15253 kshitij.so 259
            if buyBoxPrice is not None and buyBoxPrice == lowestSp:
260
                isBuyBox = 1
13829 kshitij.so 261
            if lowestSp > 0:
15253 kshitij.so 262
                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)
13918 kshitij.so 263
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'available_price':lowestSp , 'in_stock':inStock}}, multi=True)
13829 kshitij.so 264
            else:
13929 kshitij.so 265
                lowestSp = data['available_price']
15253 kshitij.so 266
                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)
13918 kshitij.so 267
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'in_stock':inStock}}, multi=True)
268
 
13829 kshitij.so 269
            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']}
14342 kshitij.so 270
 
14834 kshitij.so 271
        except Exception as e:
272
            print "Exception for _id %d and source %s"%(data['_id'], source_id)
273
            print e
13920 kshitij.so 274
            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']}
13829 kshitij.so 275
    else:
276
        return {}
13918 kshitij.so 277
 
15253 kshitij.so 278
def recomputePoints(item, deal):
279
    try:
280
        nlcPoints = getNlcPoints(item, deal['minNlc'], deal['maxNlc'], deal['available_price'])
281
    except:
282
        print traceback.print_exc()
283
        nlcPoints = deal['nlcPoints']
284
    if item['manualDealThresholdPrice'] >= deal['available_price']:
285
        dealPoints = item['dealPoints']
286
    else:
287
        dealPoints = 0
288
    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']}})
289
 
15266 kshitij.so 290
 
291
def populateNegativeDeals():
292
    negativeDeals = get_mongo_connection().Catalog.NegativeDeals.find().distinct('sku')
293
    mc.set("negative_deals", negativeDeals, 600)
294
 
295
def recomputeDeal(item):
13918 kshitij.so 296
    """Lets recompute deal for this bundle"""
15266 kshitij.so 297
    print "Recomputing for bundleId",item.get('skuBundleId')
298
    skuBundleId = item['skuBundleId']
13829 kshitij.so 299
 
13918 kshitij.so 300
    similarItems = list(get_mongo_connection().Catalog.Deals.find({'skuBundleId':skuBundleId}).sort([('available_price',pymongo.ASCENDING)]))
301
    bestPrice = float("inf")
302
    bestOne = None
303
    bestSellerPoints = 0
304
    toUpdate = []
305
    for similarItem in similarItems:
15266 kshitij.so 306
        if similarItem['_id'] == item['_id']:
307
            recomputePoints(item, similarItem)
14332 kshitij.so 308
        if mc.get("negative_deals") is None:
14324 kshitij.so 309
            populateNegativeDeals()
14332 kshitij.so 310
        if similarItem['in_stock'] == 0 or similarItem['maxprice'] is None or similarItem['maxprice'] < similarItem['available_price'] or similarItem['_id'] in mc.get("negative_deals"):
13918 kshitij.so 311
            get_mongo_connection().Catalog.Deals.update({ '_id' : similarItem['_id'] }, {'$set':{'showDeal':0 }})
312
            continue
313
        if similarItem['available_price'] < bestPrice:
314
            bestOne = similarItem
315
            bestPrice = similarItem['available_price']
316
            bestSellerPoints = similarItem['bestSellerPoints']
317
        elif similarItem['available_price'] == bestPrice and bestSellerPoints < similarItem['bestSellerPoints']:
318
            bestOne = similarItem
319
            bestPrice = similarItem['available_price']
320
            bestSellerPoints = similarItem['bestSellerPoints']
321
        else:
322
            pass
323
    if bestOne is not None:
324
        for similarItem in similarItems:
325
            toUpdate.append(similarItem['_id'])
326
        toUpdate.remove(bestOne['_id'])
327
        get_mongo_connection().Catalog.Deals.update({ '_id' : bestOne['_id'] }, {'$set':{'showDeal':1 }})
328
    if len(toUpdate) > 0:
329
        get_mongo_connection().Catalog.Deals.update({ '_id' : { "$in": toUpdate } }, {'$set':{'showDeal':0 }},upsert=False, multi=True)
14342 kshitij.so 330
 
331
    print "Done with recomputing"
13829 kshitij.so 332
 
333
def getLatestPrice(skuBundleId, source_id):
334
    temp = []
335
    itemIds = list(get_mongo_connection().Catalog.MasterData.find({'skuBundleId':skuBundleId,'source_id' : source_id}))
336
    for item in itemIds:
14309 kshitij.so 337
        item['dealFlag'] = 0
338
        item['dealType'] = 0
15266 kshitij.so 339
        item['dealPoints'] = 0
340
        item['manualDealThresholdPrice'] = None
15187 kshitij.so 341
        if item['source_id'] ==3:
342
            item['marketPlaceUrl'] = item['marketPlaceUrl']+'?supc='+item.get('identifier')
14309 kshitij.so 343
        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']}))
344
        if len(manualDeals) > 0:
345
            item['dealFlag'] = 1
14760 kshitij.so 346
            item['dealType'] =manualDeals[0]['dealType']
15266 kshitij.so 347
            item['dealPoints'] = manualDeals[0]['dealPoints']
348
            item['manualDealThresholdPrice'] = manualDeals[0]['dealThresholdPrice']
14760 kshitij.so 349
        info = returnLatestPrice(item, source_id)
14794 kshitij.so 350
        print info
14760 kshitij.so 351
        try:
352
            cashBack = getCashBack(item['_id'], item['source_id'], item['category_id'], mc, 'localhost')
14794 kshitij.so 353
            print "CashBack is ",cashBack
14760 kshitij.so 354
            if not cashBack or cashBack.get('cash_back_status')!=1:
14801 kshitij.so 355
                info['cash_back_type'] = 0
356
                info['cash_back'] = 0
14760 kshitij.so 357
            else:
358
                if cashBack['cash_back_type'] in (1,2):
359
                    info['cash_back_type'] = cashBack['cash_back_type']
360
                    info['cash_back'] = float(cashBack['cash_back'])
361
                else:
14801 kshitij.so 362
                    info['cash_back_type'] = 0
363
                    info['cash_back'] = 0
14760 kshitij.so 364
        except Exception as cashBackEx:
14794 kshitij.so 365
            traceback.print_exc()
14760 kshitij.so 366
            print "Error calculating cashback."
367
            info['cash_back_type'] = 0
368
            info['cash_back'] = 0
14794 kshitij.so 369
        print "info is ",info
14760 kshitij.so 370
        temp.append(info)
14367 kshitij.so 371
    try:
15266 kshitij.so 372
        thread = threading.Thread(target=recomputeDeal, args = (item,))
14367 kshitij.so 373
        thread.daemon = True
374
        thread.start()    
375
    except:
15273 kshitij.so 376
        print traceback.print_exc()
14367 kshitij.so 377
        print "Unable to compute deal for ",skuBundleId
13829 kshitij.so 378
    return temp
379
 
13864 kshitij.so 380
def getLatestPriceById(id):
381
    item = list(get_mongo_connection().Catalog.MasterData.find({'_id':id}))
14309 kshitij.so 382
    item[0]['dealFlag'] = 0
383
    item[0]['dealType'] = 0
15266 kshitij.so 384
    item[0]['dealPoints'] = 0
385
    item[0]['manualDealThresholdPrice'] = None
14309 kshitij.so 386
    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']}))
387
    if len(manualDeals) > 0:
388
        item[0]['dealFlag'] = 1
15266 kshitij.so 389
        item[0]['dealType'] =manualDeals[0]['dealType']
390
        item[0]['dealPoints'] = manualDeals[0]['dealPoints']
391
        item[0]['manualDealThresholdPrice'] = manualDeals[0]['dealThresholdPrice']
14367 kshitij.so 392
 
14431 kshitij.so 393
    info = returnLatestPrice(item[0], item[0]['source_id'])
14794 kshitij.so 394
    print info
14367 kshitij.so 395
    try:
14794 kshitij.so 396
        cashBack = getCashBack(item[0]['_id'], item[0]['source_id'], item[0]['category_id'], mc, 'localhost')
397
        print "CashBack is ",cashBack
14760 kshitij.so 398
        if not cashBack or cashBack.get('cash_back_status')!=1:
14801 kshitij.so 399
            info['cash_back_type'] = 0
400
            info['cash_back'] = 0
14760 kshitij.so 401
        else:
402
            if cashBack['cash_back_type'] in (1,2):
403
                info['cash_back_type'] = cashBack['cash_back_type']
404
                info['cash_back'] = float(cashBack['cash_back'])
405
            else:
14801 kshitij.so 406
                info['cash_back_type'] = 0
407
                info['cash_back'] = 0
14760 kshitij.so 408
    except Exception as cashBackEx:
14794 kshitij.so 409
        traceback.print_exc()
14760 kshitij.so 410
        print cashBackEx
411
        print "Error calculating cashback."
412
        info['cash_back_type'] = 0
413
        info['cash_back'] = 0
414
    try:
15273 kshitij.so 415
        thread = threading.Thread(target=recomputeDeal, args = (item[0],))
14367 kshitij.so 416
        thread.daemon = True
417
        thread.start()    
418
    except:
419
        print "Unable to compute deal for ",item[0]['skuBundleId']
14431 kshitij.so 420
    return info
13829 kshitij.so 421
 
14828 kshitij.so 422
def updatePriceForNotificationBundles(skuBundleId):
15266 kshitij.so 423
    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 424
    for item in itemIds:
14833 kshitij.so 425
        print item['_id']
14828 kshitij.so 426
        item['dealFlag'] = 0
427
        item['dealType'] = 0
15266 kshitij.so 428
        item['dealPoints'] = 0
429
        item['manualDealThresholdPrice'] = None
14828 kshitij.so 430
        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']}))
431
        if len(manualDeals) > 0:
432
            item['dealFlag'] = 1
433
            item['dealType'] =manualDeals[0]['dealType']
15266 kshitij.so 434
            item['dealPoints'] = manualDeals[0]['dealPoints']
435
            item['manualDealThresholdPrice'] = manualDeals[0]['dealThresholdPrice']
14828 kshitij.so 436
        info = returnLatestPrice(item, item['source_id'],False)
437
        print info
438
 
13829 kshitij.so 439
def main():
15615 kshitij.so 440
    print "retuned %s"%(str(getLatestPrice(1132,1)))
13829 kshitij.so 441
 
442
if __name__=='__main__':
13971 kshitij.so 443
    main()
444