Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
16561 amit.gupta 1
from datetime import datetime
2
from paramiko.client import SSHClient
14843 amit.gupta 3
import StringIO
4
import base64
5
import gzip
16561 amit.gupta 6
import logging
7
import os
8
import paramiko
14843 amit.gupta 9
import pymongo
16561 amit.gupta 10
import random
11
import socket
13572 kshitij.so 12
import time
14843 amit.gupta 13
import urllib
14736 kshitij.so 14
import urllib2
15906 kshitij.so 15
import urlparse
14705 kshitij.so 16
#TODO Need to add messy stuff to conf.
14708 kshitij.so 17
con=None
14736 kshitij.so 18
headers = { 
19
            'User-agent':'Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36',
20
            'Accept' : 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',      
21
            'Accept-Language' : 'en-US,en;q=0.8',                     
22
            'Accept-Charset' : 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
23
            'Connection':'keep-alive',
24
            'Accept-Encoding' : 'gzip,deflate,sdch'
25
        }
16522 kshitij.so 26
PROXY_MESH_LIVE = "us.proxymesh.com:31280"
15338 kshitij.so 27
PROXY_MESH_GENERAL = "us-il.proxymesh.com:31280"
15152 kshitij.so 28
 
14843 amit.gupta 29
PUSH_NOTIFICATION_URL='http://api.profittill.com/admin/users/push'
30
DTR_API_BASIC_AUTH = base64.encodestring('%s:%s' % ("dtr", "dtr18Feb2015")).replace('\n', '')
16371 amit.gupta 31
statusMap = {1:'Active',2:'EOL',3:'In Process',4:'Exclusive'}
14747 kshitij.so 32
 
16398 amit.gupta 33
CB_INIT = 'Waiting Confirmation'
34
CB_PENDING = 'Pending'
35
CB_CREDIT_IN_PROCESS = 'Credit in process'
36
CB_CREDITED = 'Credited to wallet'
37
CB_NA = 'Not Applicable'
38
CB_APPROVED = 'Approved'
39
CB_REJECTED = 'Rejected'
40
CB_ONHOLD = 'On hold'
41
CB_CANCELLED = 'Cancelled'
42
 
16399 amit.gupta 43
ORDER_PLACED = 'Order Placed'
44
ORDER_DELIVERED = 'Delivered'
45
ORDER_SHIPPED = 'Shipped' #Lets see if we can make use of it
46
ORDER_CANCELLED = 'Cancelled'
16398 amit.gupta 47
 
16538 kshitij.so 48
AFFILIATE_OFFER_API= {1:"https://www.spicesafar.com/FreeBapp/fetchOffersSM?deviceId=%s&retailerCode=%d"}
49
AFFILIATE_OFFER_DESC_API = {1:"https://www.spicesafar.com/FreeBapp/individualOffersSM?deviceId=%s&offerId=%s&retailerCode=%d"}
16399 amit.gupta 50
 
16538 kshitij.so 51
 
14705 kshitij.so 52
def get_mongo_connection(host='localhost', port=27017):
53
    global con
54
    if con is None:
55
        print "Establishing connection %s host and port %d" %(host,port)
56
        try:
57
            con = pymongo.MongoClient(host, port)
58
        except Exception, e:
59
            print e
60
            return None
61
    return con
62
 
13572 kshitij.so 63
def to_java_date(py_timestamp):
64
    try:
65
        java_date =  int(time.mktime(py_timestamp.timetuple())) * 1000 + py_timestamp.microsecond / 1000
66
        return java_date
67
    except:
14705 kshitij.so 68
        return None
16631 manish.sha 69
 
70
def to_py_date(java_timestamp):
16658 manish.sha 71
    try:
72
        seconds = java_timestamp / 1000
73
        sub_seconds  = (java_timestamp % 1000.0) / 1000.0
74
        date = datetime.datetime.fromtimestamp(seconds + sub_seconds)
75
    except:
76
        #some error here. return None
77
        return None
78
 
16631 manish.sha 79
    return date
14705 kshitij.so 80
 
81
def getCashBack(skuId, source_id, category_id, mc, mongoHost):
82
    if not bool(mc.get("category_cash_back")):
83
        populateCashBack(mc, mongoHost)
84
    itemCashBackMap = mc.get("item_cash_back")
85
    itemCashBack = itemCashBackMap.get(skuId)
86
    if itemCashBack is not None:
87
        return itemCashBack
88
    cashBackMap = mc.get("category_cash_back")
89
    sourceCashBack = cashBackMap.get(source_id)
90
    if sourceCashBack is not None and len(sourceCashBack) > 0:
91
        for cashBack in sourceCashBack:
92
            if cashBack.get(category_id) is None:
93
                continue
94
            else:
95
                return cashBack.get(category_id)
96
    else:
97
        return {}
98
 
99
def populateCashBack(mc, mongoHost):
100
    print "Populating cashback"
101
    cashBackMap = {}
102
    itemCashBackMap = {}
103
    cashBack = list(get_mongo_connection(host=mongoHost).Catalog.CategoryCashBack.find())
104
    for row in cashBack:
105
        temp_map = {}
106
        temp_list = []
107
        if cashBackMap.has_key(row['source_id']):
108
            arr = cashBackMap.get(row['source_id'])
109
            for val in arr:
110
                temp_list.append(val)
111
            temp_map[row['category_id']] = row
112
            temp_list.append(temp_map)
113
            cashBackMap[row['source_id']] = temp_list 
114
        else:
115
            temp_map[row['category_id']] = row
116
            temp_list.append(temp_map)
117
            cashBackMap[row['source_id']] = temp_list
118
    itemCashBack = list(get_mongo_connection(host=mongoHost).Catalog.ItemCashBack.find())
119
    for row in itemCashBack:
120
        if not itemCashBackMap.has_key(row['skuId']):
121
            itemCashBackMap[row['skuId']] = row
122
    mc.set("item_cash_back", itemCashBackMap, 24 * 60 * 60)
123
    mc.set("category_cash_back", cashBackMap, 24 * 60 * 60)
124
 
14736 kshitij.so 125
def ungzipResponse(r):
126
    headers = r.info()
127
    if headers.get('Content-Encoding')=='gzip':
128
        url_f = StringIO.StringIO(r.read())
129
        gz = gzip.GzipFile(fileobj=url_f)
130
        html = gz.read()
131
        gz.close()
132
        return html
133
    return r.read()
134
 
135
 
15897 kshitij.so 136
def fetchResponseUsingProxy(url, headers=headers, livePricing=None, proxy=True):
15209 kshitij.so 137
    if livePricing is None:
15338 kshitij.so 138
        PROXY_URL = PROXY_MESH_GENERAL
15209 kshitij.so 139
    else:
15338 kshitij.so 140
        PROXY_URL = PROXY_MESH_LIVE
15897 kshitij.so 141
    if proxy:
15931 kshitij.so 142
        print PROXY_URL
15897 kshitij.so 143
        proxy = urllib2.ProxyHandler({'http': PROXY_URL})
144
        opener = urllib2.build_opener(proxy)
145
        urllib2.install_opener(opener)
14736 kshitij.so 146
    req = urllib2.Request(url,headers=headers)
147
    response = urllib2.urlopen(req)
148
    response_data = ungzipResponse(response)
149
    response.close()
150
    return response_data
151
 
15225 amit.gupta 152
def sendNotification(userIds, campaignName, title, message,notificationtype, url, expiresat='2999-01-01'):
14843 amit.gupta 153
    usertuples = ()
154
    count = -1
155
    for userId in userIds:
156
        count += 1
157
        usertuples += (("userIds[" + str(count) + "]", userId),)
158
    parameters = usertuples + (
159
                   ("User[name]", campaignName), 
160
                   ("User[title]", title ), 
161
                   ("User[message]", message), 
162
                   ("User[type]", notificationtype), 
15225 amit.gupta 163
                   ("User[url]", url),
164
                   ("User[expiresat]", expiresat),)
14843 amit.gupta 165
    parameters = urllib.urlencode(parameters)
14987 amit.gupta 166
    #print parameters
14843 amit.gupta 167
    pushpostrequest = urllib2.Request(PUSH_NOTIFICATION_URL, parameters, headers=headers)
168
    pushpostrequest.add_header("Authorization", "Basic %s" % DTR_API_BASIC_AUTH)
14845 amit.gupta 169
    urllib2.urlopen(pushpostrequest).read()
14948 amit.gupta 170
 
171
def getCurrTimeStamp():
172
    return toTimeStamp(datetime.now())
173
 
174
def toTimeStamp(dateTimeObj):
175
    return int(time.mktime(dateTimeObj.timetuple()))
14987 amit.gupta 176
def fromTimeStamp(timestamp):
15166 amit.gupta 177
    return datetime.fromtimestamp(timestamp)
178
 
16499 kshitij.so 179
def getNlcPoints(deal):
180
    if not(deal.get('minNlc') and deal.get('maxNlc')):
181
        print "Raising exception minNlc, maxNlc not found for %d"%(deal.get('_id'))
15182 kshitij.so 182
        raise
16499 kshitij.so 183
    if deal.get('status') == 2:
15182 kshitij.so 184
        eolWeight = .60
185
    else:
186
        eolWeight = 1.0
16499 kshitij.so 187
    if deal.get('category_id') == 3:
15182 kshitij.so 188
        basePointPercentage = 5.0
189
        maxNlcPoints = 200
16499 kshitij.so 190
    elif deal.get('category_id') == 5:
15182 kshitij.so 191
        basePointPercentage = 8.0
192
        maxNlcPoints = 150
193
    else:
194
        basePointPercentage = 10.0
195
        maxNlcPoints = 150
16499 kshitij.so 196
    discFromMinNlc = float((deal.get('minNlc') - (deal.get('available_price'))))/(deal.get('available_price')) *100
197
    discFromMaxNlc = float((deal.get('maxNlc') - (deal.get('available_price'))))/(deal.get('available_price')) *100
15182 kshitij.so 198
    print discFromMinNlc
199
    print discFromMaxNlc
200
    if discFromMinNlc > 0:
201
        nlcPoints = 100/basePointPercentage * discFromMinNlc
202
    elif discFromMinNlc < 0 and discFromMaxNlc > 0:
203
        nlcPoints = 0
204
    else:
205
        nlcPoints = 100/basePointPercentage * discFromMinNlc
206
    if (min(nlcPoints,maxNlcPoints)) > 0:
207
        nlcPoints = (min(nlcPoints,maxNlcPoints)) * eolWeight
208
    else:
209
        nlcPoints = (min(nlcPoints,maxNlcPoints))
210
 
211
    return nlcPoints
212
 
15166 amit.gupta 213
def getLogger(filePath):
214
    lgr = logging.getLogger()
215
    lgr.setLevel(logging.DEBUG)
216
    fh = logging.FileHandler(filePath)
217
    fh.setLevel(logging.INFO)
218
    frmt = logging.Formatter('%(asctime)s - %(name)s - %(message)s')
219
    fh.setFormatter(frmt)
220
    lgr.addHandler(fh)
221
    return lgr
15868 kshitij.so 222
 
223
def removePriceFormatting(price_string):
224
    return price_string.strip().replace('Rs.', '').replace('Rs', '').replace(',', '').replace(' ', '').replace('&nbsp;', '').split('.')[0]
15906 kshitij.so 225
 
15950 kshitij.so 226
def transformUrl(url,source_id):
15906 kshitij.so 227
    if source_id == 5:
228
        finalUrl = urlparse.urlparse(url)
229
        return finalUrl._replace(netloc=finalUrl.netloc.replace(finalUrl.hostname, 'm.shopclues.com')).geturl()
15950 kshitij.so 230
    elif source_id ==1:
231
        return url
232
    elif source_id == 2:
233
        finalUrl = urlparse.urlparse(url)
234
        return finalUrl._replace(netloc=finalUrl.netloc.replace(finalUrl.hostname, socket.gethostbyname(finalUrl.hostname))).geturl()
15906 kshitij.so 235
 
236
 
16421 amit.gupta 237
 
238
 
239
def find_between( s, first, last ):
240
    try:
241
        start = s.find( first ) + len( first )
242
        end = s.rfind( last, start )
243
        if start ==-1 or end ==-1:
244
            return ""
245
        return s[start:end]
246
    except ValueError:
247
        return ""
15950 kshitij.so 248
 
15906 kshitij.so 249
if __name__ == '__main__':
15950 kshitij.so 250
    print transformUrl("http://www.flipkart.com/redmi-2/p/itme8ygtcfax6w39",2)
15906 kshitij.so 251
 
252
 
16561 amit.gupta 253
def readSSh(fileName):
254
    try:
255
        str1 = open(fileName).read()
256
        return str1
257
    except:
258
        ssh_client = SSHClient()
259
        str1 = ""
260
        ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
261
        ssh_client.connect('dtr', 22, 'root', 'ecip$dtrMay2014')
262
        sftp_client = ssh_client.open_sftp()
263
        try:
264
            if not os.path.exists(os.path.dirname(fileName)):
265
                os.makedirs(os.path.dirname(fileName))
266
            sftp_client.get(fileName, fileName)
267
            try:
268
                str1 = open(fileName).read()
269
                return str1
270
            finally:
271
                pass
272
        except:
273
            "could not read"
274
        return str1