Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
13774 amit.gupta 1
# coding=utf-8
13569 amit.gupta 2
'''
3
Created on Jan 15, 2015
4
 
5
@author: amit
6
'''
13774 amit.gupta 7
from base64 import encode
8
from bs4 import BeautifulSoup
14162 amit.gupta 9
from datetime import datetime
13774 amit.gupta 10
from dtr.dao import Order, SubOrder
14464 amit.gupta 11
from dtr.main import getStore, Store as MStore, ParseException, getBrowserObject, \
12
    ungzipResponse
13774 amit.gupta 13
from dtr.sources.flipkart import todict
14162 amit.gupta 14
from paramiko import sftp
15
from paramiko.client import SSHClient
16
from paramiko.sftp_client import SFTPClient
14285 amit.gupta 17
import os.path
14162 amit.gupta 18
import paramiko
13774 amit.gupta 19
import re
14033 amit.gupta 20
import time
13809 amit.gupta 21
import traceback
13774 amit.gupta 22
 
23
ORDER_REDIRECT_URL = 'https://www.amazon.in/gp/css/summary/edit.html?orderID=%s'
13810 amit.gupta 24
ORDER_SUCCESS_URL = 'https://www.amazon.in/gp/buy/spc/handlers/static-submit-decoupled.html'
13823 amit.gupta 25
THANKYOU_URL = 'https://www.amazon.in/gp/buy/thankyou/handlers/display.html'
13774 amit.gupta 26
class Store(MStore):
13821 amit.gupta 27
 
14032 amit.gupta 28
    orderStatusRegexMap = { MStore.ORDER_PLACED : ['ordered from', 'not yet dispatched','dispatching now', 'preparing for dispatch'],
14064 amit.gupta 29
                            MStore.ORDER_SHIPPED : ['dispatched on','dispatched', 'on the way', 'out for delivery', 'Out for delivery'],
14032 amit.gupta 30
                            MStore.ORDER_CANCELLED : ['return complete', 'refunded', 'cancelled'],
31
                            MStore.ORDER_DELIVERED : ['delivered']
13821 amit.gupta 32
                           }
13774 amit.gupta 33
 
34
    def __init__(self,store_id):
35
        super(Store, self).__init__(store_id)
36
 
37
    def getName(self):
38
        return "flipkart"
39
 
14202 amit.gupta 40
    def parseOrderRawHtml(self, orderId, subTagId, userId, rawHtml, orderSuccessUrl, insert=False):
13796 amit.gupta 41
        resp = {}
13821 amit.gupta 42
        if ORDER_SUCCESS_URL in orderSuccessUrl or THANKYOU_URL in orderSuccessUrl:
13774 amit.gupta 43
            try:
44
                soup = BeautifulSoup(rawHtml)
14608 amit.gupta 45
                try:
46
                    orderUrl = soup.find('div', {"id":"thank-you-box-wrapper"}).div.findAll('div', recursive=False)[1].a['href']
47
                    merchantOrderId = re.findall(r'.*&oid=(.*)&?.*?', orderUrl)[0]
48
                except:
49
                    merchantOrderId = soup.find(id="orders-list").div.span.b.text
14211 amit.gupta 50
                order = Order(orderId, userId, subTagId, self.store_id, orderSuccessUrl, False)
51
                order.orderSuccessUrl = ORDER_REDIRECT_URL % (merchantOrderId)
52
                order.merchantOrderId = merchantOrderId
14291 amit.gupta 53
                order.requireDetail = True
14297 amit.gupta 54
                order.closed = None
14312 amit.gupta 55
                if self._saveToOrder(todict(order)):
56
                    resp['result'] = 'ORDER_CREATED'
57
                    resp["url"] = ORDER_REDIRECT_URL % (merchantOrderId)
58
                    resp["htmlRequired"] = True
59
                    resp['orderId'] = orderId
60
                else:
61
                    resp['result'] = 'ORDER_ALREADY_CREATED_IGNORED'
62
 
13796 amit.gupta 63
                return resp
13774 amit.gupta 64
            except:
14312 amit.gupta 65
                resp["result"] = 'ORDER_NOT_CREATED'
13796 amit.gupta 66
                return resp
13774 amit.gupta 67
 
68
        else:
13781 amit.gupta 69
            try:
70
                merchantOrder = Order(orderId, userId, subTagId, self.store_id, orderSuccessUrl)
14464 amit.gupta 71
                soup = BeautifulSoup(rawHtml)
72
                try:
73
                    self.parseOldStlye(merchantOrder, soup)
74
                except:
14545 amit.gupta 75
                    try:
14566 amit.gupta 76
                        traceback.print_exc()
14545 amit.gupta 77
                        self.parseNewStlye(merchantOrder, soup)
78
                    except:
14566 amit.gupta 79
                        traceback.print_exc()
14545 amit.gupta 80
                        self.parseCancelled(merchantOrder, soup)
14319 amit.gupta 81
                resp['result'] = 'ORDER_CREATED'
82
                return resp    
13781 amit.gupta 83
            except:
13809 amit.gupta 84
                print "Error occurred"
85
                traceback.print_exc()
14312 amit.gupta 86
                resp['result'] = 'ORDER_NOT_CREATED'
13796 amit.gupta 87
                return resp    
13774 amit.gupta 88
 
13868 amit.gupta 89
    #This should be exposed from api for specific sources
90
    def scrapeStoreOrders(self):
14608 amit.gupta 91
#        br = getBrowserObject()
92
#        orders = self.db.merchantOrder.find({"storeId":1, "closed":False, "subOrders.closed":False, "subOrders.trackingUrl":{"$exists":True}})
93
#        for merchantOrder in orders:
94
#            for subOrder in merchantOrder.get("subOrders"):
95
#                trackingUrl = subOrder.get("trackingUrl")
96
#                if not subOrder.get("closed") and trackingUrl is not None:
97
#                    
98
#                    self.parseTrackingUrl(br, trackingUrl)
13868 amit.gupta 99
        pass
14608 amit.gupta 100
 
101
 
102
 
13868 amit.gupta 103
 
14464 amit.gupta 104
    def parseOldStlye(self, merchantOrder, soup):
105
        merchantOrder.orderTrackingUrl = merchantOrder.orderSuccessUrl
106
        table = soup.body.findAll("table", recursive=False)[1]
107
        #print table
108
        tables = table.tr.td.findAll("table", recursive=False)
109
        for tr in tables[2].findAll("tr"):
110
            boldElement = tr.td.b
111
            if "Order Placed" in str(boldElement):
112
                merchantOrder.placedOn = boldElement.next_sibling.strip()
113
            if "order number" in str(boldElement):
114
                merchantOrder.merchantOrderId = boldElement.next_sibling.strip()
115
            if "Order Total" in str(boldElement):
116
                merchantOrder.paidAmount = int(float(boldElement.find('span').contents[-1].replace(',','')))
117
        anchors = table.tr.td.findAll("a", recursive=False)
118
        paymentAnchor = anchors.pop(-1)
119
 
120
        count = 0
121
        subOrders = []
122
        merchantOrder.subOrders = subOrders
123
        counter = 0 
124
        for anchor in anchors:
125
            count += 1
126
            tab = anchor.next_sibling
127
            status = MStore.ORDER_PLACED
128
            subStr = "Delivery #" + str(count) + ":"
129
            if subStr in  tab.find("b").text:
130
                detailedStatus = tab.find("b").text.replace(subStr, '').strip()
131
 
132
            tab = tab.next_sibling.next_sibling
133
            trs = tab.find("table").find('tbody').findAll("tr", recursive = False)
134
 
135
            estimatedDelivery = trs[0].td.find("b").next_sibling.strip()
136
 
137
            orderItemTrs = trs[1].findAll("td", recursive=False)[1].table.tbody.findAll("tr", recursive = False)
138
            i = -1
139
            for orderItemTr in orderItemTrs:
140
                i += 1
141
                if i%2 == 0:
142
                    continue
143
                counter += 1
144
                quantity =  int(re.findall(r'\d+', orderItemTr.td.contents[0])[0])
145
 
146
                productUrl = orderItemTr.td.contents[1].a["href"]
147
                productTitle = orderItemTr.td.contents[1].a.text
148
 
149
                unitPrice = int(float(orderItemTr.findAll('td')[1].span.text.replace('Rs. ','').replace(',','')))
150
 
151
 
152
                subOrder = SubOrder(productTitle, productUrl, merchantOrder.placedOn, unitPrice*quantity, status, quantity)
153
                subOrder.merchantSubOrderId = str(counter) + " of " + merchantOrder.merchantOrderId
154
                subOrder.estimatedDeliveryDate = estimatedDelivery
155
                subOrder.productCode = productUrl.split('/')[5]
156
                subOrder.detailedStatus = detailedStatus
157
                (cashbackAmount, percentage) = self.getCashbackAmount(subOrder.productCode, unitPrice*quantity)
158
                cashbackStatus = Store.CB_PENDING
159
                if cashbackAmount <= 0:
160
                    cashbackStatus = Store.CB_NA
161
                subOrder.cashBackStatus = cashbackStatus
162
                subOrder.cashBackAmount = cashbackAmount
163
                if percentage > 0:
164
                    subOrder.cashBackPercentage = percentage
165
                subOrders.append(subOrder)
166
        priceList = paymentAnchor.next_sibling.next_sibling.next_sibling.table.table.tbody.tbody.tbody.findAll('tr', recursive=False)
167
        totalAmount = 0
168
        grandAmount = 0
169
        for price in priceList:
170
            labelTd = price.td
171
            if 'Subtotal:' in labelTd.text:
172
                totalAmount += int(float(labelTd.next_sibling.next_sibling.find('span').contents[-1].replace(',','')))
173
            elif 'Grand Total:' in labelTd.text:
174
                grandAmount += int(float(labelTd.next_sibling.next_sibling.find('span').contents[-1].replace(',','')))
175
        if grandAmount < totalAmount:
176
            diff = totalAmount - grandAmount
177
            for subOrder in merchantOrder.subOrders:
178
                subOrder.amountPaid -= int(diff*(1-subOrder.amountPaid/totalAmount))
179
        self._updateToOrder(todict(merchantOrder))
180
 
181
    def parseNewStlye(self, merchantOrder, soup):
182
        merchantOrder.orderTrackingUrl = merchantOrder.orderSuccessUrl
183
        orderDetailsContainer = soup.body.find(id="orderDetails")
14566 amit.gupta 184
        divAfterH1 = orderDetailsContainer.h1.next_sibling.next_sibling
185
        orderLeftDiv = divAfterH1.div
14464 amit.gupta 186
        placedOnSpan = orderLeftDiv.find("span", {'class':'order-date-invoice-item'})
187
        merchantOrder.placedOn =placedOnSpan.text.split('Ordered on')[1].strip()
188
        merchantOrder.merchantOrderId = placedOnSpan.next_sibling.next_sibling.text.split('Order#')[1].strip()
14566 amit.gupta 189
        priceBox = divAfterH1.next_sibling.next_sibling.next_sibling.next_sibling.find("div", {"class":"a-box-inner"}).div.div.findAll('div', recursive=False)[-1]
14464 amit.gupta 190
        priceRows = priceBox.findAll('div', {'class':'a-row'})
191
        subTotal = 0
14566 amit.gupta 192
        shippingPrice = 0   
14464 amit.gupta 193
        promoApplied = 0
194
        for priceRow in priceRows:
195
            if "Item(s) Subtotal:" in str(priceRow):
196
                subTotal = int(float(priceRow.div.next_sibling.next_sibling.span.span.text.replace('Rs.','').replace(',', '')))
197
            elif "Shipping:" in str(priceRow):
198
                shippingPrice  = int(float(priceRow.div.next_sibling.next_sibling.span.span.text.replace('Rs.','').replace(',', '')))
199
            elif "Grand Total:" in str(priceRow):
200
                grandPrice  = int(float(priceRow.div.next_sibling.next_sibling.span.span.text.replace('Rs.','').replace(',', '')))
201
                merchantOrder.paidAmount = grandPrice
202
            elif "Total:" in str(priceRow):
203
                totalPrice  = int(float(priceRow.div.next_sibling.next_sibling.span.span.text.replace('Rs.','').replace(',', '')))
204
            elif "Promotion Applied:" in str(priceRow):
205
                promoApplied  += int(float(priceRow.div.next_sibling.next_sibling.span.span.text.replace('Rs.','').replace(',', '')))
206
        totalPaid = subTotal        
207
        if promoApplied > 0:
208
            totalPaid -= promoApplied
209
            if shippingPrice <= promoApplied:
210
                totalPaid  += shippingPrice
211
 
212
        shipmentDivs = orderDetailsContainer.find('div', {'class':'a-box shipment'}).findAll('div', recursive = False)
213
        subOrders = []
214
        merchantOrder.subOrders = subOrders
215
        i=1
216
        for shipmentDiv in shipmentDivs:
217
            innerBoxes = shipmentDiv.findAll('div', recursive = False)
218
            statusDiv = innerBoxes[0]
219
            subOrderStatus = statusDiv.div.span.text.strip()
14566 amit.gupta 220
            deliverySpan = statusDiv.div.div.find_next_sibling('div').span
14464 amit.gupta 221
            productDivs = innerBoxes[-1].div.div.div.findAll('div', recursive=False)
222
            subOrders = []
223
            merchantOrder.subOrders = subOrders
224
            for i, productDiv in enumerate(productDivs):
225
                i +=1 
226
                imgDiv  = productDiv.div.div
227
                detailDiv = imgDiv.find_next_sibling('div')
228
                detailDivs = detailDiv.findAll('div', recursive=False)
229
                arr = detailDivs[0].a.text.strip().split(" of ", 1)
14465 amit.gupta 230
                (productTitle, quantity) = (arr[-1], (1 if len(arr)==1 else int(arr[0])) )
14464 amit.gupta 231
                unitPrice = int(float(detailDivs[2].span.text.replace('Rs. ','').replace(',','')))
232
                amountPaid = int((unitPrice*quantity*totalPaid)/subTotal)
233
                productUrl = "http://www.amazon.in" + detailDivs[0].a.get('href')
234
                subOrder = SubOrder(productTitle, productUrl, merchantOrder.placedOn, amountPaid, MStore.ORDER_PLACED, quantity)
235
                subOrder.productCode = productUrl.split('/')[5]
236
                subOrder.unitPrice = unitPrice
14566 amit.gupta 237
                subOrder.merchantSubOrderId = str(i) + " of " + merchantOrder.merchantOrderId
238
                if deliverySpan is not None:
239
                    subOrder.estimatedDeliveryDate = deliverySpan.span.text.strip() 
14464 amit.gupta 240
                subOrder.detailedStatus = subOrderStatus
241
                subOrder.deliveryCharges = shippingPrice
14466 amit.gupta 242
                subOrder.imgUrl = imgDiv.img["src"]
14464 amit.gupta 243
                (cashbackAmount, percentage) = self.getCashbackAmount(subOrder.productCode, amountPaid)
244
                cashbackStatus = Store.CB_PENDING
245
                if cashbackAmount <= 0:
246
                    cashbackStatus = Store.CB_NA
247
                subOrder.cashBackStatus = cashbackStatus
248
                subOrder.cashBackAmount = cashbackAmount
249
                if percentage > 0:
250
                    subOrder.cashBackPercentage = percentage
251
                subOrders.append(subOrder)
252
        self._updateToOrder(todict(merchantOrder))
14545 amit.gupta 253
 
254
    def parseCancelled(self, merchantOrder,soup):
255
        fonts = soup.body.findAll("table", recursive=False)[1].findAll("font")
256
        if fonts[0].text == "Important Message":
257
            if fonts[1].text=="This order has been cancelled.":
258
                merchantOrder.closed = True
259
                merchantOrder.status = "Cancelled"
260
                merchantOrder.requireDetail = False
261
                self._updateToOrder(todict(merchantOrder))
262
            else:
263
                raise ParseException("parseCancelled", "Found detailed status" + fonts[1].text)
14549 amit.gupta 264
        else:
265
            orderDetails = soup.body.find(id="orderDetails")
266
            if orderDetails is not None and orderDetails.h4.text == "This order has been cancelled.":
267
                merchantOrder.closed = True
268
                merchantOrder.status = "Cancelled"
269
                merchantOrder.requireDetail = False
270
                self._updateToOrder(todict(merchantOrder))
271
            else:
272
                raise ParseException("parseCancelled", "Found detailed status" + fonts[1].text)
14464 amit.gupta 273
 
13868 amit.gupta 274
    def getTrackingUrls(self, userId):
14074 amit.gupta 275
 
276
        missingOrderUrls = []
277
        missingOrders = self._getMissingOrders({'userId':userId})
278
        for missingOrder in missingOrders:
279
            missingOrderUrls.append(ORDER_REDIRECT_URL%(missingOrder['merchantOrderId']))
13879 amit.gupta 280
        orders = self._getActiveOrders({'userId':userId})
13882 amit.gupta 281
        count = len(orders)
13879 amit.gupta 282
        print "count", count
13868 amit.gupta 283
        if count > 0:
14320 amit.gupta 284
            return missingOrderUrls + ['https://www.amazon.in/gp/css/order-history', 'https://www.amazon.in/gp/css/order-history/?orderFilter=cancelled', 'https://www.amazon.in/gp/css/order-history?orderFilter=cancelled&startIndex=10']
13959 amit.gupta 285
        else: 
14074 amit.gupta 286
            return missingOrderUrls
13927 amit.gupta 287
 
288
    def trackOrdersForUser(self, userId, url, rawHtml):
14285 amit.gupta 289
        directory = "/tmp/User" + str(userId)
290
        if not os.path.exists(directory):
291
            os.makedirs(directory)
14298 amit.gupta 292
        filename = directory + "/" + str(datetime.now())
293
        print "filename---", filename
294
        f = open(filename,'w')
14173 amit.gupta 295
        f.write(rawHtml) # python will convert \n to os.linesep
296
        f.close() # you can omit in most cases as the destructor will call if
297
 
13995 amit.gupta 298
        try:
299
            searchMap = {'userId':userId}
300
            collectionMap = {'merchantOrderId':1}
301
            activeOrders = self._getActiveOrders(searchMap, collectionMap)
14033 amit.gupta 302
            datetimeNow = datetime.now()
303
            timestamp = int(time.mktime(datetimeNow.timetuple()))
14009 amit.gupta 304
            print "url----------------", url
14008 amit.gupta 305
 
14320 amit.gupta 306
            if url == 'https://www.amazon.in/gp/css/order-history' or 'https://www.amazon.in/gp/css/order-history/?orderFilter=cancelled' in url:
13995 amit.gupta 307
                soup = BeautifulSoup(rawHtml)
308
                allOrders = soup.find(id="ordersContainer").findAll('div', {'class':'a-box-group a-spacing-base order'})
309
                bulk = self.db.merchantOrder.initialize_ordered_bulk_op()
310
                for activeOrder in activeOrders:
311
                    for orderEle in allOrders:
312
                        orderdiv = orderEle.find('div', {'class':'a-box a-color-offset-background order-info'}).find('div', {'class':'a-fixed-right-grid-col actions a-col-right'})
313
                        merchantOrderId = orderdiv.find('span', {'class':'a-color-secondary value'}).text.strip()
314
                        if merchantOrderId==activeOrder['merchantOrderId']:
315
                            closed = True
316
                            shipments = orderEle.findAll('div',{'class':re.compile('.*?a-box.*?')}, recursive=False)
317
                            shipments.pop(0)
318
                            for shipment in shipments:
319
                                shipdiv = shipment.find('div', {'class':'a-box-inner'})
14050 amit.gupta 320
                                sdivs = shipment.div.div.findAll('div', recursive=False)
14065 amit.gupta 321
                                orderStatus = sdivs[0].span.text.strip()
14050 amit.gupta 322
                                status = self._getStatusFromDetailedStatus(orderStatus)
323
                                if status == MStore.ORDER_DELIVERED:
14299 amit.gupta 324
                                    deliveredOn = sdivs[0].findAll('span')[-1].text.strip()
14050 amit.gupta 325
                                    deliveredOn = deliveredOn.split(":")[1].strip()
14335 amit.gupta 326
                                deliveryestimatespan = sdivs[0].find('span', {'class':'a-color-success'})
327
                                deliveryEstimate = None
328
                                if deliveryestimatespan is not None:
329
                                    deliveryEstimate = deliveryestimatespan.find('span', {'class':'a-text-bold'}).text.strip()
330
                                productDivs = shipdiv.find('div', {'class':re.compile('.*?a-spacing-top-medium.*?')}).find('div', {'class':'a-row'}).findAll('div', recursive=False)
13995 amit.gupta 331
                                trackingUrl = None
332
                                for buttonDiv in shipdiv.findAll('span', {'class':'a-button-inner'}):
333
                                    if buttonDiv.find('a').text.strip()=='Track package':
334
                                        trackingUrl = buttonDiv.find('a')['href'].strip()
335
                                        if not trackingUrl.startswith("http"):
14608 amit.gupta 336
                                            trackingUrl = "http://www.amazon.in" + trackingUrl
13995 amit.gupta 337
                                        break
338
                                for prodDiv in productDivs:
339
                                    prodDiv.find('div', {'class':'a-fixed-left-grid-inner'})
340
                                    productTitle = prodDiv.find('div', {'class':'a-fixed-left-grid-inner'}).find("div", {'class':'a-row'}).find('a').text.strip()
341
                                    imgUrl = prodDiv.find("img")["src"]
342
                                    for subOrder in activeOrder['subOrders']:
343
                                        if subOrder['productTitle'] == productTitle:
344
                                            findMap = {"orderId": activeOrder['orderId'], "subOrders.merchantSubOrderId": subOrder.get("merchantSubOrderId")}
345
                                            updateMap = {}
346
                                            closedStatus = False
347
                                            updateMap['subOrders.$.imgUrl'] = imgUrl
14033 amit.gupta 348
                                            updateMap['subOrders.$.lastTracked'] = timestamp
13995 amit.gupta 349
                                            updateMap['subOrders.$.detailedStatus'] = orderStatus
350
                                            cashbackStatus = subOrder.get("cashBackStatus")
351
                                            updateMap['subOrders.$.status'] = status 
352
 
353
                                            if status==MStore.ORDER_DELIVERED:                               
14291 amit.gupta 354
                                                updateMap['subOrders.$.deliveredOn'] = deliveredOn
13995 amit.gupta 355
                                                closedStatus = True
356
                                                updateMap['subOrders.$.closed'] = True
357
                                                if cashbackStatus == Store.CB_PENDING:
14607 amit.gupta 358
                                                    updateMap['subOrders.$.cashBackStatus'] = Store.CB_APPROVED
13995 amit.gupta 359
                                            if status==MStore.ORDER_CANCELLED:     
360
                                                closedStatus = True
361
                                                updateMap['subOrders.$.closed'] = True
362
                                                if cashbackStatus == Store.CB_PENDING:
363
                                                    updateMap['subOrders.$.cashBackStatus'] = Store.CB_CANCELLED
364
                                            if status==MStore.ORDER_SHIPPED:   
365
                                                updateMap['subOrders.$.estimatedDeliveryDate'] = deliveryEstimate
366
                                                if trackingUrl is not None:
367
                                                    updateMap['subOrders.$.trackingUrl'] = trackingUrl
368
                                            if not closedStatus:
369
                                                closed = False
370
                                            bulk.find(findMap).update({'$set' : updateMap})
371
                                            break
372
                            bulk.find({'orderId': activeOrder['orderId']}).update({'$set':{'closed': closed}})            
14080 amit.gupta 373
                bulk.execute()
374
                return 'PARSED_SUCCESS'
375
            else:
14086 amit.gupta 376
                merchantOrderId = re.findall(r'https://www.amazon.in/gp/css/summary/edit.html\?orderID=(.*)?', url, re.IGNORECASE)[0] 
14085 amit.gupta 377
                merchantOrder = self.db.merchantOrder.find_one({"merchantOrderId":merchantOrderId})
14312 amit.gupta 378
                self.parseOrderRawHtml(merchantOrder['orderId'], merchantOrder['subTagId'], merchantOrder['userId'], rawHtml, url, False)['result']
14080 amit.gupta 379
                return 'PARSED_SUCCESS'
380
                pass
14008 amit.gupta 381
            return 'PARSED_SUCCESS_NO_ORDERS'
13995 amit.gupta 382
        except:
383
            traceback.print_exc()    
384
            return 'PARSED_FAILED'
385
 
386
    def _getStatusFromDetailedStatus(self, detailedStatus):
14061 amit.gupta 387
        if "ordered from" in detailedStatus.lower():
388
            return MStore.ORDER_PLACED 
389
 
13995 amit.gupta 390
        for key, value in self.orderStatusRegexMap.iteritems():
14032 amit.gupta 391
            if detailedStatus.lower() in value:
13995 amit.gupta 392
                return key
393
 
394
        print "Detailed Status need to be mapped"
14062 amit.gupta 395
        print "Found new order status", detailedStatus
13995 amit.gupta 396
        raise ParseException("_getStatusFromDetailedStatus", "Found new order status" + detailedStatus)
14608 amit.gupta 397
 
398
    def parseTrackingUrl(self, br, trackingUrl):
399
        response = br.open(trackingUrl)
400
        page = ungzipResponse(response)
401
        soup = BeautifulSoup(page,convertEntities=BeautifulSoup.HTML_ENTITIES)
402
        alertContainer = soup.find("a-box-inner a-alert-container")
403
 
404
 
13927 amit.gupta 405
 
406
 
13774 amit.gupta 407
def main():
408
    store = getStore(1)
14608 amit.gupta 409
    #br = getBrowserObject()
410
    #store.parseTrackingUrl(br, "http://www.amazon.in//gp/css/shiptrack/view.html/ref=oh_aui_direct_track_pkg_o00_s00?ie=UTF8&marketplaceOfOrigin=&orderID=171-7613541-7425906&orderingShipmentId=729710930106&packageId=1&ref=")
411
    store.parseOrderRawHtml(2121, "13232", 14, readSSh("/home/amit/917.html"), "https://www.amazon.in/gp/buy/spc/handlers/static-submit-decoupled.html/ref=ox_spc_place_order?ie=UTF8&hasWorkingJavascript=")
14162 amit.gupta 412
def readSSh(fileName):
413
    try:
414
            str1 = open(fileName).read()
415
            return str1
416
    except:
417
        ssh_client = SSHClient()
418
        str1 = ""
419
        ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
420
        ssh_client.connect('104.200.25.40', 22, 'root', 'ecip$dtrMay2014')
421
        sftp_client = ssh_client.open_sftp()
422
        try:
14299 amit.gupta 423
            if not os.path.exists(os.path.dirname(fileName)):
424
                os.makedirs(os.path.dirname(fileName))
14162 amit.gupta 425
            sftp_client.get(fileName, fileName)
426
            try:
427
                str1 = open(fileName).read()
428
                return str1
429
            finally:
430
                pass
431
        except:
432
            "could not read"
433
        return str1
13774 amit.gupta 434
 
435
 
436
if __name__ == '__main__':
14284 amit.gupta 437
        main()