Subversion Repositories SmartDukaan

Rev

Rev 17238 | Rev 17241 | 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")
204
        url  = "https://affiliate-api.flipkart.net/affiliate/report/orders/detail/json?startDate=%s&endDate=%s&status=%s&offset=%s"
205
 
206
        for status in statuses:
207
            offset=-1
208
            while True:
209
                offset += 1
210
                reqUlrl = url%(startDate, endDate, status, offset) 
211
                req = urllib2.Request(reqUlrl)
212
                req.add_header('Fk-Affiliate-Id', 'saholic1g')
213
                req.add_header('Fk-Affiliate-Token', 'a757444e260c46be8c4aeb20352246ac')
214
                resp = urllib2.urlopen(req)
215
                resString = json.loads(resp.read())
216
                orderList = resString["orderList"]
217
                if orderList:
218
                    for order in orderList:
219
                        order['sales'] = int(order['sales']['amount'])
220
                        order['tentativeCommission'] = int(order['tentativeCommission']['amount'])
221
                        subTagId = order.get("affExtParam1")
222
                        userId = None
223
                        email = None
224
                        if subTagId:
225
                            click = session.query(Clicks).filter_by(tag = subTagId).first()
226
                            if click is not None:
227
                                userId= click.user_id 
228
                                user = session.query(Users.email).filter_by(id = userId).first()
229
                                if user is not None:
230
                                    email = user.email
231
 
232
                        flipkartOrder = FlipkartOrders()
233
                        flipkartOrder.subtagId = subTagId
234
                        flipkartOrder.user_id = userId
235
                        flipkartOrder.identifier = order.get("identifier")
236
                        flipkartOrder.email = email
17240 amit.gupta 237
                        flipkartOrder.created = datetime.strptime(order.get("orderDate"), "%d-%m-%Y")
17238 amit.gupta 238
                        flipkartOrder.status = order.get("status")
239
                        flipkartOrder.title = order.get("title")
240
                        flipkartOrder.price = order.get("price")
241
                        flipkartOrder.quantity = order.get("quantity")
242
                        flipkartOrder.productCode = order.get("productId")
243
                        flipkartOrder.affiliateOrderItemId = order.get("affiliateOrderItemId")
244
                        flipkartOrder.payOut = order['tentativeCommission']
245
                        flipkartOrder.payOutPercentage = order['commissionRate']
246
                        skuData = getSkuData(2, order.get("productId"))
247
                        if skuData is not None:
248
                            flipkartOrder.catalogId = skuData.get("skuBundleId")
249
                            flipkartOrder.brand = skuData.get("brand")
250
                            flipkartOrder.model = skuData.get("model_name")
251
                            flipkartOrder.category = categoryMap.get(skuData.get("category_id"))
252
                            flipkartOrder.title =skuData.get("source_product_name")
253
 
254
                    session.commit()
255
                else:
256
                    break
13721 amit.gupta 257
 
14412 amit.gupta 258
    def _saveToAffiliate(self, offers):
17238 amit.gupta 259
        collection = self.db.flipkartOrderAffiliateInfo1
260
        count=0
261
        for row in offers:
262
            if count==0:
263
                count += 1
264
                continue
265
            offer = self.covertToObj(row)
266
            collection.save(offer)
267
 
268
    def covertToObj(self,offer):
269
        affiliateorderitemid,title,productid,category,quantity,sales,price,commissionrate,tentativecommission,status,orderdate,saleschannel,customertype,affextparam1, affextparam2  = offer
270
        saleMap = {
271
               "affiliateorderitemid":affiliateorderitemid,
272
                "title":title,
273
                "productid":productid,
274
                "category":category,
275
                "quantity":quantity,
276
                "saleAmount":sales,
277
                "price":price,
278
                "commissionrate":commissionrate,
279
                "payOut":tentativecommission,
280
                "conversionStatus":status,
281
                "saleDate":orderdate,
282
                "saleschannel":saleschannel,
283
                "customertype":customertype,
284
                "affextparam1":affextparam1,
285
                "_id":affiliateorderitemid
286
        }
287
        return saleMap
14412 amit.gupta 288
 
289
 
13658 manas 290
    def parseOrderRawHtml(self, orderId, subTagId, userId, rawHtml, orderSuccessUrl):
13796 amit.gupta 291
        resp= {}
13781 amit.gupta 292
        try:
293
            br = getBrowserObject()
294
            url = ORDER_TRACK_URL + re.findall('.*(\?.*?)$', orderSuccessUrl,re.IGNORECASE)[0]
295
 
296
            response = br.open(url)
297
            page = ungzipResponse(response)
298
 
299
            merchantOrderId = re.findall('reference_id=(.*?)&', orderSuccessUrl,re.IGNORECASE)[0]
300
            print merchantOrderId
301
 
302
            soup = BeautifulSoup(page,convertEntities=BeautifulSoup.HTML_ENTITIES)
303
 
304
            sections = soup.findAll("div", {"class":"ui-app-card-body"})
305
            sections.pop(1)
306
 
307
            merchantOrder = Order(orderId, userId, subTagId, self.store_id, orderSuccessUrl)
14145 amit.gupta 308
            merchantOrder.orderTrackingUrl = url
13781 amit.gupta 309
            for data in sections:
310
                name = data.findAll("span")
311
                i=0
312
                while i< len(name):
313
                    if "key" in str(name[i]):
314
                        if "Grand Total" in str(name[i]):
315
                            #Total Amount
316
                            merchantOrder.paidAmount = int(re.findall(r'\d+', name[i+1].text)[0])
317
                        elif "Order Date" in str(name[i]):
318
                            merchantOrder.placedOn = name[i+1].text 
319
                    i=i+1    
320
 
321
            merchantOrder.merchantOrderId = merchantOrderId
322
 
323
            mainOrder = soup.find("ul",{"class":"m-bottom p-cart"})
324
            fkSubOrders = mainOrder.findAll("li")
325
            #remove unwanted list
326
            fkSubOrders.pop(-1)
327
            subOrders = []
328
            merchantOrder.subOrders = subOrders
329
 
330
            #fetching suborders details
331
            for subOrder in fkSubOrders:
332
                y = subOrder.find("header").findAll("span")
333
                for suborderId in y:
334
                    if "value emp" in str(suborderId):
335
                        merchantSubOrderId = suborderId.text
336
                        break
337
                orderItems = subOrder.find("ul").findAll("div", recursive=False)
338
                i=0
339
                for orderItem in orderItems:
340
                    merchantOrder.placedOn
341
                    merchantSubOrderId = merchantSubOrderId + str(i)
342
                    divs = orderItem.findAll('div', recursive=False)
343
                    content = divs[0]
344
                    orderTracking = divs[2]
345
                    orderTrackingDet = divs[3]
346
 
347
 
348
                    imgUrl = content.find('img')['src']
349
                    lineDet = content.find("div",{"class":"product-info"})
350
                    productTitle = lineDet.find("a",{"class":"product-title"}).text
351
                    productUrl =  str(lineDet.find("a")['href'])
352
 
353
                    start='pid='
354
                    s=str(lineDet.find("a")['href'])
14339 amit.gupta 355
                    productCode = re.findall(re.escape(start)+"(.*)",s)[0].strip()
13781 amit.gupta 356
                    mname = lineDet.findAll("span")
357
                    k=0
358
                    while k<len(mname):
359
                        if "note" in str(mname[k]):
360
                            if "Color:" in str(mname[k]):
361
                                productTitle = productTitle + " " + mname[k+1].text
362
 
363
                            elif "Qty:" in str(mname[k]):
364
                                quantity = int(mname[k+1].text)
365
                            elif "Subtotal:" in str(mname[k]):
14343 amit.gupta 366
                                amountPaid = int(re.findall(r'\d+', mname[k+1].text)[0])
13781 amit.gupta 367
                            elif "Delivery:" in str(mname[k]):
368
                                #Delivery Date for sub order
369
                                print "Delivery Date " +mname[k+1].text
370
                        k=k+1
14343 amit.gupta 371
                    merchantsubOrder = SubOrder(productTitle, productUrl, merchantOrder.placedOn, amountPaid,MStore.ORDER_PLACED, quantity)
13781 amit.gupta 372
                    merchantsubOrder.imgUrl  = imgUrl
373
                    merchantsubOrder.productCode = productCode
374
                    merchantsubOrder.merchantSubOrderId = merchantSubOrderId
14337 amit.gupta 375
                    print "productCode", productCode
14340 amit.gupta 376
                    print "amountPaid", amountPaid
14336 amit.gupta 377
                    cashbackAmount, cashbackPercent = self.getCashbackAmount(productCode, amountPaid)
13781 amit.gupta 378
                    cashbackStatus = Store.CB_PENDING
379
                    if cashbackAmount <= 0:
380
                        cashbackStatus = Store.CB_NA
381
                    merchantsubOrder.cashBackAmount = cashbackAmount
382
                    merchantsubOrder.cashBackStatus = cashbackStatus      
383
                    merchantsubOrder.cashBackPercentage = cashbackPercent      
384
 
385
                    subOrders.append(merchantsubOrder)
386
                    #To track shipping details         
387
                    status=-1    
388
                    tr = orderTracking.findAll("div",{"class":"tap-bullet-area c-tab-trigger"})
389
                    if "approveDetails-complete" in str(tr):
390
                        if "processingDetails-complete" in str(tr):
391
                            if "shippingDetails-complete" in str(tr):
392
                                if "delivery-complete" in str(tr):
393
                                    status = MStore.ORDER_DELIVERED
394
                                else:     
395
                                    status = MStore.ORDER_SHIPPED
396
                                    orderTracking.find('div', {'class':'tracking-remark active'})
397
                            else:
398
                                status = MStore.ORDER_PLACED
399
                        else: 
13690 amit.gupta 400
                            status = MStore.ORDER_PLACED
13781 amit.gupta 401
                    elif str(tr) in ["approveDetails-ongoing"]:
402
                        status=MStore.ORDER_PLACED             
14692 amit.gupta 403
                    if "dead" in str(tr) or "shippingDetails-returnOngoing" in str(tr) or "shippingDetails-return" in str(tr):
13781 amit.gupta 404
                        status = MStore.ORDER_CANCELLED    
405
                    print "Sub Order Status " + str(status)                      
406
 
407
                    trackingDetailsActive = orderTrackingDet.find("div",{"class":"c-tabs-content m-top active"})
408
                    print "Sub order tracking description " + trackingDetailsActive.text
14312 amit.gupta 409
            if self._saveToOrder(todict(merchantOrder)):
410
                resp['result'] = 'ORDER_CREATED'
411
            else:
412
                resp['result'] = 'ORDER_ALREADY_CREATED_IGNORED'
413
 
13796 amit.gupta 414
            return resp 
13781 amit.gupta 415
        except:
14338 amit.gupta 416
            traceback.print_exc()
14312 amit.gupta 417
            resp['result'] = 'ORDER_NOT_CREATED'
13796 amit.gupta 418
            return resp 
13781 amit.gupta 419
 
14617 amit.gupta 420
    def _getStatusFromDetailedStatus(self, detailedStatus):
421
        for key, value in Store.OrderStatusMap.iteritems():
14626 amit.gupta 422
            if detailedStatus.lower() in value:
14617 amit.gupta 423
                return key
14676 amit.gupta 424
        print "Detailed Status need to be mapped", detailedStatus, "Store:", self.store_name
14617 amit.gupta 425
        raise ParseException("_getStatusFromDetailedStatus", "Found new order status" + detailedStatus)
13658 manas 426
 
427
    def flipkartOrderTracking(self, orderId, subTagId, userId, rawHtml, orderSuccessUrl):
428
        br = getBrowserObject()
429
        url = ORDER_TRACK_URL + re.findall('.*(\?.*?)$', orderSuccessUrl,re.IGNORECASE)[0]
430
 
431
        response = br.open(url)
432
        page = ungzipResponse(response, br)
433
 
434
 
435
        soup = BeautifulSoup(page,convertEntities=BeautifulSoup.HTML_ENTITIES)
436
 
437
 
438
        mainOrder = soup.findAll("ul",{"class":"m-bottom p-cart"})
439
        #fetching suborders details
440
        for subOrder in mainOrder:
441
            subOrd = subOrder.findAll("li")
442
 
443
            subOrd.pop(len(subOrd)-1)
444
            for productInfo in subOrd:
445
                status=-1    
446
                #To track shipping details         
447
                n = productInfo.findAll("div",{"class":"tracking-progress grid-row cf"})
448
                for trackingStatus in n:
449
                    tr = trackingStatus.findAll("div",{"class":"tap-bullet-area c-tab-trigger"})
450
                    if "approveDetails-complete" in str(tr):
13679 manas 451
                        print "Here"
13658 manas 452
                        if "processingDetails-complete" in str(tr):
13679 manas 453
                            print "There"
13658 manas 454
                            if "shippingDetails-complete" in str(tr):
13679 manas 455
                                print "Share"
13658 manas 456
                                if "delivery-complete" in str(tr):
13679 manas 457
                                    print "Last"
13658 manas 458
                                    status = 3
459
                                else:     
460
                                    status = 2
461
                            else:
462
                                status = 1 
463
                        else: 
464
                            status = 0     
465
                    if "dead" in str(tr):
466
                        status = 4    
467
                print status                      
468
 
469
 
470
def _saveToOrderFlipkart(self, order):
471
        collection = self.db.merchantOrder
472
        order = collection.insert(order)
473
 
13690 amit.gupta 474
 
475
 
476
def hex_md5(password):
477
    m = hashlib.md5()
478
    print(m.digest())
479
 
13658 manas 480
def main():
16210 amit.gupta 481
    store = getStore(2)
17238 amit.gupta 482
    store.scrapeAffiliate(200)
13679 manas 483
 
13690 amit.gupta 484
 
13658 manas 485
 
13690 amit.gupta 486
 
16209 amit.gupta 487
 
13658 manas 488
def todict(obj, classkey=None):
489
    if isinstance(obj, dict):
490
        data = {}
491
        for (k, v) in obj.items():
492
            data[k] = todict(v, classkey)
493
        return data
494
    elif hasattr(obj, "_ast"):
495
        return todict(obj._ast())
496
    elif hasattr(obj, "__iter__"):
497
        return [todict(v, classkey) for v in obj]
498
    elif hasattr(obj, "__dict__"):
499
        data = dict([(key, todict(value, classkey)) 
500
            for key, value in obj.__dict__.iteritems() 
501
            if not callable(value) and not key.startswith('_')])
502
        if classkey is not None and hasattr(obj, "__class__"):
503
            data[classkey] = obj.__class__.__name__
504
        return data
505
    else:
13690 amit.gupta 506
        return obj
507
 
16209 amit.gupta 508
if __name__ == '__main__':
509
        main()
14145 amit.gupta 510