Subversion Repositories SmartDukaan

Rev

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