Subversion Repositories SmartDukaan

Rev

Rev 20347 | Rev 20367 | 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
20347 kshitij.so 4
from dtr.utils.utils import to_java_date, getNlcPoints, transformUrl, DEAL_PRIORITY
13918 kshitij.so 5
from datetime import datetime, timedelta
13829 kshitij.so 6
from operator import itemgetter
20313 kshitij.so 7
from shop2020.model.v1.catalog.script import AmazonAsyncScraper
16410 kshitij.so 8
from dtr.utils import FlipkartScraper,NewFlipkartScraper, ShopCluesScraper, \
17013 manish.sha 9
PaytmOfferScraper, PaytmScraper, HomeShop18Scraper
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
16415 kshitij.so 17
from dtr.CouponMaster import addToPaytmMaster
19210 kshitij.so 18
from math import floor
13829 kshitij.so 19
 
15174 kshitij.so 20
config_client = ConfigClient()
21
host_memCache = config_client.get_property('mem_cache_host_dtr')
22
host = config_client.get_property('mongo_dtr_host')
14324 kshitij.so 23
 
18722 kshitij.so 24
saholicPricingHost = config_client.get_property('dtr_pricing_host')
25
 
15174 kshitij.so 26
mc = MemCache(host_memCache)
27
 
28
 
15902 kshitij.so 29
con  = None
17043 kshitij.so 30
SOURCE_MAP = {'AMAZON':1,'FLIPKART':2,'SNAPDEAL':3,'SAHOLIC':4, 'SHOPCLUES.COM':5,'PAYTM.COM':6,'HOMESHOP18':7}
13829 kshitij.so 31
 
32
headers = { 
33
           'User-agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11',
34
            'Accept' : 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',      
35
            'Accept-Language' : 'en-US,en;q=0.8',                     
36
            'Accept-Charset' : 'ISO-8859-1,utf-8;q=0.7,*;q=0.3'
37
        }
38
 
20313 kshitij.so 39
amScraper = AmazonAsyncScraper.Products("AKIAII3SGRXBJDPCHSGQ", "B92xTbNBTYygbGs98w01nFQUhbec1pNCkCsKVfpg", "AF6E3O0VE0X4D")
40
marketplaceId = 'A21TJRUUN4KGV'
15608 kshitij.so 41
 
15174 kshitij.so 42
def get_mongo_connection(port=27017):
13829 kshitij.so 43
    global con
44
    if con is None:
45
        print "Establishing connection %s host and port %d" %(host,port)
46
        try:
47
            con = pymongo.MongoClient(host, port)
48
        except Exception, e:
49
            print e
50
            return None
51
    return con
52
 
19153 kshitij.so 53
def calculateCashBack(data, inputPrice):
54
    try:
55
        cashBack = getCashBack(data['_id'], data['source_id'], data['category_id'], mc, 'localhost')
56
        print "CashBack is ",cashBack
57
        if not cashBack or cashBack.get('cash_back_status')!=1:
58
            data['cash_back_type'] = 0
59
            data['cash_back'] = 0
60
        else:
61
            if cashBack['cash_back_type'] in (1,2):
62
 
63
                if cashBack.get('maxCashBack') is not None:
64
 
65
                    if cashBack.get('cash_back_type') ==1 and (float(cashBack.get('cash_back'))*data['available_price'])/100 > cashBack.get('maxCashBack'):
66
                        cashBack['cash_back_type'] = 2
67
                        cashBack['cash_back'] = cashBack['maxCashBack']
68
                    elif cashBack.get('cash_back_type') ==2 and cashBack.get('cash_back') > cashBack.get('maxCashBack'):
69
                        cashBack['cash_back'] = cashBack['maxCashBack']
70
                    else:
71
                        pass
72
 
73
                data['cash_back_type'] = cashBack['cash_back_type']
74
                data['cash_back'] = float(cashBack['cash_back'])
75
            else:
76
                data['cash_back_type'] = 0
77
                data['cash_back'] = 0
78
    except Exception as cashBackEx:
79
        traceback.print_exc()
80
        print "Error calculating cashback."
81
        data['cash_back_type'] = 0
82
        data['cash_back'] = 0
83
 
84
    if data['cash_back_type'] == 1:
19210 kshitij.so 85
        data['netPriceAfterCashBack'] = inputPrice - floor(float(inputPrice)*data['cash_back']/100)
19153 kshitij.so 86
    elif data['cash_back_type'] == 2:
87
        data['netPriceAfterCashBack'] = inputPrice - data['cash_back']
88
    else:
89
        data['netPriceAfterCashBack'] = inputPrice
90
 
91
    return data
92
 
14828 kshitij.so 93
def returnLatestPrice(data, source_id, ignoreLastUpdated = True):
13918 kshitij.so 94
    now = datetime.now()
13829 kshitij.so 95
    if source_id == 1:
96
        try:
20313 kshitij.so 97
            if data['identifier'] is None or len(data['identifier'].strip()) !=10:
13829 kshitij.so 98
                return {}
13918 kshitij.so 99
 
19153 kshitij.so 100
            if data['dealFlag'] ==1 and data['dealType'] ==1:
101
                data['marketPlaceUrl'] = data['dealUrl'].strip()
102
 
103
 
16500 kshitij.so 104
            if data.get('ignorePricing') ==1:
16117 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'],'coupon':data['coupon'], 'codAvailable':data['codAvailable'], 'tagline': data['tagline'], 'offer': data['offer']}
15615 kshitij.so 106
 
13918 kshitij.so 107
            try:
14828 kshitij.so 108
                if ignoreLastUpdated and data['priceUpdatedOn'] > to_java_date(now - timedelta(minutes=5)):
13918 kshitij.so 109
                    print "sku id is already updated",data['_id'] 
16117 kshitij.so 110
                    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 111
            except:
112
                pass
113
 
114
 
13829 kshitij.so 115
            lowestPrice = 0.0
20313 kshitij.so 116
            asinPricingMap = amScraper.get_competitive_pricing_for_asin(marketplaceId, [data['identifier'].strip().upper()])
20314 kshitij.so 117
            print "asinPricingMap ",asinPricingMap
20313 kshitij.so 118
            lowestPrice = asinPricingMap.get(data['identifier'].strip().upper()) 
13929 kshitij.so 119
            print "LowestPrice ",lowestPrice
13829 kshitij.so 120
            inStock = 0
121
            if lowestPrice > 0:
122
                inStock = 1
123
            if lowestPrice > 0:
13971 kshitij.so 124
                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 125
                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 126
            else:
13929 kshitij.so 127
                lowestPrice = data['available_price']
13977 kshitij.so 128
                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 129
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'in_stock':0,'dealType':data['dealType'],'codAvailable':data['codAvailable']}}, multi=True)
13918 kshitij.so 130
 
16117 kshitij.so 131
            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 132
        except Exception as e:
133
            print "Exception for _id %d and source %s"%(data['_id'], source_id)
134
            print e
16117 kshitij.so 135
            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 136
 
14203 kshitij.so 137
    elif source_id ==4:
14207 kshitij.so 138
 
14203 kshitij.so 139
        try:
14212 kshitij.so 140
            if data['identifier'] is None or len(data['identifier'].strip())==0:
141
                return {}
142
 
16500 kshitij.so 143
            if data.get('ignorePricing') ==1:
18739 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'], 'coupon':data['coupon'], 'codAvailable':data['codAvailable'], 'tagline': data['tagline'], 'offer': data['offer'], 'packQuantity':data['quantity']}
16500 kshitij.so 145
 
18722 kshitij.so 146
#             try:
147
#                 if ignoreLastUpdated and data['priceUpdatedOn'] > to_java_date(now - timedelta(minutes=5)):
148
#                     print "sku id is already updated",data['_id'] 
149
#                     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']}
150
#             except:
151
#                 pass
152
#             
153
            url = "http://"+saholicPricingHost+":8080/mobileapi/dtr-pricing?id=%s"%(data['identifier'])
14212 kshitij.so 154
            lowestPrice = 0.0
155
            instock = 0
156
            req = urllib2.Request(url,headers=headers)
157
            response = urllib2.urlopen(req)
158
            json_input = response.read()
159
            response.close()
160
            priceInfo = json.loads(json_input)
17456 kshitij.so 161
            print "PriceInfo ",data['identifier']
162
            print priceInfo
14212 kshitij.so 163
            lowestPrice = priceInfo['response']['sellingPrice']
18722 kshitij.so 164
            cheapestBulkPrice = None
165
            try:
166
                bulkPricing = priceInfo['response']['bulkPricing']
167
                for k,v in bulkPricing.iteritems():
168
                    if cheapestBulkPrice is None:
169
                        cheapestBulkPrice = v
170
                        continue
171
                    if cheapestBulkPrice > v:
172
                        cheapestBulkPrice = v
173
            except:
174
                cheapestBulkPrice = 0
175
 
14212 kshitij.so 176
            if lowestPrice > 0:
177
                instock = 1
178
            if instock  == 1:
179
                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 180
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'available_price':lowestPrice , 'in_stock':instock,'codAvailable':data['codAvailable']}}, multi=True)
14212 kshitij.so 181
            else:
182
                lowestPrice = data['available_price']
183
                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 184
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'in_stock':instock,'codAvailable':data['codAvailable']}}, multi=True)
14212 kshitij.so 185
 
18739 kshitij.so 186
            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'], 'cheapestBulkPrice': cheapestBulkPrice, 'packQuantity':data['quantity']}
14834 kshitij.so 187
 
188
        except Exception as e:
189
            print "Exception for _id %d and source %s"%(data['_id'], source_id)
190
            print e
18739 kshitij.so 191
            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'],'packQuantity':data['quantity']}
14203 kshitij.so 192
 
14207 kshitij.so 193
 
13829 kshitij.so 194
    elif source_id ==3:
195
        try:
13918 kshitij.so 196
            if data['identifier'] is None or len(data['identifier'].strip())==0:
13829 kshitij.so 197
                return {}
13918 kshitij.so 198
 
16500 kshitij.so 199
            if data.get('ignorePricing') ==1:
16206 kshitij.so 200
                print "Ignored items returning for %d"%(data['_id'])
16265 kshitij.so 201
                return {'_id':data['_id'],'available_price':data['available_price'],'in_stock':data['in_stock'],'source_id':3,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'],'coupon':data['coupon'], 'codAvailable':data['codAvailable'], 'tagline': data['tagline'], 'offer': data['offer']}
16206 kshitij.so 202
 
13918 kshitij.so 203
            try:
14828 kshitij.so 204
                if ignoreLastUpdated and data['priceUpdatedOn'] > to_java_date(now - timedelta(minutes=5)):
13920 kshitij.so 205
                    print "sku id is already updated",data['_id']
16205 kshitij.so 206
                    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 207
 
208
            except Exception as e:
13920 kshitij.so 209
                print "Exception snapdeal"
13919 kshitij.so 210
                print e
13918 kshitij.so 211
 
17295 kshitij.so 212
            url="http://www.snapdeal.com/acors/json/v2/gvbps?supc=%s&catUrl=&bn=&catId=175&start=0&count=10000&scoreCategoryUrl=mobiles-mobile-phones&make2Order=false&auto=false&isO2OVendorRequired=true"%(data['identifier'])
13829 kshitij.so 213
            req = urllib2.Request(url,headers=headers)
214
            response = urllib2.urlopen(req)
16065 kshitij.so 215
            snapdeal_data = response.read()
216
            encoding =  chardet.detect(snapdeal_data)
217
            try:
218
                snapdeal_data = snapdeal_data.decode(encoding.get('encoding'))
219
            except:
220
                snapdeal_data = snapdeal_data.decode(encoding.get('latin-1'))
221
            vendorInfo = json.loads(snapdeal_data)
14188 kshitij.so 222
            response.close()
13829 kshitij.so 223
            lowestOfferPrice = 0
224
            inStock = 0
15253 kshitij.so 225
            buyBoxPrice = 0
226
            isBuyBox = 1
15819 kshitij.so 227
            try:
228
                buyBoxStock = vendorInfo['primaryVendor']['buyableInventory']
229
                if buyBoxStock >0:
230
                    buyBoxPrice = vendorInfo['primaryVendor']['sellingPrice']
231
            except:
232
                pass
233
            sortedVendorsData = sorted(vendorInfo['vendors'], key=itemgetter('sellingPrice'))
15253 kshitij.so 234
            for sortedVendorData in sortedVendorsData:
235
                lowestOfferPrice = float(sortedVendorData['sellingPrice'])
236
                try:
237
                    stock = sortedVendorData['buyableInventory']
238
                except:
239
                    stock = 0
13829 kshitij.so 240
                if stock > 0 and lowestOfferPrice > 0:
241
                    inStock = 1
242
                    break
243
 
244
            print lowestOfferPrice
245
            print inStock
246
            print "*************"
15253 kshitij.so 247
 
248
            if buyBoxPrice != lowestOfferPrice:
249
                isBuyBox = 0
250
 
13829 kshitij.so 251
            if inStock  == 1:
15253 kshitij.so 252
                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 253
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'available_price':lowestOfferPrice , 'in_stock':inStock,'codAvailable':data['codAvailable']}}, multi=True)
13829 kshitij.so 254
            else:
13929 kshitij.so 255
                lowestOfferPrice = data['available_price']
15253 kshitij.so 256
                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 257
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'in_stock':inStock,'codAvailable':data['codAvailable']}}, multi=True)
13918 kshitij.so 258
 
16117 kshitij.so 259
            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 260
        except Exception as e:
15266 kshitij.so 261
            print traceback.print_exc()
14834 kshitij.so 262
            print "Exception for _id %d and source %s"%(data['_id'], source_id)
263
            print e
16117 kshitij.so 264
            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 265
 
266
    elif source_id == 2:
267
        try:
13918 kshitij.so 268
            if data['identifier'] is None or len(data['identifier'].strip())==0:
13829 kshitij.so 269
                return {}
13918 kshitij.so 270
 
16500 kshitij.so 271
            if data.get('ignorePricing') ==1:
15608 kshitij.so 272
                print "Ignored items returning for %d"%(data['_id'])
16117 kshitij.so 273
                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 274
 
13918 kshitij.so 275
            try:
14828 kshitij.so 276
                if ignoreLastUpdated and data['priceUpdatedOn'] > to_java_date(now - timedelta(minutes=5)):
13918 kshitij.so 277
                    print "sku id is already updated",data['_id']
16117 kshitij.so 278
                    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 279
            except:
280
                pass
281
 
282
            lowestSp = 0
283
            inStock = 0
15253 kshitij.so 284
            buyBoxPrice = 0
285
            isBuyBox = 0
14189 kshitij.so 286
            scraperProductPage = NewFlipkartScraper.FlipkartProductPageScraper()
14121 kshitij.so 287
            try:
17262 kshitij.so 288
                result = scraperProductPage.read(data['identifier'])
289
                print result
290
                if result.get('lowestSp')!=0:
291
                    lowestSp = result.get('lowestSp')
292
                    inStock = result.get('inStock')
293
                    buyBoxPrice = result.get('buyBoxPrice')
14121 kshitij.so 294
            except:
295
                print "Unable to scrape product page ",data['identifier']
13829 kshitij.so 296
            print lowestSp
297
            print inStock
15253 kshitij.so 298
            if buyBoxPrice is not None and buyBoxPrice == lowestSp:
299
                isBuyBox = 1
13829 kshitij.so 300
            if lowestSp > 0:
15253 kshitij.so 301
                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 302
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'available_price':lowestSp , 'in_stock':inStock,'codAvailable':data['codAvailable']}}, multi=True)
13829 kshitij.so 303
            else:
13929 kshitij.so 304
                lowestSp = data['available_price']
15253 kshitij.so 305
                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 306
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'in_stock':inStock,'codAvailable':data['codAvailable']}}, multi=True)
13918 kshitij.so 307
 
16117 kshitij.so 308
            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 309
 
14834 kshitij.so 310
        except Exception as e:
311
            print "Exception for _id %d and source %s"%(data['_id'], source_id)
312
            print e
16117 kshitij.so 313
            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 314
 
315
    elif source_id == 5:
316
        try:
16500 kshitij.so 317
            if data.get('ignorePricing') ==1:
15902 kshitij.so 318
                print "Ignored items returning for %d"%(data['_id'])
16117 kshitij.so 319
                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 320
 
321
            try:
322
                if ignoreLastUpdated and data['priceUpdatedOn'] > to_java_date(now - timedelta(minutes=5)):
323
                    print "sku id is already updated",data['_id'] 
16117 kshitij.so 324
                    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 325
            except:
326
                pass
327
 
328
 
329
            url = data['marketPlaceUrl']
330
            lowestPrice = 0.0
331
            try:
332
                sc = ShopCluesScraper.ShopCluesScraper()
15951 kshitij.so 333
                url = transformUrl(url, 5)
15902 kshitij.so 334
                productInfo = sc.read(url)
335
            except Exception as e:
16177 kshitij.so 336
                traceback.print_exc()
16176 kshitij.so 337
                productInfo = {}
16022 kshitij.so 338
                productInfo['price'] = 0.0
339
                productInfo['inStock'] = 0
340
                productInfo['isCod'] = 0
16178 kshitij.so 341
                productInfo['coupon'] = ""
16022 kshitij.so 342
 
15902 kshitij.so 343
            print "LowestPrice ",productInfo['price']
344
            if productInfo['price'] > 0 and productInfo['inStock']==1:
345
                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 346
                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 347
            else:
348
                lowestPrice = data['available_price']
349
                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 350
                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 351
 
16117 kshitij.so 352
            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 353
        except Exception as e:
354
            print "Exception for _id %d and source %s"%(data['_id'], source_id)
16177 kshitij.so 355
            traceback.print_exc()
16117 kshitij.so 356
            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']}
16410 kshitij.so 357
 
358
    elif source_id == 6:
359
        try:
16500 kshitij.so 360
            if data.get('ignorePricing') ==1:
16410 kshitij.so 361
                print "Ignored items returning for %d"%(data['_id'])
16491 kshitij.so 362
                return {'_id':data['_id'],'available_price':data['available_price'],'in_stock':data['in_stock'],'source_id':6,'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'],'gross_price':data.get('gross_price')}
16410 kshitij.so 363
 
364
            try:
365
                if ignoreLastUpdated and data['priceUpdatedOn'] > to_java_date(now - timedelta(minutes=5)):
366
                    print "sku id is already updated",data['_id'] 
16491 kshitij.so 367
                    return {'_id':data['_id'],'available_price':data['available_price'],'in_stock':data['in_stock'],'source_id':6,'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'],'gross_price':data.get('gross_price')}
16410 kshitij.so 368
            except:
369
                pass
370
 
371
            paytmScraper = PaytmScraper.PaytmScraper()
372
            url = "https://catalog.paytm.com/v1/mobile/product/%s"%(data['identifier'].strip())
373
            try:
374
                result = paytmScraper.read(url)
18282 kshitij.so 375
                print result
16410 kshitij.so 376
                effective_price = result.get('offerPrice')
16462 kshitij.so 377
                gross_price = effective_price
18282 kshitij.so 378
                shareUrl = result.get('shareUrl')
379
                if shareUrl is None:
380
                    shareUrl = data['marketPlaceUrl']
16410 kshitij.so 381
                coupon = ""
382
                try:
383
                    offers = PaytmOfferScraper.fetchOffers(result['offerUrl'])
384
                    bestOffer = {}
385
                    for offer_data in offers.get('codes'):
16415 kshitij.so 386
                        if effective_price > offer_data.get('effective_price'):
16410 kshitij.so 387
                            effective_price = offer_data.get('effective_price')
388
                            bestOffer = offer_data
389
                            coupon = bestOffer.get('code')
390
                except:
391
                    pass
16469 kshitij.so 392
 
393
                """Temp fix"""
394
                if len(coupon) > 0:
395
                    result['codAvailable'] = 0
396
 
16410 kshitij.so 397
                available_price = effective_price 
398
                if result['inStock']:
399
                    inStock = 1
18282 kshitij.so 400
                    get_mongo_connection().Catalog.MasterData.update({'_id':data['_id']}, {'$set' : {'available_price':available_price,'updatedOn':to_java_date(datetime.now()),'priceUpdatedOn':to_java_date(datetime.now()),'in_stock':1,'buyBoxFlag':1,'codAvailable':result.get('codAvailable'),'coupon':coupon,'gross_price':gross_price,'marketPlaceUrl':shareUrl}})
16462 kshitij.so 401
                    get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'available_price':available_price , 'in_stock':1,'codAvailable':result.get('codAvailable'),'gross_price':gross_price}})
16410 kshitij.so 402
                else:
403
                    inStock = 0
18282 kshitij.so 404
                    get_mongo_connection().Catalog.MasterData.update({'_id':data['_id']}, {'$set' : {'updatedOn':to_java_date(datetime.now()),'in_stock':0,'priceUpdatedOn':to_java_date(datetime.now()),'buyBoxFlag':1,'codAvailable':result.get('codAvailable'),'coupon':coupon,'marketPlaceUrl':shareUrl}})
16415 kshitij.so 405
                    get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'in_stock':0,'codAvailable':result.get('codAvailable')}})
16410 kshitij.so 406
 
407
            except:
408
                inStock = 0
409
                get_mongo_connection().Catalog.MasterData.update({'_id':data['_id']}, {'$set' : {'updatedOn':to_java_date(datetime.now()),'in_stock':0,'priceUpdatedOn':to_java_date(datetime.now()),'buyBoxFlag':1}})
410
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'in_stock':0}})
411
 
412
 
18282 kshitij.so 413
            return {'_id':data['_id'],'available_price':available_price,'in_stock':inStock,'source_id':6,'source_product_name':data['source_product_name'],'marketPlaceUrl':shareUrl,'thumbnail':data['thumbnail'], 'coupon':coupon,'codAvailable':result['codAvailable'], 'tagline': data['tagline'], 'offer': data['offer'],'gross_price':gross_price}
16410 kshitij.so 414
        except Exception as e:
415
            print "Exception for _id %d and source %s"%(data['_id'], source_id)
416
            traceback.print_exc()
16462 kshitij.so 417
            return {'_id':data['_id'],'available_price':data['available_price'],'in_stock':data['in_stock'],'source_id':6,'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'],'gross_price':data.get('gross_price')}
17013 manish.sha 418
 
419
    elif source_id ==7:
420
        try:
421
            if data['identifier'] is None or len(data['identifier'].strip())==0:
422
                return {}
423
 
424
            if data.get('ignorePricing') ==1:
425
                print "Ignored items returning for %d"%(data['_id'])
426
                return {'_id':data['_id'],'available_price':data['available_price'],'in_stock':data['in_stock'],'source_id':7,'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']}
427
 
428
            try:
429
                if ignoreLastUpdated and data['priceUpdatedOn'] > to_java_date(now - timedelta(minutes=5)):
430
                    print "sku id is already updated",data['_id']
431
                    return {'_id':data['_id'],'available_price':data['available_price'],'in_stock':data['in_stock'],'source_id':7,'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']}
432
 
433
            except Exception as e:
434
                print "Exception snapdeal"
435
                print e
436
 
437
            response = None
438
 
439
            try:
17043 kshitij.so 440
                scraper = HomeShop18Scraper.HomeShop18Scraper()
17013 manish.sha 441
                response = scraper.read('http://m.homeshop18.com/product.mobi?productId=%s'%(str(data['identifier'])))
442
            except Exception as e:
443
                print e
17043 kshitij.so 444
                scraper = HomeShop18Scraper.HomeShop18Scraper()
17013 manish.sha 445
                response = scraper.read('http://m.homeshop18.com/product.mobi?productId=%s'%(str(data['identifier'])))
446
 
447
            lowestOfferPrice = 0
448
            inStock = 0
449
 
450
            if response is not None:
17043 kshitij.so 451
                lowestOfferPrice = float(response['price']+response['shippingCharge'])
17013 manish.sha 452
                inStock = response['inStock']          
453
 
454
            print lowestOfferPrice
455
            print inStock
456
            print "*************"
457
 
17036 kshitij.so 458
            if lowestOfferPrice ==0:
459
                inStock = 0
17013 manish.sha 460
 
17036 kshitij.so 461
 
17013 manish.sha 462
            if inStock  == 1:
17036 kshitij.so 463
                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}}, multi=True)
17013 manish.sha 464
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'available_price':lowestOfferPrice , 'in_stock':inStock,'codAvailable':data['codAvailable']}}, multi=True)
465
            else:
466
                lowestOfferPrice = data['available_price']
17036 kshitij.so 467
                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)
17013 manish.sha 468
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'in_stock':inStock,'codAvailable':data['codAvailable']}}, multi=True)
469
 
470
            return {'_id':data['_id'],'available_price':lowestOfferPrice,'in_stock':inStock,'source_id':7,'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']}
471
        except Exception as e:
472
            print traceback.print_exc()
473
            print "Exception for _id %d and source %s"%(data['_id'], source_id)
474
            print e
475
            return {'_id':data['_id'],'available_price':data['available_price'],'in_stock':data['in_stock'],'source_id':7,'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 476
 
13829 kshitij.so 477
    else:
478
        return {}
15902 kshitij.so 479
 
480
 
13918 kshitij.so 481
 
16498 kshitij.so 482
def recomputePoints(deal):
15253 kshitij.so 483
    try:
16498 kshitij.so 484
        nlcPoints = getNlcPoints(deal)
15253 kshitij.so 485
    except:
16498 kshitij.so 486
        traceback.print_exc()
15253 kshitij.so 487
        nlcPoints = deal['nlcPoints']
16498 kshitij.so 488
 
489
    bundleDealPoints = list(get_mongo_connection().Catalog.DealPoints.find({'skuBundleId':deal['skuBundleId'],'startDate':{'$lte':to_java_date(datetime.now())},'endDate':{'$gte':to_java_date(datetime.now())}}))
490
    if len(bundleDealPoints) > 0:
491
        manualDealThresholdPrice = bundleDealPoints[0]['dealThresholdPrice']
492
        dealPoints = bundleDealPoints[0]['dealPoints']
15253 kshitij.so 493
    else:
494
        dealPoints = 0
16498 kshitij.so 495
        manualDealThresholdPrice = None
16508 kshitij.so 496
 
497
    if deal['available_price'] > manualDealThresholdPrice:
498
        dealPoints = 0
499
 
16498 kshitij.so 500
 
501
    if dealPoints != deal['dealPoints'] or manualDealThresholdPrice != deal['manualDealThresholdPrice'] or nlcPoints != deal['nlcPoints']:
502
        get_mongo_connection().Catalog.Deals.update({'_id':deal['_id']},{"$set":{'totalPoints':deal['totalPoints'] - deal['nlcPoints'] + nlcPoints - deal['dealPoints'] +dealPoints , 'nlcPoints': nlcPoints, 'dealPoints': dealPoints, 'manualDealThresholdPrice': manualDealThresholdPrice}})
15253 kshitij.so 503
 
15266 kshitij.so 504
 
505
def populateNegativeDeals():
506
    negativeDeals = get_mongo_connection().Catalog.NegativeDeals.find().distinct('sku')
507
    mc.set("negative_deals", negativeDeals, 600)
508
 
509
def recomputeDeal(item):
16017 kshitij.so 510
 
13918 kshitij.so 511
    """Lets recompute deal for this bundle"""
15266 kshitij.so 512
    print "Recomputing for bundleId",item.get('skuBundleId')
513
    skuBundleId = item['skuBundleId']
13829 kshitij.so 514
 
19153 kshitij.so 515
    similarItems = list(get_mongo_connection().Catalog.Deals.find({'skuBundleId':skuBundleId}).sort([('netPriceAfterCashBack',pymongo.ASCENDING)]))
13918 kshitij.so 516
    bestPrice = float("inf")
517
    bestOne = None
518
    toUpdate = []
16017 kshitij.so 519
    prepaidBestPrice = float("inf")
520
    prepaidBestOne = None
13918 kshitij.so 521
    for similarItem in similarItems:
16498 kshitij.so 522
        try:
523
            recomputePoints(similarItem)
524
        except:
525
            traceback.print_exc()
16017 kshitij.so 526
        if similarItem['codAvailable'] ==1:
527
            if mc.get("negative_deals") is None:
528
                populateNegativeDeals()
16172 kshitij.so 529
            if similarItem['in_stock'] == 0  or similarItem['_id'] in mc.get("negative_deals"):
16017 kshitij.so 530
                get_mongo_connection().Catalog.Deals.update({ '_id' : similarItem['_id'] }, {'$set':{'showDeal':0, 'prepaidDeal':0 }})
531
                continue
17674 kshitij.so 532
            if similarItem['source_id'] == SOURCE_MAP.get('SHOPCLUES.COM') and similarItem['rank']==0 and similarItem['category_id']!=6:
16017 kshitij.so 533
                get_mongo_connection().Catalog.Deals.update({ '_id' : similarItem['_id'] }, {'$set':{'showDeal':0,'prepaidDeal':0 }})
534
                continue
19153 kshitij.so 535
            if similarItem['netPriceAfterCashBack'] < bestPrice:
16017 kshitij.so 536
                bestOne = similarItem
19153 kshitij.so 537
                bestPrice = similarItem['netPriceAfterCashBack']
20347 kshitij.so 538
            elif similarItem['netPriceAfterCashBack'] == bestPrice:
539
 
540
                try:
541
                    if (DEAL_PRIORITY.index(int(similarItem['source_id'])) > DEAL_PRIORITY.index(int(bestOne['source_id']))):
542
                        continue
543
                except:
544
                    traceback.print_exc()
545
 
16017 kshitij.so 546
                bestOne = similarItem
19153 kshitij.so 547
                bestPrice = similarItem['netPriceAfterCashBack']
16017 kshitij.so 548
            else:
549
                pass
13918 kshitij.so 550
        else:
16017 kshitij.so 551
            if mc.get("negative_deals") is None:
552
                populateNegativeDeals()
16172 kshitij.so 553
            if similarItem['in_stock'] == 0  or similarItem['_id'] in mc.get("negative_deals"):
16017 kshitij.so 554
                get_mongo_connection().Catalog.Deals.update({ '_id' : similarItem['_id'] }, {'$set':{'showDeal':0, 'prepaidDeal':0 }})
555
                continue
17751 kshitij.so 556
            if similarItem['source_id'] == SOURCE_MAP.get('SHOPCLUES.COM') and similarItem['rank']==0 and similarItem['category_id']!=6:
16017 kshitij.so 557
                get_mongo_connection().Catalog.Deals.update({ '_id' : similarItem['_id'] }, {'$set':{'showDeal':0,'prepaidDeal':0 }})
558
                continue
19153 kshitij.so 559
            if similarItem['netPriceAfterCashBack'] < prepaidBestPrice:
16017 kshitij.so 560
                prepaidBestOne = similarItem
19153 kshitij.so 561
                prepaidBestPrice = similarItem['netPriceAfterCashBack']
20347 kshitij.so 562
            elif similarItem['netPriceAfterCashBack'] == prepaidBestPrice:
563
 
564
                try:
20366 kshitij.so 565
                    if (DEAL_PRIORITY.index(int(similarItem['source_id'])) > DEAL_PRIORITY.index(int(prepaidBestOne['source_id']))):
20347 kshitij.so 566
                        continue
567
                except:
568
                    traceback.print_exc()
569
 
16017 kshitij.so 570
                prepaidBestOne = similarItem
19153 kshitij.so 571
                prepaidBestPrice = similarItem['netPriceAfterCashBack']
16017 kshitij.so 572
            else:
573
                pass
17456 kshitij.so 574
    #print "bestOne ", bestOne
575
    #print "prepaid best one",  prepaidBestOne
16024 kshitij.so 576
    if bestOne is not None or prepaidBestOne is not None:
13918 kshitij.so 577
        for similarItem in similarItems:
578
            toUpdate.append(similarItem['_id'])
16023 kshitij.so 579
        if bestOne is not None:
580
            toUpdate.remove(bestOne['_id'])
581
            get_mongo_connection().Catalog.Deals.update({ '_id' : bestOne['_id'] }, {'$set':{'showDeal':1,'prepaidDeal':0 }})
582
        if prepaidBestOne is not None:
16069 kshitij.so 583
            if bestOne is not None:
19153 kshitij.so 584
                if prepaidBestOne['netPriceAfterCashBack'] < bestOne['netPriceAfterCashBack']: 
16069 kshitij.so 585
                    toUpdate.remove(prepaidBestOne['_id'])
586
                    get_mongo_connection().Catalog.Deals.update({ '_id' : prepaidBestOne['_id'] }, {'$set':{'showDeal':0,'prepaidDeal':1 }})
16072 kshitij.so 587
            else:
588
                toUpdate.remove(prepaidBestOne['_id'])
589
                get_mongo_connection().Catalog.Deals.update({ '_id' : prepaidBestOne['_id'] }, {'$set':{'showDeal':0,'prepaidDeal':1 }})
13918 kshitij.so 590
    if len(toUpdate) > 0:
16017 kshitij.so 591
        get_mongo_connection().Catalog.Deals.update({ '_id' : { "$in": toUpdate } }, {'$set':{'showDeal':0,'prepaidDeal':0 }},upsert=False, multi=True)
592
 
14342 kshitij.so 593
    print "Done with recomputing"
13829 kshitij.so 594
 
595
def getLatestPrice(skuBundleId, source_id):
596
    temp = []
597
    itemIds = list(get_mongo_connection().Catalog.MasterData.find({'skuBundleId':skuBundleId,'source_id' : source_id}))
16026 kshitij.so 598
    item = None
13829 kshitij.so 599
    for item in itemIds:
14309 kshitij.so 600
        item['dealFlag'] = 0
601
        item['dealType'] = 0
16510 kshitij.so 602
        item['dealUrl'] = ""
17674 kshitij.so 603
        if item['source_id'] ==5 and item['rank'] == 0 and item['category_id']!=6:
15912 kshitij.so 604
            continue
15187 kshitij.so 605
        if item['source_id'] ==3:
606
            item['marketPlaceUrl'] = item['marketPlaceUrl']+'?supc='+item.get('identifier')
14309 kshitij.so 607
        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']}))
608
        if len(manualDeals) > 0:
609
            item['dealFlag'] = 1
14760 kshitij.so 610
            item['dealType'] =manualDeals[0]['dealType']
16510 kshitij.so 611
            item['dealUrl'] = manualDeals[0]['dealUrl']
14760 kshitij.so 612
        info = returnLatestPrice(item, source_id)
19153 kshitij.so 613
        if item['source_id'] != SOURCE_MAP.get('PAYTM.COM'):
614
            data = calculateCashBack(item, info['available_price'])
615
        else:
616
            if info['codAvailable'] ==0:
617
                data = calculateCashBack(item, info['gross_price'])
14760 kshitij.so 618
            else:
19153 kshitij.so 619
                data = calculateCashBack(item, info['available_price'])  #No need, can be done in if with or clause.
620
 
621
        info['cash_back'] = data['cash_back']
622
        info['cash_back_type'] = data['cash_back_type']
623
        info['netPriceAfterCashBack'] = data['netPriceAfterCashBack']
624
        info['showNetPrice'] = data['showNetPrice']
19317 kshitij.so 625
        info['category_id'] = item['category_id']
626
        info['subCategoryId'] = item['subCategoryId']
19153 kshitij.so 627
        get_mongo_connection().Catalog.Deals.update({'_id':item['_id']},{"$set":{'netPriceAfterCashBack':info['netPriceAfterCashBack']}})
14760 kshitij.so 628
        temp.append(info)
16026 kshitij.so 629
    if item is not None:
630
        try:
631
            thread = threading.Thread(target=recomputeDeal, args = (item,))
632
            thread.daemon = True
633
            thread.start()    
634
        except:
635
            print traceback.print_exc()
636
            print "Unable to compute deal for ",skuBundleId
13829 kshitij.so 637
    return temp
638
 
13864 kshitij.so 639
def getLatestPriceById(id):
640
    item = list(get_mongo_connection().Catalog.MasterData.find({'_id':id}))
14309 kshitij.so 641
    item[0]['dealFlag'] = 0
642
    item[0]['dealType'] = 0
16510 kshitij.so 643
    item[0]['dealUrl'] = ""
644
 
14309 kshitij.so 645
    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']}))
646
    if len(manualDeals) > 0:
647
        item[0]['dealFlag'] = 1
15266 kshitij.so 648
        item[0]['dealType'] =manualDeals[0]['dealType']
16510 kshitij.so 649
        item[0]['dealUrl'] = manualDeals[0]['dealUrl']
14367 kshitij.so 650
 
14431 kshitij.so 651
    info = returnLatestPrice(item[0], item[0]['source_id'])
19153 kshitij.so 652
    if item[0]['source_id'] != SOURCE_MAP.get('PAYTM.COM'):
653
        data = calculateCashBack(item[0], info['available_price'])
654
    else:
655
        if info['codAvailable'] ==0:
656
            data = calculateCashBack(item[0], info['gross_price'])
657
        else:
658
            data = calculateCashBack(item[0], info['available_price'])  #No need, can be done in if with or clause.
659
 
660
    info['cash_back'] = data['cash_back']
661
    info['cash_back_type'] = data['cash_back_type']
662
    info['netPriceAfterCashBack'] = data['netPriceAfterCashBack']
663
    info['showNetPrice'] = data['showNetPrice']
664
    get_mongo_connection().Catalog.Deals.update({'_id':item[0]['_id']},{"$set":{'netPriceAfterCashBack':info['netPriceAfterCashBack']}})
14794 kshitij.so 665
    print info
14367 kshitij.so 666
    try:
15273 kshitij.so 667
        thread = threading.Thread(target=recomputeDeal, args = (item[0],))
14367 kshitij.so 668
        thread.daemon = True
669
        thread.start()    
670
    except:
671
        print "Unable to compute deal for ",item[0]['skuBundleId']
14431 kshitij.so 672
    return info
13829 kshitij.so 673
 
14828 kshitij.so 674
def updatePriceForNotificationBundles(skuBundleId):
15266 kshitij.so 675
    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 676
    for item in itemIds:
14833 kshitij.so 677
        print item['_id']
14828 kshitij.so 678
        item['dealFlag'] = 0
679
        item['dealType'] = 0
16510 kshitij.so 680
        item['dealUrl'] = ""
14828 kshitij.so 681
        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']}))
682
        if len(manualDeals) > 0:
683
            item['dealFlag'] = 1
684
            item['dealType'] =manualDeals[0]['dealType']
16510 kshitij.so 685
            item['dealUrl'] = manualDeals[0]['dealUrl']
14828 kshitij.so 686
        info = returnLatestPrice(item, item['source_id'],False)
687
        print info
688
 
13829 kshitij.so 689
def main():
15956 kshitij.so 690
    print datetime.now()
20313 kshitij.so 691
    print "returned %s"%(str(getLatestPriceById(23014)))
15956 kshitij.so 692
    print datetime.now()
13829 kshitij.so 693
if __name__=='__main__':
13971 kshitij.so 694
    main()
695