Subversion Repositories SmartDukaan

Rev

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