Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
13829 kshitij.so 1
import urllib2
2
import simplejson as json
3
import pymongo
15951 kshitij.so 4
from dtr.utils.utils import to_java_date, getNlcPoints, transformUrl
13918 kshitij.so 5
from datetime import datetime, timedelta
13829 kshitij.so 6
from operator import itemgetter
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()])
117
            lowestPrice = asinPricingMap.get(data['identifier'].strip().upper()) 
13929 kshitij.so 118
            print "LowestPrice ",lowestPrice
13829 kshitij.so 119
            inStock = 0
120
            if lowestPrice > 0:
121
                inStock = 1
122
            if lowestPrice > 0:
13971 kshitij.so 123
                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 124
                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 125
            else:
13929 kshitij.so 126
                lowestPrice = data['available_price']
13977 kshitij.so 127
                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 128
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'in_stock':0,'dealType':data['dealType'],'codAvailable':data['codAvailable']}}, multi=True)
13918 kshitij.so 129
 
16117 kshitij.so 130
            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 131
        except Exception as e:
132
            print "Exception for _id %d and source %s"%(data['_id'], source_id)
133
            print e
16117 kshitij.so 134
            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 135
 
14203 kshitij.so 136
    elif source_id ==4:
14207 kshitij.so 137
 
14203 kshitij.so 138
        try:
14212 kshitij.so 139
            if data['identifier'] is None or len(data['identifier'].strip())==0:
140
                return {}
141
 
16500 kshitij.so 142
            if data.get('ignorePricing') ==1:
18739 kshitij.so 143
                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 144
 
18722 kshitij.so 145
#             try:
146
#                 if ignoreLastUpdated and data['priceUpdatedOn'] > to_java_date(now - timedelta(minutes=5)):
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':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']}
149
#             except:
150
#                 pass
151
#             
152
            url = "http://"+saholicPricingHost+":8080/mobileapi/dtr-pricing?id=%s"%(data['identifier'])
14212 kshitij.so 153
            lowestPrice = 0.0
154
            instock = 0
155
            req = urllib2.Request(url,headers=headers)
156
            response = urllib2.urlopen(req)
157
            json_input = response.read()
158
            response.close()
159
            priceInfo = json.loads(json_input)
17456 kshitij.so 160
            print "PriceInfo ",data['identifier']
161
            print priceInfo
14212 kshitij.so 162
            lowestPrice = priceInfo['response']['sellingPrice']
18722 kshitij.so 163
            cheapestBulkPrice = None
164
            try:
165
                bulkPricing = priceInfo['response']['bulkPricing']
166
                for k,v in bulkPricing.iteritems():
167
                    if cheapestBulkPrice is None:
168
                        cheapestBulkPrice = v
169
                        continue
170
                    if cheapestBulkPrice > v:
171
                        cheapestBulkPrice = v
172
            except:
173
                cheapestBulkPrice = 0
174
 
14212 kshitij.so 175
            if lowestPrice > 0:
176
                instock = 1
177
            if instock  == 1:
178
                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 179
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'available_price':lowestPrice , 'in_stock':instock,'codAvailable':data['codAvailable']}}, multi=True)
14212 kshitij.so 180
            else:
181
                lowestPrice = data['available_price']
182
                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 183
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'in_stock':instock,'codAvailable':data['codAvailable']}}, multi=True)
14212 kshitij.so 184
 
18739 kshitij.so 185
            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 186
 
187
        except Exception as e:
188
            print "Exception for _id %d and source %s"%(data['_id'], source_id)
189
            print e
18739 kshitij.so 190
            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 191
 
14207 kshitij.so 192
 
13829 kshitij.so 193
    elif source_id ==3:
194
        try:
13918 kshitij.so 195
            if data['identifier'] is None or len(data['identifier'].strip())==0:
13829 kshitij.so 196
                return {}
13918 kshitij.so 197
 
16500 kshitij.so 198
            if data.get('ignorePricing') ==1:
16206 kshitij.so 199
                print "Ignored items returning for %d"%(data['_id'])
16265 kshitij.so 200
                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 201
 
13918 kshitij.so 202
            try:
14828 kshitij.so 203
                if ignoreLastUpdated and data['priceUpdatedOn'] > to_java_date(now - timedelta(minutes=5)):
13920 kshitij.so 204
                    print "sku id is already updated",data['_id']
16205 kshitij.so 205
                    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 206
 
207
            except Exception as e:
13920 kshitij.so 208
                print "Exception snapdeal"
13919 kshitij.so 209
                print e
13918 kshitij.so 210
 
17295 kshitij.so 211
            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 212
            req = urllib2.Request(url,headers=headers)
213
            response = urllib2.urlopen(req)
16065 kshitij.so 214
            snapdeal_data = response.read()
215
            encoding =  chardet.detect(snapdeal_data)
216
            try:
217
                snapdeal_data = snapdeal_data.decode(encoding.get('encoding'))
218
            except:
219
                snapdeal_data = snapdeal_data.decode(encoding.get('latin-1'))
220
            vendorInfo = json.loads(snapdeal_data)
14188 kshitij.so 221
            response.close()
13829 kshitij.so 222
            lowestOfferPrice = 0
223
            inStock = 0
15253 kshitij.so 224
            buyBoxPrice = 0
225
            isBuyBox = 1
15819 kshitij.so 226
            try:
227
                buyBoxStock = vendorInfo['primaryVendor']['buyableInventory']
228
                if buyBoxStock >0:
229
                    buyBoxPrice = vendorInfo['primaryVendor']['sellingPrice']
230
            except:
231
                pass
232
            sortedVendorsData = sorted(vendorInfo['vendors'], key=itemgetter('sellingPrice'))
15253 kshitij.so 233
            for sortedVendorData in sortedVendorsData:
234
                lowestOfferPrice = float(sortedVendorData['sellingPrice'])
235
                try:
236
                    stock = sortedVendorData['buyableInventory']
237
                except:
238
                    stock = 0
13829 kshitij.so 239
                if stock > 0 and lowestOfferPrice > 0:
240
                    inStock = 1
241
                    break
242
 
243
            print lowestOfferPrice
244
            print inStock
245
            print "*************"
15253 kshitij.so 246
 
247
            if buyBoxPrice != lowestOfferPrice:
248
                isBuyBox = 0
249
 
13829 kshitij.so 250
            if inStock  == 1:
15253 kshitij.so 251
                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 252
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'available_price':lowestOfferPrice , 'in_stock':inStock,'codAvailable':data['codAvailable']}}, multi=True)
13829 kshitij.so 253
            else:
13929 kshitij.so 254
                lowestOfferPrice = 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)
16024 kshitij.so 256
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'in_stock':inStock,'codAvailable':data['codAvailable']}}, multi=True)
13918 kshitij.so 257
 
16117 kshitij.so 258
            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 259
        except Exception as e:
15266 kshitij.so 260
            print traceback.print_exc()
14834 kshitij.so 261
            print "Exception for _id %d and source %s"%(data['_id'], source_id)
262
            print e
16117 kshitij.so 263
            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 264
 
265
    elif source_id == 2:
266
        try:
13918 kshitij.so 267
            if data['identifier'] is None or len(data['identifier'].strip())==0:
13829 kshitij.so 268
                return {}
13918 kshitij.so 269
 
16500 kshitij.so 270
            if data.get('ignorePricing') ==1:
15608 kshitij.so 271
                print "Ignored items returning for %d"%(data['_id'])
16117 kshitij.so 272
                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 273
 
13918 kshitij.so 274
            try:
14828 kshitij.so 275
                if ignoreLastUpdated and data['priceUpdatedOn'] > to_java_date(now - timedelta(minutes=5)):
13918 kshitij.so 276
                    print "sku id is already updated",data['_id']
16117 kshitij.so 277
                    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 278
            except:
279
                pass
280
 
281
            lowestSp = 0
282
            inStock = 0
15253 kshitij.so 283
            buyBoxPrice = 0
284
            isBuyBox = 0
14189 kshitij.so 285
            scraperProductPage = NewFlipkartScraper.FlipkartProductPageScraper()
14121 kshitij.so 286
            try:
17262 kshitij.so 287
                result = scraperProductPage.read(data['identifier'])
288
                print result
289
                if result.get('lowestSp')!=0:
290
                    lowestSp = result.get('lowestSp')
291
                    inStock = result.get('inStock')
292
                    buyBoxPrice = result.get('buyBoxPrice')
14121 kshitij.so 293
            except:
294
                print "Unable to scrape product page ",data['identifier']
13829 kshitij.so 295
            print lowestSp
296
            print inStock
15253 kshitij.so 297
            if buyBoxPrice is not None and buyBoxPrice == lowestSp:
298
                isBuyBox = 1
13829 kshitij.so 299
            if lowestSp > 0:
15253 kshitij.so 300
                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 301
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'available_price':lowestSp , 'in_stock':inStock,'codAvailable':data['codAvailable']}}, multi=True)
13829 kshitij.so 302
            else:
13929 kshitij.so 303
                lowestSp = data['available_price']
15253 kshitij.so 304
                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 305
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'in_stock':inStock,'codAvailable':data['codAvailable']}}, multi=True)
13918 kshitij.so 306
 
16117 kshitij.so 307
            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 308
 
14834 kshitij.so 309
        except Exception as e:
310
            print "Exception for _id %d and source %s"%(data['_id'], source_id)
311
            print e
16117 kshitij.so 312
            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 313
 
314
    elif source_id == 5:
315
        try:
16500 kshitij.so 316
            if data.get('ignorePricing') ==1:
15902 kshitij.so 317
                print "Ignored items returning for %d"%(data['_id'])
16117 kshitij.so 318
                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 319
 
320
            try:
321
                if ignoreLastUpdated and data['priceUpdatedOn'] > to_java_date(now - timedelta(minutes=5)):
322
                    print "sku id is already updated",data['_id'] 
16117 kshitij.so 323
                    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 324
            except:
325
                pass
326
 
327
 
328
            url = data['marketPlaceUrl']
329
            lowestPrice = 0.0
330
            try:
331
                sc = ShopCluesScraper.ShopCluesScraper()
15951 kshitij.so 332
                url = transformUrl(url, 5)
15902 kshitij.so 333
                productInfo = sc.read(url)
334
            except Exception as e:
16177 kshitij.so 335
                traceback.print_exc()
16176 kshitij.so 336
                productInfo = {}
16022 kshitij.so 337
                productInfo['price'] = 0.0
338
                productInfo['inStock'] = 0
339
                productInfo['isCod'] = 0
16178 kshitij.so 340
                productInfo['coupon'] = ""
16022 kshitij.so 341
 
15902 kshitij.so 342
            print "LowestPrice ",productInfo['price']
343
            if productInfo['price'] > 0 and productInfo['inStock']==1:
344
                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 345
                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 346
            else:
347
                lowestPrice = data['available_price']
348
                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 349
                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 350
 
16117 kshitij.so 351
            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 352
        except Exception as e:
353
            print "Exception for _id %d and source %s"%(data['_id'], source_id)
16177 kshitij.so 354
            traceback.print_exc()
16117 kshitij.so 355
            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 356
 
357
    elif source_id == 6:
358
        try:
16500 kshitij.so 359
            if data.get('ignorePricing') ==1:
16410 kshitij.so 360
                print "Ignored items returning for %d"%(data['_id'])
16491 kshitij.so 361
                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 362
 
363
            try:
364
                if ignoreLastUpdated and data['priceUpdatedOn'] > to_java_date(now - timedelta(minutes=5)):
365
                    print "sku id is already updated",data['_id'] 
16491 kshitij.so 366
                    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 367
            except:
368
                pass
369
 
370
            paytmScraper = PaytmScraper.PaytmScraper()
371
            url = "https://catalog.paytm.com/v1/mobile/product/%s"%(data['identifier'].strip())
372
            try:
373
                result = paytmScraper.read(url)
18282 kshitij.so 374
                print result
16410 kshitij.so 375
                effective_price = result.get('offerPrice')
16462 kshitij.so 376
                gross_price = effective_price
18282 kshitij.so 377
                shareUrl = result.get('shareUrl')
378
                if shareUrl is None:
379
                    shareUrl = data['marketPlaceUrl']
16410 kshitij.so 380
                coupon = ""
381
                try:
382
                    offers = PaytmOfferScraper.fetchOffers(result['offerUrl'])
16415 kshitij.so 383
                    try:
384
                        addToPaytmMaster(offers.get('codes'))
385
                    except:
386
                        print "Error in adding coupon"
387
                        traceback.print_exc()
16410 kshitij.so 388
                    bestOffer = {}
389
                    for offer_data in offers.get('codes'):
16415 kshitij.so 390
                        if effective_price > offer_data.get('effective_price'):
16410 kshitij.so 391
                            effective_price = offer_data.get('effective_price')
392
                            bestOffer = offer_data
393
                            coupon = bestOffer.get('code')
394
                except:
395
                    pass
16469 kshitij.so 396
 
397
                """Temp fix"""
398
                if len(coupon) > 0:
399
                    result['codAvailable'] = 0
400
 
16410 kshitij.so 401
                available_price = effective_price 
402
                if result['inStock']:
403
                    inStock = 1
18282 kshitij.so 404
                    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 405
                    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 406
                else:
407
                    inStock = 0
18282 kshitij.so 408
                    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 409
                    get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'in_stock':0,'codAvailable':result.get('codAvailable')}})
16410 kshitij.so 410
 
411
            except:
412
                inStock = 0
413
                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}})
414
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'in_stock':0}})
415
 
416
 
18282 kshitij.so 417
            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 418
        except Exception as e:
419
            print "Exception for _id %d and source %s"%(data['_id'], source_id)
420
            traceback.print_exc()
16462 kshitij.so 421
            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 422
 
423
    elif source_id ==7:
424
        try:
425
            if data['identifier'] is None or len(data['identifier'].strip())==0:
426
                return {}
427
 
428
            if data.get('ignorePricing') ==1:
429
                print "Ignored items returning for %d"%(data['_id'])
430
                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']}
431
 
432
            try:
433
                if ignoreLastUpdated and data['priceUpdatedOn'] > to_java_date(now - timedelta(minutes=5)):
434
                    print "sku id is already updated",data['_id']
435
                    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']}
436
 
437
            except Exception as e:
438
                print "Exception snapdeal"
439
                print e
440
 
441
            response = None
442
 
443
            try:
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
            except Exception as e:
447
                print e
17043 kshitij.so 448
                scraper = HomeShop18Scraper.HomeShop18Scraper()
17013 manish.sha 449
                response = scraper.read('http://m.homeshop18.com/product.mobi?productId=%s'%(str(data['identifier'])))
450
 
451
            lowestOfferPrice = 0
452
            inStock = 0
453
 
454
            if response is not None:
17043 kshitij.so 455
                lowestOfferPrice = float(response['price']+response['shippingCharge'])
17013 manish.sha 456
                inStock = response['inStock']          
457
 
458
            print lowestOfferPrice
459
            print inStock
460
            print "*************"
461
 
17036 kshitij.so 462
            if lowestOfferPrice ==0:
463
                inStock = 0
17013 manish.sha 464
 
17036 kshitij.so 465
 
17013 manish.sha 466
            if inStock  == 1:
17036 kshitij.so 467
                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 468
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'available_price':lowestOfferPrice , 'in_stock':inStock,'codAvailable':data['codAvailable']}}, multi=True)
469
            else:
470
                lowestOfferPrice = data['available_price']
17036 kshitij.so 471
                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 472
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'in_stock':inStock,'codAvailable':data['codAvailable']}}, multi=True)
473
 
474
            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']}
475
        except Exception as e:
476
            print traceback.print_exc()
477
            print "Exception for _id %d and source %s"%(data['_id'], source_id)
478
            print e
479
            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 480
 
13829 kshitij.so 481
    else:
482
        return {}
15902 kshitij.so 483
 
484
 
13918 kshitij.so 485
 
16498 kshitij.so 486
def recomputePoints(deal):
15253 kshitij.so 487
    try:
16498 kshitij.so 488
        nlcPoints = getNlcPoints(deal)
15253 kshitij.so 489
    except:
16498 kshitij.so 490
        traceback.print_exc()
15253 kshitij.so 491
        nlcPoints = deal['nlcPoints']
16498 kshitij.so 492
 
493
    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())}}))
494
    if len(bundleDealPoints) > 0:
495
        manualDealThresholdPrice = bundleDealPoints[0]['dealThresholdPrice']
496
        dealPoints = bundleDealPoints[0]['dealPoints']
15253 kshitij.so 497
    else:
498
        dealPoints = 0
16498 kshitij.so 499
        manualDealThresholdPrice = None
16508 kshitij.so 500
 
501
    if deal['available_price'] > manualDealThresholdPrice:
502
        dealPoints = 0
503
 
16498 kshitij.so 504
 
505
    if dealPoints != deal['dealPoints'] or manualDealThresholdPrice != deal['manualDealThresholdPrice'] or nlcPoints != deal['nlcPoints']:
506
        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 507
 
15266 kshitij.so 508
 
509
def populateNegativeDeals():
510
    negativeDeals = get_mongo_connection().Catalog.NegativeDeals.find().distinct('sku')
511
    mc.set("negative_deals", negativeDeals, 600)
512
 
513
def recomputeDeal(item):
16017 kshitij.so 514
 
13918 kshitij.so 515
    """Lets recompute deal for this bundle"""
15266 kshitij.so 516
    print "Recomputing for bundleId",item.get('skuBundleId')
517
    skuBundleId = item['skuBundleId']
13829 kshitij.so 518
 
19153 kshitij.so 519
    similarItems = list(get_mongo_connection().Catalog.Deals.find({'skuBundleId':skuBundleId}).sort([('netPriceAfterCashBack',pymongo.ASCENDING)]))
13918 kshitij.so 520
    bestPrice = float("inf")
521
    bestOne = None
522
    bestSellerPoints = 0
523
    toUpdate = []
16017 kshitij.so 524
    prepaidBestPrice = float("inf")
525
    prepaidBestOne = None
526
    prepaidBestSellerPoints = 0
13918 kshitij.so 527
    for similarItem in similarItems:
16498 kshitij.so 528
        try:
529
            recomputePoints(similarItem)
530
        except:
531
            traceback.print_exc()
16017 kshitij.so 532
        if similarItem['codAvailable'] ==1:
533
            if mc.get("negative_deals") is None:
534
                populateNegativeDeals()
16172 kshitij.so 535
            if similarItem['in_stock'] == 0  or similarItem['_id'] in mc.get("negative_deals"):
16017 kshitij.so 536
                get_mongo_connection().Catalog.Deals.update({ '_id' : similarItem['_id'] }, {'$set':{'showDeal':0, 'prepaidDeal':0 }})
537
                continue
17674 kshitij.so 538
            if similarItem['source_id'] == SOURCE_MAP.get('SHOPCLUES.COM') and similarItem['rank']==0 and similarItem['category_id']!=6:
16017 kshitij.so 539
                get_mongo_connection().Catalog.Deals.update({ '_id' : similarItem['_id'] }, {'$set':{'showDeal':0,'prepaidDeal':0 }})
540
                continue
19153 kshitij.so 541
            if similarItem['netPriceAfterCashBack'] < bestPrice:
16017 kshitij.so 542
                bestOne = similarItem
19153 kshitij.so 543
                bestPrice = similarItem['netPriceAfterCashBack']
16017 kshitij.so 544
                bestSellerPoints = similarItem['bestSellerPoints']
19153 kshitij.so 545
            elif similarItem['netPriceAfterCashBack'] == bestPrice and bestSellerPoints < similarItem['bestSellerPoints']:
16017 kshitij.so 546
                bestOne = similarItem
19153 kshitij.so 547
                bestPrice = similarItem['netPriceAfterCashBack']
16017 kshitij.so 548
                bestSellerPoints = similarItem['bestSellerPoints']
549
            else:
550
                pass
13918 kshitij.so 551
        else:
16017 kshitij.so 552
            if mc.get("negative_deals") is None:
553
                populateNegativeDeals()
16172 kshitij.so 554
            if similarItem['in_stock'] == 0  or similarItem['_id'] in mc.get("negative_deals"):
16017 kshitij.so 555
                get_mongo_connection().Catalog.Deals.update({ '_id' : similarItem['_id'] }, {'$set':{'showDeal':0, 'prepaidDeal':0 }})
556
                continue
17751 kshitij.so 557
            if similarItem['source_id'] == SOURCE_MAP.get('SHOPCLUES.COM') and similarItem['rank']==0 and similarItem['category_id']!=6:
16017 kshitij.so 558
                get_mongo_connection().Catalog.Deals.update({ '_id' : similarItem['_id'] }, {'$set':{'showDeal':0,'prepaidDeal':0 }})
559
                continue
19153 kshitij.so 560
            if similarItem['netPriceAfterCashBack'] < prepaidBestPrice:
16017 kshitij.so 561
                prepaidBestOne = similarItem
19153 kshitij.so 562
                prepaidBestPrice = similarItem['netPriceAfterCashBack']
16017 kshitij.so 563
                prepaidBestSellerPoints = similarItem['bestSellerPoints']
19153 kshitij.so 564
            elif similarItem['netPriceAfterCashBack'] == prepaidBestPrice and prepaidBestSellerPoints < similarItem['bestSellerPoints']:
16017 kshitij.so 565
                prepaidBestOne = similarItem
19153 kshitij.so 566
                prepaidBestPrice = similarItem['netPriceAfterCashBack']
16017 kshitij.so 567
                prepaidBestSellerPoints = similarItem['bestSellerPoints']
568
            else:
569
                pass
17456 kshitij.so 570
    #print "bestOne ", bestOne
571
    #print "prepaid best one",  prepaidBestOne
16024 kshitij.so 572
    if bestOne is not None or prepaidBestOne is not None:
13918 kshitij.so 573
        for similarItem in similarItems:
574
            toUpdate.append(similarItem['_id'])
16023 kshitij.so 575
        if bestOne is not None:
576
            toUpdate.remove(bestOne['_id'])
577
            get_mongo_connection().Catalog.Deals.update({ '_id' : bestOne['_id'] }, {'$set':{'showDeal':1,'prepaidDeal':0 }})
578
        if prepaidBestOne is not None:
16069 kshitij.so 579
            if bestOne is not None:
19153 kshitij.so 580
                if prepaidBestOne['netPriceAfterCashBack'] < bestOne['netPriceAfterCashBack']: 
16069 kshitij.so 581
                    toUpdate.remove(prepaidBestOne['_id'])
582
                    get_mongo_connection().Catalog.Deals.update({ '_id' : prepaidBestOne['_id'] }, {'$set':{'showDeal':0,'prepaidDeal':1 }})
16072 kshitij.so 583
            else:
584
                toUpdate.remove(prepaidBestOne['_id'])
585
                get_mongo_connection().Catalog.Deals.update({ '_id' : prepaidBestOne['_id'] }, {'$set':{'showDeal':0,'prepaidDeal':1 }})
13918 kshitij.so 586
    if len(toUpdate) > 0:
16017 kshitij.so 587
        get_mongo_connection().Catalog.Deals.update({ '_id' : { "$in": toUpdate } }, {'$set':{'showDeal':0,'prepaidDeal':0 }},upsert=False, multi=True)
588
 
14342 kshitij.so 589
    print "Done with recomputing"
13829 kshitij.so 590
 
591
def getLatestPrice(skuBundleId, source_id):
592
    temp = []
593
    itemIds = list(get_mongo_connection().Catalog.MasterData.find({'skuBundleId':skuBundleId,'source_id' : source_id}))
16026 kshitij.so 594
    item = None
13829 kshitij.so 595
    for item in itemIds:
14309 kshitij.so 596
        item['dealFlag'] = 0
597
        item['dealType'] = 0
16510 kshitij.so 598
        item['dealUrl'] = ""
17674 kshitij.so 599
        if item['source_id'] ==5 and item['rank'] == 0 and item['category_id']!=6:
15912 kshitij.so 600
            continue
15187 kshitij.so 601
        if item['source_id'] ==3:
602
            item['marketPlaceUrl'] = item['marketPlaceUrl']+'?supc='+item.get('identifier')
14309 kshitij.so 603
        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']}))
604
        if len(manualDeals) > 0:
605
            item['dealFlag'] = 1
14760 kshitij.so 606
            item['dealType'] =manualDeals[0]['dealType']
16510 kshitij.so 607
            item['dealUrl'] = manualDeals[0]['dealUrl']
14760 kshitij.so 608
        info = returnLatestPrice(item, source_id)
19153 kshitij.so 609
        if item['source_id'] != SOURCE_MAP.get('PAYTM.COM'):
610
            data = calculateCashBack(item, info['available_price'])
611
        else:
612
            if info['codAvailable'] ==0:
613
                data = calculateCashBack(item, info['gross_price'])
14760 kshitij.so 614
            else:
19153 kshitij.so 615
                data = calculateCashBack(item, info['available_price'])  #No need, can be done in if with or clause.
616
 
617
        info['cash_back'] = data['cash_back']
618
        info['cash_back_type'] = data['cash_back_type']
619
        info['netPriceAfterCashBack'] = data['netPriceAfterCashBack']
620
        info['showNetPrice'] = data['showNetPrice']
19317 kshitij.so 621
        info['category_id'] = item['category_id']
622
        info['subCategoryId'] = item['subCategoryId']
19153 kshitij.so 623
        get_mongo_connection().Catalog.Deals.update({'_id':item['_id']},{"$set":{'netPriceAfterCashBack':info['netPriceAfterCashBack']}})
14760 kshitij.so 624
        temp.append(info)
16026 kshitij.so 625
    if item is not None:
626
        try:
627
            thread = threading.Thread(target=recomputeDeal, args = (item,))
628
            thread.daemon = True
629
            thread.start()    
630
        except:
631
            print traceback.print_exc()
632
            print "Unable to compute deal for ",skuBundleId
13829 kshitij.so 633
    return temp
634
 
13864 kshitij.so 635
def getLatestPriceById(id):
636
    item = list(get_mongo_connection().Catalog.MasterData.find({'_id':id}))
14309 kshitij.so 637
    item[0]['dealFlag'] = 0
638
    item[0]['dealType'] = 0
16510 kshitij.so 639
    item[0]['dealUrl'] = ""
640
 
14309 kshitij.so 641
    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']}))
642
    if len(manualDeals) > 0:
643
        item[0]['dealFlag'] = 1
15266 kshitij.so 644
        item[0]['dealType'] =manualDeals[0]['dealType']
16510 kshitij.so 645
        item[0]['dealUrl'] = manualDeals[0]['dealUrl']
14367 kshitij.so 646
 
14431 kshitij.so 647
    info = returnLatestPrice(item[0], item[0]['source_id'])
19153 kshitij.so 648
    if item[0]['source_id'] != SOURCE_MAP.get('PAYTM.COM'):
649
        data = calculateCashBack(item[0], info['available_price'])
650
    else:
651
        if info['codAvailable'] ==0:
652
            data = calculateCashBack(item[0], info['gross_price'])
653
        else:
654
            data = calculateCashBack(item[0], info['available_price'])  #No need, can be done in if with or clause.
655
 
656
    info['cash_back'] = data['cash_back']
657
    info['cash_back_type'] = data['cash_back_type']
658
    info['netPriceAfterCashBack'] = data['netPriceAfterCashBack']
659
    info['showNetPrice'] = data['showNetPrice']
660
    get_mongo_connection().Catalog.Deals.update({'_id':item[0]['_id']},{"$set":{'netPriceAfterCashBack':info['netPriceAfterCashBack']}})
14794 kshitij.so 661
    print info
14367 kshitij.so 662
    try:
15273 kshitij.so 663
        thread = threading.Thread(target=recomputeDeal, args = (item[0],))
14367 kshitij.so 664
        thread.daemon = True
665
        thread.start()    
666
    except:
667
        print "Unable to compute deal for ",item[0]['skuBundleId']
14431 kshitij.so 668
    return info
13829 kshitij.so 669
 
14828 kshitij.so 670
def updatePriceForNotificationBundles(skuBundleId):
15266 kshitij.so 671
    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 672
    for item in itemIds:
14833 kshitij.so 673
        print item['_id']
14828 kshitij.so 674
        item['dealFlag'] = 0
675
        item['dealType'] = 0
16510 kshitij.so 676
        item['dealUrl'] = ""
14828 kshitij.so 677
        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']}))
678
        if len(manualDeals) > 0:
679
            item['dealFlag'] = 1
680
            item['dealType'] =manualDeals[0]['dealType']
16510 kshitij.so 681
            item['dealUrl'] = manualDeals[0]['dealUrl']
14828 kshitij.so 682
        info = returnLatestPrice(item, item['source_id'],False)
683
        print info
684
 
13829 kshitij.so 685
def main():
15956 kshitij.so 686
    print datetime.now()
20313 kshitij.so 687
    print "returned %s"%(str(getLatestPriceById(23014)))
15956 kshitij.so 688
    print datetime.now()
13829 kshitij.so 689
if __name__=='__main__':
13971 kshitij.so 690
    main()
691