Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
13569 amit.gupta 1
'''
2
Created on Jan 15, 2015
3
 
4
@author: amit
5
'''
13690 amit.gupta 6
from BeautifulSoup import BeautifulSoup
13721 amit.gupta 7
from datetime import datetime, date, timedelta
13569 amit.gupta 8
from dtr import main
14412 amit.gupta 9
from dtr.dao import AffiliateInfo, Order, SubOrder, FlipkartAffiliateInfo
13690 amit.gupta 10
from dtr.main import getBrowserObject, getStore, ParseException, ungzipResponse, \
14398 amit.gupta 11
    Store as MStore, sourceMap, tprint
15539 amit.gupta 12
from dtr.reports.affiliatereco import getSkuData
13
from dtr.storage.DataService import Clicks, Users, FlipkartOrders
16209 amit.gupta 14
from dtr.utils import utils
15539 amit.gupta 15
from dtr.utils.utils import fetchResponseUsingProxy
16
from elixir import *
13690 amit.gupta 17
from pprint import pprint
18
from pymongo.mongo_client import MongoClient
17238 amit.gupta 19
import StringIO
20
import csv
13690 amit.gupta 21
import hashlib
13658 manas 22
import importlib
13690 amit.gupta 23
import json
24
import mechanize
14412 amit.gupta 25
import pymongo
13658 manas 26
import re
14338 amit.gupta 27
import traceback
13658 manas 28
import urllib
17238 amit.gupta 29
import zipfile
30
import urllib2
13658 manas 31
USERNAME='saholic1@gmail.com'
32
PASSWORD='spice@2020'
33
ORDER_TRACK_URL='https://m.flipkart.com/order_details'
17238 amit.gupta 34
AFFILIATE_URL='https://affiliate.flipkart.com/'
35
AFFILIATE_LOGIN_URL='https://affiliate.flipkart.com/a_login'
36
AFF_REPORT_URL = "https://affiliate.flipkart.com/downloads/a_downloadRequest?type=OrdersReport&parameters=%s"
37
AFF_DOWNLOAD_URL="https://affiliate.flipkart.com/downloads/file?id=%s"
13690 amit.gupta 38
AFF_STATUS_CANCELLED='cancelled'
39
AFF_STATUS_APPROVED='approved'
40
AFF_STATUS_DISAPPROVED='disapproved'
41
AFF_STATUS_PENDING='pending'
17238 amit.gupta 42
statuses = [AFF_STATUS_CANCELLED, AFF_STATUS_APPROVED, AFF_STATUS_DISAPPROVED,AFF_STATUS_PENDING ]
15539 amit.gupta 43
categoryMap = {3:"Mobiles", 5:"Tablets"}
13658 manas 44
 
13679 manas 45
 
13781 amit.gupta 46
class Store(MStore):
13658 manas 47
    OrderStatusMap = {
14679 amit.gupta 48
                      main.Store.ORDER_PLACED : ['approval', 'processing', 'shipping'],
49
                      main.Store.ORDER_DELIVERED : ['your item has been delivered'],
14680 amit.gupta 50
                      main.Store.ORDER_SHIPPED : ['in transit', 'shipment yet to be delivered'],
51
                      main.Store.ORDER_CANCELLED : ['shipment is returned', 'your item has been returned', 'your shipment has been cancelled', 'your shipment has been cancelled.']
13658 manas 52
 
53
                      }
54
    def __init__(self,store_id):
55
        client = MongoClient('mongodb://localhost:27017/')
56
        self.db = client.dtr
57
        super(Store, self).__init__(store_id)
58
 
13569 amit.gupta 59
    def getName(self):
60
        return "flipkart"
61
 
17238 amit.gupta 62
 
63
    def requestDownload(self):
64
    #"https://affiliate.flipkart.com/downloads/a_downloadRequest?type=OrdersReport&parameters=%7B%22filter%22%3A%22approved%22%2C%22till%22%3A%222015-10-03%22%2C%22from%22%3A%222015-04-03%22%7D"
65
        requestReportUrl = "https://affiliate.flipkart.com/downloads/a_downloadRequest?type=OrdersReport&parameters=%s"
66
        br = getBrowserObject()
67
        br.set_debug_responses(True)
68
        br.open(AFFILIATE_URL)
69
        response = br.response()  # copy
70
        #token =  re.findall('window.__FK = "(.*?)"', utils.ungzipResponse(response), re.IGNORECASE)[0]
71
        data = {
72
                    'j_username':'saholic1@gmail.com',
73
                    'j_password':'spice@2020'
74
            }
75
        print utils.ungzipResponse(br.open(AFFILIATE_LOGIN_URL, urllib.urlencode(data)))
76
        till = datetime.strftime(date.today(),"%Y-%m-%d")
77
        start = datetime.strftime(date.today() - timedelta(4), "%Y-%m-%d")
78
        #target = open("dowloadreportids", 'w')
79
        #target.truncate()
80
        for status in statuses:
81
            #try:
82
                data = {"till":till, "from":start, "filter":status}
83
                print json.dumps(data)
84
                request = requestReportUrl%(urllib.quote_plus(json.dumps(data).replace(" ", "")))
85
                print request
86
                response = utils.ungzipResponse(br.open(request))
87
                response = json.loads(response)
88
                print response
89
                if(response['status']=="OK"):
90
                    self.db.flipkartdownloadids.save(response)
91
                else:
92
                    utils.sendmail(['amit.gupta@shop2020.in'], '', "Could not get request data for Flipkart Affiliate downlaod")
93
                    #break 
94
            #except:
95
                utils.sendmail(['amit.gupta@shop2020.in'], '', "Could not get request data for Flipkart Affiliate downlaod due to Internal Server Error")
96
                #break 
97
 
98
 
13690 amit.gupta 99
    def scrapeStoreOrders(self,):
100
        orders = self._getActiveOrders()
13721 amit.gupta 101
        for order in orders:
14692 amit.gupta 102
            print "Order", self.store_name, order['orderId']
14398 amit.gupta 103
            try:
104
                closed = True
105
                url = ORDER_TRACK_URL + re.findall('.*(\?.*?)$', order['orderSuccessUrl'],re.IGNORECASE)[0]
14757 amit.gupta 106
                page = fetchResponseUsingProxy(url)
14398 amit.gupta 107
                soup = BeautifulSoup(page,convertEntities=BeautifulSoup.HTML_ENTITIES)
108
 
109
                sections = soup.findAll("div", {"class":"ui-app-card-body"})
110
                sections.pop(1)
13721 amit.gupta 111
 
14398 amit.gupta 112
                mainOrder = soup.find("ul",{"class":"m-bottom p-cart"})
113
                fkSubOrders = mainOrder.findAll("li")
114
 
115
                #remove unwanted list
116
                fkSubOrders.pop(-1)
117
 
118
 
119
                bulk = self.db.merchantOrder.initialize_ordered_bulk_op()
120
                #fetching suborders details
121
                for subOrder in fkSubOrders:
122
                    updateMap = {}
123
                    y = subOrder.find("header").findAll("span")
124
                    for suborderId in y:
125
                        if "value emp" in str(suborderId):
126
                            merchantSubOrderId = suborderId.text
127
                            break
14692 amit.gupta 128
                    ul = subOrder.find("ul")
129
                    if ul is None:
130
                        ul = subOrder.findAll("div", recursive=False)[0].div.div
131
                    orderItems = ul.findAll("div", recursive=False)
14398 amit.gupta 132
                    i=0
133
                    for orderItem in orderItems:
134
                        closedStatus = False
135
                        merchantSubOrderId = merchantSubOrderId + str(i)
136
                        subOrder =  self._isSubOrderActive(order, merchantSubOrderId)
137
                        if subOrder is None:
138
                            break
14460 amit.gupta 139
                        elif subOrder['closed']:
140
                            break
14398 amit.gupta 141
                        findMap = {"orderId": order['orderId'], "subOrders.merchantSubOrderId": merchantSubOrderId}
142
                        divs = orderItem.findAll('div', recursive=False)
143
                        orderTracking = divs[2]
144
                        orderTrackingDetDiv = divs[3].find('div',{'class':'c-tabs-content m-top active'})
145
                        orderTrackingDet = orderTrackingDetDiv.find('div',{'class':re.compile('tracking-remark')}).text
146
                        updateMap["subOrders.$.detailedStatus"] = orderTrackingDet
14617 amit.gupta 147
                        status = self._getStatusFromDetailedStatus(orderTrackingDet)
14398 amit.gupta 148
                        tr = orderTracking.findAll("div",{"class":"tap-bullet-area c-tab-trigger"})
149
 
150
                        cashbackStatus = subOrder.get("cashBackStatus") 
151
                        if "approveDetails-complete" in str(tr):
152
                            if "processingDetails-complete" in str(tr):
153
                                if "shippingDetails-complete" in str(tr):
154
                                    if "delivery-complete" in str(tr):
155
                                        status = MStore.ORDER_DELIVERED
156
                                        if cashbackStatus == Store.CB_PENDING:
157
                                            cashbackStatus = Store.CB_APPROVED
158
                                        closedStatus = True
159
                                    else:     
160
                                        status = MStore.ORDER_SHIPPED
161
                                        courierTrackAnchor = orderTrackingDetDiv.find('a')
162
                                        trackingUrl = courierTrackAnchor("href")
163
                                        trackingText = courierTrackAnchor.text
164
                                        courierArr = trackingText.split(' : ')
165
                                        updateMap["subOrders.$.trackingUrl"] = trackingUrl
166
                                        updateMap["subOrders.$.trackingNumber"] = courierArr[1]
167
                                        updateMap["subOrders.$.courierName"] = courierArr[0]
168
                                else:
14692 amit.gupta 169
                                    status = MStore.ORDER_CANCELLED
170
                                    closedStatus = True
171
                                    if cashbackStatus == Store.CB_PENDING:
172
                                        cashbackStatus = Store.CB_CANCELLED
14398 amit.gupta 173
                            else: 
13721 amit.gupta 174
                                status = MStore.ORDER_PLACED
14398 amit.gupta 175
                        elif str(tr) in ["approveDetails-ongoing"]:
176
                            status=MStore.ORDER_PLACED             
14617 amit.gupta 177
                        if "dead" in str(tr) or status==MStore.ORDER_CANCELLED:
14398 amit.gupta 178
                            status = MStore.ORDER_CANCELLED
179
                            closedStatus = True
180
                            if cashbackStatus == Store.CB_PENDING:
181
                                cashbackStatus = Store.CB_CANCELLED
182
 
183
                        updateMap["subOrders.$.cashBackStatus"] = cashbackStatus
184
                        updateMap["subOrders.$.status"] = status
185
                        updateMap["subOrders.$.closed"] = closedStatus
186
                        if closed:
187
                            closed = closedStatus
188
                        bulk.find(findMap).update({'$set' : updateMap})
14692 amit.gupta 189
                bulk.find({'orderId': order['orderId']}).update({'$set':{'closed': closed, 'parseError':False}})
14398 amit.gupta 190
                bulk.execute()            
191
            except:
14692 amit.gupta 192
                self.db.merchantOrder.update({"orderId":order['orderId']}, {"$set":{"parseError":True}})
14847 amit.gupta 193
                tprint("Could not update " + str(order['orderId']) + ' for store ' + self.getName())
14398 amit.gupta 194
                traceback.print_exc()
17238 amit.gupta 195
 
196
    def scrapeAffiliate(self, deltaDays=0):
197
        if deltaDays is None:
198
            deltaDays=0
199
        endDate=date.today() - timedelta(days=1)
200
        startDate = endDate - timedelta(days=deltaDays)
15539 amit.gupta 201
 
17238 amit.gupta 202
        endDate = datetime.strftime(endDate, "%Y-%m-%d")
203
        startDate = datetime.strftime(startDate, "%Y-%m-%d")
17241 amit.gupta 204
        url  = "https://affiliate-api.flipkart.net/affiliate/report/orders/detail/json?startDate=%s&endDate=%s&status=%s&offset=0"
17238 amit.gupta 205
 
206
        for status in statuses:
17241 amit.gupta 207
            nextUrl = url%(startDate, endDate, status)
208
            while nextUrl:
209
                req = urllib2.Request(nextUrl)
17238 amit.gupta 210
                req.add_header('Fk-Affiliate-Id', 'saholic1g')
211
                req.add_header('Fk-Affiliate-Token', 'a757444e260c46be8c4aeb20352246ac')
212
                resp = urllib2.urlopen(req)
213
                resString = json.loads(resp.read())
214
                orderList = resString["orderList"]
215
                if orderList:
216
                    for order in orderList:
217
                        order['sales'] = int(order['sales']['amount'])
218
                        order['tentativeCommission'] = int(order['tentativeCommission']['amount'])
219
                        subTagId = order.get("affExtParam1")
220
                        userId = None
221
                        email = None
222
                        if subTagId:
223
                            click = session.query(Clicks).filter_by(tag = subTagId).first()
224
                            if click is not None:
225
                                userId= click.user_id 
226
                                user = session.query(Users.email).filter_by(id = userId).first()
227
                                if user is not None:
228
                                    email = user.email
229
 
230
                        flipkartOrder = FlipkartOrders()
231
                        flipkartOrder.subtagId = subTagId
232
                        flipkartOrder.user_id = userId
233
                        flipkartOrder.identifier = order.get("identifier")
234
                        flipkartOrder.email = email
17240 amit.gupta 235
                        flipkartOrder.created = datetime.strptime(order.get("orderDate"), "%d-%m-%Y")
17238 amit.gupta 236
                        flipkartOrder.status = order.get("status")
237
                        flipkartOrder.title = order.get("title")
238
                        flipkartOrder.price = order.get("price")
239
                        flipkartOrder.quantity = order.get("quantity")
240
                        flipkartOrder.productCode = order.get("productId")
241
                        flipkartOrder.affiliateOrderItemId = order.get("affiliateOrderItemId")
242
                        flipkartOrder.payOut = order['tentativeCommission']
243
                        flipkartOrder.payOutPercentage = order['commissionRate']
244
                        skuData = getSkuData(2, order.get("productId"))
245
                        if skuData is not None:
246
                            flipkartOrder.catalogId = skuData.get("skuBundleId")
247
                            flipkartOrder.brand = skuData.get("brand")
248
                            flipkartOrder.model = skuData.get("model_name")
249
                            flipkartOrder.category = categoryMap.get(skuData.get("category_id"))
250
                            flipkartOrder.title =skuData.get("source_product_name")
251
 
252
                    session.commit()
17241 amit.gupta 253
                    nextUrl = resString['next']  
13721 amit.gupta 254
 
14412 amit.gupta 255
    def _saveToAffiliate(self, offers):
17238 amit.gupta 256
        collection = self.db.flipkartOrderAffiliateInfo1
257
        count=0
258
        for row in offers:
259
            if count==0:
260
                count += 1
261
                continue
262
            offer = self.covertToObj(row)
263
            collection.save(offer)
264
 
265
    def covertToObj(self,offer):
266
        affiliateorderitemid,title,productid,category,quantity,sales,price,commissionrate,tentativecommission,status,orderdate,saleschannel,customertype,affextparam1, affextparam2  = offer
267
        saleMap = {
268
               "affiliateorderitemid":affiliateorderitemid,
269
                "title":title,
270
                "productid":productid,
271
                "category":category,
272
                "quantity":quantity,
273
                "saleAmount":sales,
274
                "price":price,
275
                "commissionrate":commissionrate,
276
                "payOut":tentativecommission,
277
                "conversionStatus":status,
278
                "saleDate":orderdate,
279
                "saleschannel":saleschannel,
280
                "customertype":customertype,
281
                "affextparam1":affextparam1,
282
                "_id":affiliateorderitemid
283
        }
284
        return saleMap
14412 amit.gupta 285
 
286
 
13658 manas 287
    def parseOrderRawHtml(self, orderId, subTagId, userId, rawHtml, orderSuccessUrl):
13796 amit.gupta 288
        resp= {}
13781 amit.gupta 289
        try:
290
            br = getBrowserObject()
291
            url = ORDER_TRACK_URL + re.findall('.*(\?.*?)$', orderSuccessUrl,re.IGNORECASE)[0]
292
 
293
            response = br.open(url)
294
            page = ungzipResponse(response)
295
 
296
            merchantOrderId = re.findall('reference_id=(.*?)&', orderSuccessUrl,re.IGNORECASE)[0]
297
            print merchantOrderId
298
 
299
            soup = BeautifulSoup(page,convertEntities=BeautifulSoup.HTML_ENTITIES)
300
 
301
            sections = soup.findAll("div", {"class":"ui-app-card-body"})
302
            sections.pop(1)
303
 
304
            merchantOrder = Order(orderId, userId, subTagId, self.store_id, orderSuccessUrl)
14145 amit.gupta 305
            merchantOrder.orderTrackingUrl = url
13781 amit.gupta 306
            for data in sections:
307
                name = data.findAll("span")
308
                i=0
309
                while i< len(name):
310
                    if "key" in str(name[i]):
311
                        if "Grand Total" in str(name[i]):
312
                            #Total Amount
313
                            merchantOrder.paidAmount = int(re.findall(r'\d+', name[i+1].text)[0])
314
                        elif "Order Date" in str(name[i]):
315
                            merchantOrder.placedOn = name[i+1].text 
316
                    i=i+1    
317
 
318
            merchantOrder.merchantOrderId = merchantOrderId
319
 
320
            mainOrder = soup.find("ul",{"class":"m-bottom p-cart"})
321
            fkSubOrders = mainOrder.findAll("li")
322
            #remove unwanted list
323
            fkSubOrders.pop(-1)
324
            subOrders = []
325
            merchantOrder.subOrders = subOrders
326
 
327
            #fetching suborders details
328
            for subOrder in fkSubOrders:
329
                y = subOrder.find("header").findAll("span")
330
                for suborderId in y:
331
                    if "value emp" in str(suborderId):
332
                        merchantSubOrderId = suborderId.text
333
                        break
334
                orderItems = subOrder.find("ul").findAll("div", recursive=False)
335
                i=0
336
                for orderItem in orderItems:
337
                    merchantOrder.placedOn
338
                    merchantSubOrderId = merchantSubOrderId + str(i)
339
                    divs = orderItem.findAll('div', recursive=False)
340
                    content = divs[0]
341
                    orderTracking = divs[2]
342
                    orderTrackingDet = divs[3]
343
 
344
 
345
                    imgUrl = content.find('img')['src']
346
                    lineDet = content.find("div",{"class":"product-info"})
347
                    productTitle = lineDet.find("a",{"class":"product-title"}).text
348
                    productUrl =  str(lineDet.find("a")['href'])
349
 
350
                    start='pid='
351
                    s=str(lineDet.find("a")['href'])
14339 amit.gupta 352
                    productCode = re.findall(re.escape(start)+"(.*)",s)[0].strip()
13781 amit.gupta 353
                    mname = lineDet.findAll("span")
354
                    k=0
355
                    while k<len(mname):
356
                        if "note" in str(mname[k]):
357
                            if "Color:" in str(mname[k]):
358
                                productTitle = productTitle + " " + mname[k+1].text
359
 
360
                            elif "Qty:" in str(mname[k]):
361
                                quantity = int(mname[k+1].text)
362
                            elif "Subtotal:" in str(mname[k]):
14343 amit.gupta 363
                                amountPaid = int(re.findall(r'\d+', mname[k+1].text)[0])
13781 amit.gupta 364
                            elif "Delivery:" in str(mname[k]):
365
                                #Delivery Date for sub order
366
                                print "Delivery Date " +mname[k+1].text
367
                        k=k+1
14343 amit.gupta 368
                    merchantsubOrder = SubOrder(productTitle, productUrl, merchantOrder.placedOn, amountPaid,MStore.ORDER_PLACED, quantity)
13781 amit.gupta 369
                    merchantsubOrder.imgUrl  = imgUrl
370
                    merchantsubOrder.productCode = productCode
371
                    merchantsubOrder.merchantSubOrderId = merchantSubOrderId
14337 amit.gupta 372
                    print "productCode", productCode
14340 amit.gupta 373
                    print "amountPaid", amountPaid
14336 amit.gupta 374
                    cashbackAmount, cashbackPercent = self.getCashbackAmount(productCode, amountPaid)
13781 amit.gupta 375
                    cashbackStatus = Store.CB_PENDING
376
                    if cashbackAmount <= 0:
377
                        cashbackStatus = Store.CB_NA
378
                    merchantsubOrder.cashBackAmount = cashbackAmount
379
                    merchantsubOrder.cashBackStatus = cashbackStatus      
380
                    merchantsubOrder.cashBackPercentage = cashbackPercent      
381
 
382
                    subOrders.append(merchantsubOrder)
383
                    #To track shipping details         
384
                    status=-1    
385
                    tr = orderTracking.findAll("div",{"class":"tap-bullet-area c-tab-trigger"})
386
                    if "approveDetails-complete" in str(tr):
387
                        if "processingDetails-complete" in str(tr):
388
                            if "shippingDetails-complete" in str(tr):
389
                                if "delivery-complete" in str(tr):
390
                                    status = MStore.ORDER_DELIVERED
391
                                else:     
392
                                    status = MStore.ORDER_SHIPPED
393
                                    orderTracking.find('div', {'class':'tracking-remark active'})
394
                            else:
395
                                status = MStore.ORDER_PLACED
396
                        else: 
13690 amit.gupta 397
                            status = MStore.ORDER_PLACED
13781 amit.gupta 398
                    elif str(tr) in ["approveDetails-ongoing"]:
399
                        status=MStore.ORDER_PLACED             
14692 amit.gupta 400
                    if "dead" in str(tr) or "shippingDetails-returnOngoing" in str(tr) or "shippingDetails-return" in str(tr):
13781 amit.gupta 401
                        status = MStore.ORDER_CANCELLED    
402
                    print "Sub Order Status " + str(status)                      
403
 
404
                    trackingDetailsActive = orderTrackingDet.find("div",{"class":"c-tabs-content m-top active"})
405
                    print "Sub order tracking description " + trackingDetailsActive.text
14312 amit.gupta 406
            if self._saveToOrder(todict(merchantOrder)):
407
                resp['result'] = 'ORDER_CREATED'
408
            else:
409
                resp['result'] = 'ORDER_ALREADY_CREATED_IGNORED'
410
 
13796 amit.gupta 411
            return resp 
13781 amit.gupta 412
        except:
14338 amit.gupta 413
            traceback.print_exc()
14312 amit.gupta 414
            resp['result'] = 'ORDER_NOT_CREATED'
13796 amit.gupta 415
            return resp 
13781 amit.gupta 416
 
14617 amit.gupta 417
    def _getStatusFromDetailedStatus(self, detailedStatus):
418
        for key, value in Store.OrderStatusMap.iteritems():
14626 amit.gupta 419
            if detailedStatus.lower() in value:
14617 amit.gupta 420
                return key
14676 amit.gupta 421
        print "Detailed Status need to be mapped", detailedStatus, "Store:", self.store_name
14617 amit.gupta 422
        raise ParseException("_getStatusFromDetailedStatus", "Found new order status" + detailedStatus)
13658 manas 423
 
424
    def flipkartOrderTracking(self, orderId, subTagId, userId, rawHtml, orderSuccessUrl):
425
        br = getBrowserObject()
426
        url = ORDER_TRACK_URL + re.findall('.*(\?.*?)$', orderSuccessUrl,re.IGNORECASE)[0]
427
 
428
        response = br.open(url)
429
        page = ungzipResponse(response, br)
430
 
431
 
432
        soup = BeautifulSoup(page,convertEntities=BeautifulSoup.HTML_ENTITIES)
433
 
434
 
435
        mainOrder = soup.findAll("ul",{"class":"m-bottom p-cart"})
436
        #fetching suborders details
437
        for subOrder in mainOrder:
438
            subOrd = subOrder.findAll("li")
439
 
440
            subOrd.pop(len(subOrd)-1)
441
            for productInfo in subOrd:
442
                status=-1    
443
                #To track shipping details         
444
                n = productInfo.findAll("div",{"class":"tracking-progress grid-row cf"})
445
                for trackingStatus in n:
446
                    tr = trackingStatus.findAll("div",{"class":"tap-bullet-area c-tab-trigger"})
447
                    if "approveDetails-complete" in str(tr):
13679 manas 448
                        print "Here"
13658 manas 449
                        if "processingDetails-complete" in str(tr):
13679 manas 450
                            print "There"
13658 manas 451
                            if "shippingDetails-complete" in str(tr):
13679 manas 452
                                print "Share"
13658 manas 453
                                if "delivery-complete" in str(tr):
13679 manas 454
                                    print "Last"
13658 manas 455
                                    status = 3
456
                                else:     
457
                                    status = 2
458
                            else:
459
                                status = 1 
460
                        else: 
461
                            status = 0     
462
                    if "dead" in str(tr):
463
                        status = 4    
464
                print status                      
465
 
466
 
467
def _saveToOrderFlipkart(self, order):
468
        collection = self.db.merchantOrder
469
        order = collection.insert(order)
470
 
13690 amit.gupta 471
 
472
 
473
def hex_md5(password):
474
    m = hashlib.md5()
475
    print(m.digest())
476
 
13658 manas 477
def main():
16210 amit.gupta 478
    store = getStore(2)
17238 amit.gupta 479
    store.scrapeAffiliate(200)
13679 manas 480
 
13690 amit.gupta 481
 
13658 manas 482
 
13690 amit.gupta 483
 
16209 amit.gupta 484
 
13658 manas 485
def todict(obj, classkey=None):
486
    if isinstance(obj, dict):
487
        data = {}
488
        for (k, v) in obj.items():
489
            data[k] = todict(v, classkey)
490
        return data
491
    elif hasattr(obj, "_ast"):
492
        return todict(obj._ast())
493
    elif hasattr(obj, "__iter__"):
494
        return [todict(v, classkey) for v in obj]
495
    elif hasattr(obj, "__dict__"):
496
        data = dict([(key, todict(value, classkey)) 
497
            for key, value in obj.__dict__.iteritems() 
498
            if not callable(value) and not key.startswith('_')])
499
        if classkey is not None and hasattr(obj, "__class__"):
500
            data[classkey] = obj.__class__.__name__
501
        return data
502
    else:
13690 amit.gupta 503
        return obj
504
 
16209 amit.gupta 505
if __name__ == '__main__':
506
        main()
14145 amit.gupta 507