Subversion Repositories SmartDukaan

Rev

Rev 22240 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
16561 amit.gupta 1
from datetime import datetime
17233 amit.gupta 2
from email import encoders
3
from email.mime.base import MIMEBase
4
from email.mime.multipart import MIMEMultipart
5
from email.mime.text import MIMEText
16561 amit.gupta 6
from paramiko.client import SSHClient
14843 amit.gupta 7
import StringIO
8
import base64
9
import gzip
16561 amit.gupta 10
import logging
11
import os
12
import paramiko
14843 amit.gupta 13
import pymongo
16561 amit.gupta 14
import random
17233 amit.gupta 15
import smtplib
16561 amit.gupta 16
import socket
13572 kshitij.so 17
import time
14843 amit.gupta 18
import urllib
14736 kshitij.so 19
import urllib2
15906 kshitij.so 20
import urlparse
18092 manas 21
from Crypto.Hash import MD5
22
from Crypto.Cipher import DES
23
import string
18923 manas 24
from dtr.utils.MailSender import Email
14705 kshitij.so 25
#TODO Need to add messy stuff to conf.
17233 amit.gupta 26
 
27
 
28
SENDER = "cnc.center@shop2020.in"
29
PASSWORD = "5h0p2o2o"
30
SMTP_SERVER = "smtp.gmail.com"
31
SMTP_PORT = 587    
32
 
18092 manas 33
_password = 'dtr18Feb2015'
34
_salt = '\xA9\x9B\xC8\x32\x56\x35\xE3\x03'
35
_iterations = 19
17233 amit.gupta 36
 
18092 manas 37
ALPHABET = string.ascii_uppercase + string.ascii_lowercase + \
38
           string.digits + '-_'
39
ALPHABET_REVERSE = dict((c, i) for (i, c) in enumerate(ALPHABET))
40
BASE = len(ALPHABET)
41
SIGN_CHARACTER = '$'
17233 amit.gupta 42
 
14708 kshitij.so 43
con=None
18257 manas 44
conDtrData = None
19247 kshitij.so 45
conCms = None
14736 kshitij.so 46
headers = { 
47
            'User-agent':'Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36',
48
            'Accept' : 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',      
49
            'Accept-Language' : 'en-US,en;q=0.8',                     
50
            'Accept-Charset' : 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
51
            'Connection':'keep-alive',
52
            'Accept-Encoding' : 'gzip,deflate,sdch'
53
        }
20309 kshitij.so 54
PROXY_MESH_LIVE = "us.proxymesh.com:31280"
55
PROXY_MESH_GENERAL = "us-il.proxymesh.com:31280"
17273 kshitij.so 56
PROXY_FLIPKART = "117.240.187.35:3128"
15152 kshitij.so 57
 
14843 amit.gupta 58
PUSH_NOTIFICATION_URL='http://api.profittill.com/admin/users/push'
59
DTR_API_BASIC_AUTH = base64.encodestring('%s:%s' % ("dtr", "dtr18Feb2015")).replace('\n', '')
18871 manas 60
EMAIL_CRM_PUSH_URL = 'http://staging.profittill.com/feedbacks/crm_mail'
16371 amit.gupta 61
statusMap = {1:'Active',2:'EOL',3:'In Process',4:'Exclusive'}
17041 manish.sha 62
SOURCE_MAP = {'AMAZON':1,'FLIPKART':2,'SNAPDEAL':3,'SAHOLIC':4, 'SHOPCLUES.COM':5,'PAYTM.COM':6, 'HOMESHOP18.COM':7}
19514 manas 63
REVERSE_SOURCE_MAP = {1:"Amazon", 2:"Flipkart", 3:"Snapdeal", 4:"Spice", 5:"Shopclues", 6:"Paytm", 7:"HomeShop18"}
14747 kshitij.so 64
 
16398 amit.gupta 65
CB_INIT = 'Waiting Confirmation'
66
CB_PENDING = 'Pending'
67
CB_CREDIT_IN_PROCESS = 'Credit in process'
68
CB_CREDITED = 'Credited to wallet'
69
CB_NA = 'Not Applicable'
70
CB_APPROVED = 'Approved'
71
CB_REJECTED = 'Rejected'
72
CB_ONHOLD = 'On hold'
73
CB_CANCELLED = 'Cancelled'
74
 
16399 amit.gupta 75
ORDER_PLACED = 'Order Placed'
76
ORDER_DELIVERED = 'Delivered'
77
ORDER_SHIPPED = 'Shipped' #Lets see if we can make use of it
78
ORDER_CANCELLED = 'Cancelled'
16398 amit.gupta 79
 
16538 kshitij.so 80
AFFILIATE_OFFER_API= {1:"https://www.spicesafar.com/FreeBapp/fetchOffersSM?deviceId=%s&retailerCode=%d"}
81
AFFILIATE_OFFER_DESC_API = {1:"https://www.spicesafar.com/FreeBapp/individualOffersSM?deviceId=%s&offerId=%s&retailerCode=%d"}
16736 amit.gupta 82
CREDIT_TYPE_ORDER = "Order"
83
CREDIT_TYPE_APP = "App"
19451 manas 84
CREDIT_TYPE_REFUND = "Refund"
85
CREDIT_TYPE_OFFER = "Offer"
86
CREDIT_TYPE_ADJUSTMENT = "Adjustment"
17873 kshitij.so 87
SUB_CATEGORY_MAP = {7:'Memory Card',8:'Cable',9:'USB Lights',10:"Screen Magnifier",11:"Car Charger",12:"Power Bank",13:"Pendrive",14:"Combo",15:"Charger",16:"Bluetooth Headset",17:"Speaker", \
18648 kshitij.so 88
                    18:"Adapter",19:"Cases",20:"Screen Guard",21:"Earphone",22:"Card Reader",23:"Mobile Holder",24:"AUX Cable",25:"OTG Cable",26:"Selfie Stick",27:"Back Cover",28:"Tempered Glass",29:"Battery", \
20040 kshitij.so 89
                    30:"Usb Hub",31:"Portable Music Player",32:"Smart Watch",33:'Flip Cover',34:'Connector',35:'TV Remote',36:'Bumper Case',37:'DVD Player',38:'LED Light', \
22240 amit.gupta 90
                    39:"USB Device",40:"Headphone", 41:"HDMI Cables"}
16399 amit.gupta 91
 
19247 kshitij.so 92
CATEGORY_MAP = {3:'Mobiles',5:'Tablets',6:'Accessories'}
19482 manas 93
REFUND_ADJUSTMENT_MAP={0:'Pending',1:'Approved',2:'Cancelled',3:'Credited'}
19247 kshitij.so 94
 
22240 amit.gupta 95
SUB_CATEGORY_HEADER_RANKING = [32,12,7,13,15,8,11,36,40,21,16,23,27,24,41,25,29,17,26]
19654 kshitij.so 96
 
20347 kshitij.so 97
DEAL_PRIORITY = [4, 2, 1, 5, 6, 7, 3]  #Increasing order of source deal priority
98
 
14705 kshitij.so 99
def get_mongo_connection(host='localhost', port=27017):
100
    global con
101
    if con is None:
102
        print "Establishing connection %s host and port %d" %(host,port)
103
        try:
104
            con = pymongo.MongoClient(host, port)
105
        except Exception, e:
106
            print e
107
            return None
108
    return con
109
 
18257 manas 110
 
19247 kshitij.so 111
def get_mongo_connection_cms(host, port=27017):
112
    global conCms
113
    if conCms is None:
114
        print "Establishing connection %s host and port %d" %(host,port)
115
        try:
116
            conCms = pymongo.MongoClient(host, port)
117
        except Exception, e:
118
            print e
119
            return None
120
    return conCms
121
 
13572 kshitij.so 122
def to_java_date(py_timestamp):
123
    try:
124
        java_date =  int(time.mktime(py_timestamp.timetuple())) * 1000 + py_timestamp.microsecond / 1000
125
        return java_date
126
    except:
14705 kshitij.so 127
        return None
16631 manish.sha 128
 
129
def to_py_date(java_timestamp):
16658 manish.sha 130
    try:
16660 manish.sha 131
        date = datetime.fromtimestamp(java_timestamp / 1e3)
16658 manish.sha 132
    except:
133
        return None
134
 
16631 manish.sha 135
    return date
14705 kshitij.so 136
 
137
def getCashBack(skuId, source_id, category_id, mc, mongoHost):
17605 kshitij.so 138
    if mc.get("category_cash_back") is None or not bool(mc.get("category_cash_back")):
14705 kshitij.so 139
        populateCashBack(mc, mongoHost)
140
    itemCashBackMap = mc.get("item_cash_back")
141
    itemCashBack = itemCashBackMap.get(skuId)
142
    if itemCashBack is not None:
143
        return itemCashBack
144
    cashBackMap = mc.get("category_cash_back")
145
    sourceCashBack = cashBackMap.get(source_id)
146
    if sourceCashBack is not None and len(sourceCashBack) > 0:
147
        for cashBack in sourceCashBack:
148
            if cashBack.get(category_id) is None:
149
                continue
150
            else:
151
                return cashBack.get(category_id)
152
    else:
153
        return {}
154
 
155
def populateCashBack(mc, mongoHost):
156
    print "Populating cashback"
157
    cashBackMap = {}
158
    itemCashBackMap = {}
159
    cashBack = list(get_mongo_connection(host=mongoHost).Catalog.CategoryCashBack.find())
160
    for row in cashBack:
161
        temp_map = {}
162
        temp_list = []
163
        if cashBackMap.has_key(row['source_id']):
164
            arr = cashBackMap.get(row['source_id'])
165
            for val in arr:
166
                temp_list.append(val)
167
            temp_map[row['category_id']] = row
168
            temp_list.append(temp_map)
169
            cashBackMap[row['source_id']] = temp_list 
170
        else:
171
            temp_map[row['category_id']] = row
172
            temp_list.append(temp_map)
173
            cashBackMap[row['source_id']] = temp_list
174
    itemCashBack = list(get_mongo_connection(host=mongoHost).Catalog.ItemCashBack.find())
175
    for row in itemCashBack:
20433 kshitij.so 176
        if not itemCashBackMap.has_key(row['sku']):
177
            itemCashBackMap[row['sku']] = row
14705 kshitij.so 178
    mc.set("item_cash_back", itemCashBackMap, 24 * 60 * 60)
179
    mc.set("category_cash_back", cashBackMap, 24 * 60 * 60)
180
 
14736 kshitij.so 181
def ungzipResponse(r):
182
    headers = r.info()
183
    if headers.get('Content-Encoding')=='gzip':
184
        url_f = StringIO.StringIO(r.read())
185
        gz = gzip.GzipFile(fileobj=url_f)
186
        html = gz.read()
187
        gz.close()
188
        return html
189
    return r.read()
190
 
191
 
17267 kshitij.so 192
def fetchResponseUsingProxy(url, headers=headers, livePricing=None, proxy=True, flipkart=False):
17041 manish.sha 193
    if livePricing is None:
194
        PROXY_URL = PROXY_MESH_GENERAL
17267 kshitij.so 195
    elif flipkart:
196
        PROXY_URL = PROXY_FLIPKART
17041 manish.sha 197
    else:
198
        PROXY_URL = PROXY_MESH_LIVE
199
    if proxy:
200
        print PROXY_URL
201
        proxy = urllib2.ProxyHandler({'http': PROXY_URL})
202
        opener = urllib2.build_opener(proxy)
203
        urllib2.install_opener(opener)
14736 kshitij.so 204
    req = urllib2.Request(url,headers=headers)
205
    response = urllib2.urlopen(req)
206
    response_data = ungzipResponse(response)
207
    response.close()
208
    return response_data
209
 
14948 amit.gupta 210
def getCurrTimeStamp():
211
    return toTimeStamp(datetime.now())
212
 
213
def toTimeStamp(dateTimeObj):
214
    return int(time.mktime(dateTimeObj.timetuple()))
14987 amit.gupta 215
def fromTimeStamp(timestamp):
15166 amit.gupta 216
    return datetime.fromtimestamp(timestamp)
217
 
16499 kshitij.so 218
def getNlcPoints(deal):
219
    if not(deal.get('minNlc') and deal.get('maxNlc')):
220
        print "Raising exception minNlc, maxNlc not found for %d"%(deal.get('_id'))
15182 kshitij.so 221
        raise
16499 kshitij.so 222
    if deal.get('status') == 2:
15182 kshitij.so 223
        eolWeight = .60
224
    else:
225
        eolWeight = 1.0
16499 kshitij.so 226
    if deal.get('category_id') == 3:
15182 kshitij.so 227
        basePointPercentage = 5.0
228
        maxNlcPoints = 200
16499 kshitij.so 229
    elif deal.get('category_id') == 5:
15182 kshitij.so 230
        basePointPercentage = 8.0
231
        maxNlcPoints = 150
232
    else:
233
        basePointPercentage = 10.0
234
        maxNlcPoints = 150
16499 kshitij.so 235
    discFromMinNlc = float((deal.get('minNlc') - (deal.get('available_price'))))/(deal.get('available_price')) *100
236
    discFromMaxNlc = float((deal.get('maxNlc') - (deal.get('available_price'))))/(deal.get('available_price')) *100
15182 kshitij.so 237
    print discFromMinNlc
238
    print discFromMaxNlc
239
    if discFromMinNlc > 0:
240
        nlcPoints = 100/basePointPercentage * discFromMinNlc
241
    elif discFromMinNlc < 0 and discFromMaxNlc > 0:
242
        nlcPoints = 0
243
    else:
244
        nlcPoints = 100/basePointPercentage * discFromMinNlc
245
    if (min(nlcPoints,maxNlcPoints)) > 0:
246
        nlcPoints = (min(nlcPoints,maxNlcPoints)) * eolWeight
247
    else:
248
        nlcPoints = (min(nlcPoints,maxNlcPoints))
249
 
250
    return nlcPoints
251
 
15166 amit.gupta 252
def getLogger(filePath):
253
    lgr = logging.getLogger()
254
    lgr.setLevel(logging.DEBUG)
255
    fh = logging.FileHandler(filePath)
256
    fh.setLevel(logging.INFO)
257
    frmt = logging.Formatter('%(asctime)s - %(name)s - %(message)s')
258
    fh.setFormatter(frmt)
259
    lgr.addHandler(fh)
260
    return lgr
15868 kshitij.so 261
 
262
def removePriceFormatting(price_string):
263
    return price_string.strip().replace('Rs.', '').replace('Rs', '').replace(',', '').replace(' ', '').replace('&nbsp;', '').split('.')[0]
15906 kshitij.so 264
 
15950 kshitij.so 265
def transformUrl(url,source_id):
15906 kshitij.so 266
    if source_id == 5:
267
        finalUrl = urlparse.urlparse(url)
268
        return finalUrl._replace(netloc=finalUrl.netloc.replace(finalUrl.hostname, 'm.shopclues.com')).geturl()
15950 kshitij.so 269
    elif source_id ==1:
270
        return url
271
    elif source_id == 2:
272
        finalUrl = urlparse.urlparse(url)
273
        return finalUrl._replace(netloc=finalUrl.netloc.replace(finalUrl.hostname, socket.gethostbyname(finalUrl.hostname))).geturl()
17013 manish.sha 274
    elif source_id == 7:
275
        productId = url.split('product:')[1].split('/')[0]
276
        finalUrl = 'http://m.homeshop18.com/product.mobi?productId='+str(productId)
277
        return finalUrl
15906 kshitij.so 278
 
279
 
16421 amit.gupta 280
 
281
 
282
def find_between( s, first, last ):
283
    try:
284
        start = s.find( first ) + len( first )
285
        end = s.rfind( last, start )
286
        if start ==-1 or end ==-1:
287
            return ""
288
        return s[start:end]
289
    except ValueError:
290
        return ""
15950 kshitij.so 291
 
15906 kshitij.so 292
if __name__ == '__main__':
15950 kshitij.so 293
    print transformUrl("http://www.flipkart.com/redmi-2/p/itme8ygtcfax6w39",2)
17233 amit.gupta 294
 
295
def sendmail(email, message, title, *varargs):
296
    if email == "":
297
        return
298
    mailServer = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)
299
    mailServer.ehlo()
300
    mailServer.starttls()
301
    mailServer.ehlo()
15906 kshitij.so 302
 
17233 amit.gupta 303
    # Create the container (outer) email message.
304
    msg = MIMEMultipart()
305
    msg['Subject'] = title
306
    msg.preamble = title
307
    html_msg = MIMEText(message, 'html')
308
    msg.attach(html_msg)
15906 kshitij.so 309
 
17233 amit.gupta 310
    #snapdeal more to be added here
311
    for fileName in varargs:
312
        snapdeal = MIMEBase('application', 'vnd.ms-excel')
313
        snapdeal.set_payload(file(fileName).read())
314
        encoders.encode_base64(snapdeal)
315
        snapdeal.add_header('Content-Disposition', 'attachment;filename=' + fileName)
316
        msg.attach(snapdeal)
317
 
318
 
319
    MAILTO = email 
320
    mailServer.login(SENDER, PASSWORD)
321
    mailServer.sendmail(PASSWORD, MAILTO, msg.as_string())
322
 
323
 
16561 amit.gupta 324
def readSSh(fileName):
325
    try:
326
        str1 = open(fileName).read()
327
        return str1
328
    except:
329
        ssh_client = SSHClient()
330
        str1 = ""
331
        ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
21265 amit.gupta 332
        ssh_client.connect('dtr', 22, 'root', 'spic@2015dtr')
16561 amit.gupta 333
        sftp_client = ssh_client.open_sftp()
334
        try:
335
            if not os.path.exists(os.path.dirname(fileName)):
336
                os.makedirs(os.path.dirname(fileName))
337
            sftp_client.get(fileName, fileName)
338
            try:
339
                str1 = open(fileName).read()
340
                return str1
341
            finally:
342
                pass
343
        except:
344
            "could not read"
345
        return str1
18134 kshitij.so 346
 
18092 manas 347
def encryptMessage(plaintext_to_encrypt1):
348
    hasher = MD5.new()
349
    hasher.update(_password)
350
    hasher.update(_salt)
351
    result = hasher.digest()
352
    for i in range(1, _iterations):
353
        hasher = MD5.new()
354
        hasher.update(result)
355
        result = hasher.digest()
356
 
357
    padding = 8 - len(plaintext_to_encrypt1) % 8
358
    plaintext_to_encrypt1 += chr(padding) * padding
359
    encoder = DES.new(result[:8], DES.MODE_CBC, result[8:16])
360
    encrypted = encoder.encrypt(plaintext_to_encrypt1)
361
 
362
    check1 =  encrypted.encode('base64')
363
    return check1
364
 
365
def decryptMessage(encryptedData):
366
    padding = 8 - len(encryptedData) % 8
367
    encryptedData += chr(padding) * padding
368
    hasher = MD5.new()
369
    hasher.update(_password)
370
    hasher.update(_salt)
371
    result = hasher.digest()
372
    for i in range(1, _iterations):
373
        hasher = MD5.new()
374
        hasher.update(result)
375
        result = hasher.digest()
376
 
377
    encoder2 = DES.new(result[:8], DES.MODE_CBC, result[8:16])
378
    decodeString =  encoder2.decrypt(encryptedData.decode('base64'))
18094 manas 379
    return ''.join(e for e in decodeString if e.isalnum() or e is '/' or e is ':' or e is ',' or e is '.' or e is '=' or e is '?' or e is '_')
18092 manas 380
 
381
def num_encode(n):
382
    if n < 0:
383
        return SIGN_CHARACTER + num_encode(-n)
384
    s = []
385
    while True:
386
        n, r = divmod(n, BASE)
387
        s.append(ALPHABET[r])
388
        if n == 0: break
389
    return ''.join(reversed(s))
390
 
391
def num_decode(s):
392
    if s[0] == SIGN_CHARACTER:
393
        return -num_decode(s[1:])
394
    n = 0
395
    for c in s:
396
        n = n * BASE + ALPHABET_REVERSE[c]
397
    return n    
18156 amit.gupta 398
 
399
def todict(obj, classkey=None):
400
    if isinstance(obj, dict):
401
        data = {}
402
        for (k, v) in obj.items():
403
            data[k] = todict(v, classkey)
404
        return data
405
    elif hasattr(obj, "_ast"):
406
        return todict(obj._ast())
407
    elif hasattr(obj, "__iter__"):
408
        return [todict(v, classkey) for v in obj]
409
    elif hasattr(obj, "__dict__"):
410
        data = dict([(key, todict(value, classkey)) 
411
            for key, value in obj.__dict__.iteritems() 
412
            if not callable(value) and not key.startswith('_')])
413
        if classkey is not None and hasattr(obj, "__class__"):
414
            data[classkey] = obj.__class__.__name__
415
        return data
416
    else:
18440 amit.gupta 417
        return obj
418
 
419
def getSkuData(storeId, identifier):
420
    if storeId in (1,2,4,5,6):
421
        skuData = get_mongo_connection().Catalog.MasterData.find_one({'identifier':identifier, 'source_id':storeId})
422
    elif storeId == 3:
423
        skuData = get_mongo_connection().Catalog.MasterData.find_one({'secondaryIdentifier':identifier, 'source_id':storeId})
424
    return skuData
18630 manas 425
 
18636 manas 426
def sendCrmProjectMail(userId,disposition_description,disposition_comments):
427
    parameters = ("user_id", userId),("subject", disposition_description),("message",disposition_comments)
428
    parameters = urllib.urlencode(parameters)
18667 manas 429
    emailpushrequest = urllib2.Request(EMAIL_CRM_PUSH_URL, parameters, headers=headers)
430
    emailpushrequest.add_header("Authorization", "Basic %s" % DTR_API_BASIC_AUTH)
18860 manas 431
    connection = urllib2.urlopen(emailpushrequest)
432
    connection.close()
18709 manas 433
 
18923 manas 434
def sendCrmProjectMailByDtr(customerFeedback):
435
    mailServer = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)
436
    mailServer.ehlo()
437
    mailServer.starttls()
438
    mailServer.ehlo()
439
    title=customerFeedback.get('subject')    
440
    msg = MIMEMultipart()
441
    msg['Subject'] = title
442
    msg.preamble = title
18925 manas 443
    message="User Id : " + str(customerFeedback.get('user_id'))
444
    message1="Email : " + str(customerFeedback.get('email'))
18923 manas 445
    message2="Mobile Number : " + str(customerFeedback.get('mobile_number'))
446
    message3="Subject : " + str(customerFeedback.get('subject'))
447
    message4="Message : " + str(customerFeedback.get('message'))
18925 manas 448
    html_msg = MIMEText(message+"<br><br>"+message1+"<br><br>"+message2+"<br><br>"+message3+"<br><br>"+message4, 'html')
18924 manas 449
    msg.attach(html_msg)
18927 manas 450
 
20046 rajender 451
    MAILTO = ['rajneesh.arora@shop2020.in','amit.sirohi@shop2020.in','khushal.bhatia@shop2020.in','shailesh.kumar@shop2020.in','himanshu.pandey@shop2020.in','rajender.singh@shop2020.in','chaitnaya.vats@shop2020.in','amit.gupta@shop2020.in']
452
    #MAILTO = ['rajender.singh@saholic.com']
18923 manas 453
    mailServer.login(SENDER, PASSWORD)
454
    try:
455
        mailServer.sendmail(SENDER, MAILTO, msg.as_string())
456
    except:
457
        m = Email('localhost')
458
        mFrom = "dtr@shop2020.in"
459
        m.setFrom(mFrom)
460
        for receipient in MAILTO:
461
            m.addRecipient(receipient)
462
        m.setSubject(title)
463
        m.send()
21265 amit.gupta 464
    return    
465
 
466
 
467
 
468
 
469
 
470
 
471
 
472
 
473
 
474
 
475
 
476
 
477
 
478
from jsonfinder import jsonfinder
479
import requests
480
 
481
def readSSh(fileName):
482
    try:
483
        str1 = open(fileName).read()
484
        return str1
485
    except:
486
        ssh_client = SSHClient()
487
        str1 = ""
488
        ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
489
        ssh_client.connect('dtr', 22, 'root', 'spic@2015dtr')
490
        sftp_client = ssh_client.open_sftp()
491
        try:
492
            if not os.path.exists(os.path.dirname(fileName)):
493
                os.makedirs(os.path.dirname(fileName))
494
            sftp_client.get(fileName, fileName)
495
            try:
496
                str1 = open(fileName).read()
497
                return str1
498
            finally:
499
                pass
500
        except:
501
            "could not read"
502
        return str1
503
if __name__ == '__main__':
504
    content = readSSh("/home/amit/Downloads/flipkarthtml")
505
    print content
506
    for _, __, obj in jsonfinder(content, json_only=True):
507
        if (obj and
508
            isinstance(obj, list) and
509
            isinstance(obj[0], dict) and
510
            {'player_id', 'event_id', 'name'}.issubset(obj[0])
511
            ):
512
            break
513
        else:
514
            raise ValueError('data not found')
515
 
516
    # Now you can use obj
517
    print(len(obj))
518
    print(obj[0])