Subversion Repositories SmartDukaan

Rev

Rev 16736 | Rev 17041 | 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"}
16736 amit.gupta 50
CREDIT_TYPE_ORDER = "Order"
51
CREDIT_TYPE_APP = "App"
16399 amit.gupta 52
 
14705 kshitij.so 53
def get_mongo_connection(host='localhost', port=27017):
54
    global con
55
    if con is None:
56
        print "Establishing connection %s host and port %d" %(host,port)
57
        try:
58
            con = pymongo.MongoClient(host, port)
59
        except Exception, e:
60
            print e
61
            return None
62
    return con
63
 
13572 kshitij.so 64
def to_java_date(py_timestamp):
65
    try:
66
        java_date =  int(time.mktime(py_timestamp.timetuple())) * 1000 + py_timestamp.microsecond / 1000
67
        return java_date
68
    except:
14705 kshitij.so 69
        return None
16631 manish.sha 70
 
71
def to_py_date(java_timestamp):
16658 manish.sha 72
    try:
16660 manish.sha 73
        date = datetime.fromtimestamp(java_timestamp / 1e3)
16658 manish.sha 74
    except:
75
        return None
76
 
16631 manish.sha 77
    return date
14705 kshitij.so 78
 
79
def getCashBack(skuId, source_id, category_id, mc, mongoHost):
80
    if not bool(mc.get("category_cash_back")):
81
        populateCashBack(mc, mongoHost)
82
    itemCashBackMap = mc.get("item_cash_back")
83
    itemCashBack = itemCashBackMap.get(skuId)
84
    if itemCashBack is not None:
85
        return itemCashBack
86
    cashBackMap = mc.get("category_cash_back")
87
    sourceCashBack = cashBackMap.get(source_id)
88
    if sourceCashBack is not None and len(sourceCashBack) > 0:
89
        for cashBack in sourceCashBack:
90
            if cashBack.get(category_id) is None:
91
                continue
92
            else:
93
                return cashBack.get(category_id)
94
    else:
95
        return {}
96
 
97
def populateCashBack(mc, mongoHost):
98
    print "Populating cashback"
99
    cashBackMap = {}
100
    itemCashBackMap = {}
101
    cashBack = list(get_mongo_connection(host=mongoHost).Catalog.CategoryCashBack.find())
102
    for row in cashBack:
103
        temp_map = {}
104
        temp_list = []
105
        if cashBackMap.has_key(row['source_id']):
106
            arr = cashBackMap.get(row['source_id'])
107
            for val in arr:
108
                temp_list.append(val)
109
            temp_map[row['category_id']] = row
110
            temp_list.append(temp_map)
111
            cashBackMap[row['source_id']] = temp_list 
112
        else:
113
            temp_map[row['category_id']] = row
114
            temp_list.append(temp_map)
115
            cashBackMap[row['source_id']] = temp_list
116
    itemCashBack = list(get_mongo_connection(host=mongoHost).Catalog.ItemCashBack.find())
117
    for row in itemCashBack:
118
        if not itemCashBackMap.has_key(row['skuId']):
119
            itemCashBackMap[row['skuId']] = row
120
    mc.set("item_cash_back", itemCashBackMap, 24 * 60 * 60)
121
    mc.set("category_cash_back", cashBackMap, 24 * 60 * 60)
122
 
14736 kshitij.so 123
def ungzipResponse(r):
124
    headers = r.info()
125
    if headers.get('Content-Encoding')=='gzip':
126
        url_f = StringIO.StringIO(r.read())
127
        gz = gzip.GzipFile(fileobj=url_f)
128
        html = gz.read()
129
        gz.close()
130
        return html
131
    return r.read()
132
 
133
 
15897 kshitij.so 134
def fetchResponseUsingProxy(url, headers=headers, livePricing=None, proxy=True):
16736 amit.gupta 135
#    if livePricing is None:
136
#        PROXY_URL = PROXY_MESH_GENERAL
137
#    else:
138
#        PROXY_URL = PROXY_MESH_LIVE
139
#    if proxy:
140
#        print PROXY_URL
141
#        proxy = urllib2.ProxyHandler({'http': PROXY_URL})
142
#        opener = urllib2.build_opener(proxy)
143
#        urllib2.install_opener(opener)
14736 kshitij.so 144
    req = urllib2.Request(url,headers=headers)
145
    response = urllib2.urlopen(req)
146
    response_data = ungzipResponse(response)
147
    response.close()
148
    return response_data
149
 
15225 amit.gupta 150
def sendNotification(userIds, campaignName, title, message,notificationtype, url, expiresat='2999-01-01'):
14843 amit.gupta 151
    usertuples = ()
152
    count = -1
153
    for userId in userIds:
154
        count += 1
155
        usertuples += (("userIds[" + str(count) + "]", userId),)
156
    parameters = usertuples + (
157
                   ("User[name]", campaignName), 
158
                   ("User[title]", title ), 
159
                   ("User[message]", message), 
160
                   ("User[type]", notificationtype), 
15225 amit.gupta 161
                   ("User[url]", url),
162
                   ("User[expiresat]", expiresat),)
14843 amit.gupta 163
    parameters = urllib.urlencode(parameters)
14987 amit.gupta 164
    #print parameters
14843 amit.gupta 165
    pushpostrequest = urllib2.Request(PUSH_NOTIFICATION_URL, parameters, headers=headers)
166
    pushpostrequest.add_header("Authorization", "Basic %s" % DTR_API_BASIC_AUTH)
14845 amit.gupta 167
    urllib2.urlopen(pushpostrequest).read()
14948 amit.gupta 168
 
169
def getCurrTimeStamp():
170
    return toTimeStamp(datetime.now())
171
 
172
def toTimeStamp(dateTimeObj):
173
    return int(time.mktime(dateTimeObj.timetuple()))
14987 amit.gupta 174
def fromTimeStamp(timestamp):
15166 amit.gupta 175
    return datetime.fromtimestamp(timestamp)
176
 
16499 kshitij.so 177
def getNlcPoints(deal):
178
    if not(deal.get('minNlc') and deal.get('maxNlc')):
179
        print "Raising exception minNlc, maxNlc not found for %d"%(deal.get('_id'))
15182 kshitij.so 180
        raise
16499 kshitij.so 181
    if deal.get('status') == 2:
15182 kshitij.so 182
        eolWeight = .60
183
    else:
184
        eolWeight = 1.0
16499 kshitij.so 185
    if deal.get('category_id') == 3:
15182 kshitij.so 186
        basePointPercentage = 5.0
187
        maxNlcPoints = 200
16499 kshitij.so 188
    elif deal.get('category_id') == 5:
15182 kshitij.so 189
        basePointPercentage = 8.0
190
        maxNlcPoints = 150
191
    else:
192
        basePointPercentage = 10.0
193
        maxNlcPoints = 150
16499 kshitij.so 194
    discFromMinNlc = float((deal.get('minNlc') - (deal.get('available_price'))))/(deal.get('available_price')) *100
195
    discFromMaxNlc = float((deal.get('maxNlc') - (deal.get('available_price'))))/(deal.get('available_price')) *100
15182 kshitij.so 196
    print discFromMinNlc
197
    print discFromMaxNlc
198
    if discFromMinNlc > 0:
199
        nlcPoints = 100/basePointPercentage * discFromMinNlc
200
    elif discFromMinNlc < 0 and discFromMaxNlc > 0:
201
        nlcPoints = 0
202
    else:
203
        nlcPoints = 100/basePointPercentage * discFromMinNlc
204
    if (min(nlcPoints,maxNlcPoints)) > 0:
205
        nlcPoints = (min(nlcPoints,maxNlcPoints)) * eolWeight
206
    else:
207
        nlcPoints = (min(nlcPoints,maxNlcPoints))
208
 
209
    return nlcPoints
210
 
15166 amit.gupta 211
def getLogger(filePath):
212
    lgr = logging.getLogger()
213
    lgr.setLevel(logging.DEBUG)
214
    fh = logging.FileHandler(filePath)
215
    fh.setLevel(logging.INFO)
216
    frmt = logging.Formatter('%(asctime)s - %(name)s - %(message)s')
217
    fh.setFormatter(frmt)
218
    lgr.addHandler(fh)
219
    return lgr
15868 kshitij.so 220
 
221
def removePriceFormatting(price_string):
222
    return price_string.strip().replace('Rs.', '').replace('Rs', '').replace(',', '').replace(' ', '').replace('&nbsp;', '').split('.')[0]
15906 kshitij.so 223
 
15950 kshitij.so 224
def transformUrl(url,source_id):
15906 kshitij.so 225
    if source_id == 5:
226
        finalUrl = urlparse.urlparse(url)
227
        return finalUrl._replace(netloc=finalUrl.netloc.replace(finalUrl.hostname, 'm.shopclues.com')).geturl()
15950 kshitij.so 228
    elif source_id ==1:
229
        return url
230
    elif source_id == 2:
231
        finalUrl = urlparse.urlparse(url)
232
        return finalUrl._replace(netloc=finalUrl.netloc.replace(finalUrl.hostname, socket.gethostbyname(finalUrl.hostname))).geturl()
17013 manish.sha 233
    elif source_id == 7:
234
        productId = url.split('product:')[1].split('/')[0]
235
        finalUrl = 'http://m.homeshop18.com/product.mobi?productId='+str(productId)
236
        return finalUrl
15906 kshitij.so 237
 
238
 
16421 amit.gupta 239
 
240
 
241
def find_between( s, first, last ):
242
    try:
243
        start = s.find( first ) + len( first )
244
        end = s.rfind( last, start )
245
        if start ==-1 or end ==-1:
246
            return ""
247
        return s[start:end]
248
    except ValueError:
249
        return ""
15950 kshitij.so 250
 
15906 kshitij.so 251
if __name__ == '__main__':
15950 kshitij.so 252
    print transformUrl("http://www.flipkart.com/redmi-2/p/itme8ygtcfax6w39",2)
15906 kshitij.so 253
 
254
 
16561 amit.gupta 255
def readSSh(fileName):
256
    try:
257
        str1 = open(fileName).read()
258
        return str1
259
    except:
260
        ssh_client = SSHClient()
261
        str1 = ""
262
        ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
263
        ssh_client.connect('dtr', 22, 'root', 'ecip$dtrMay2014')
264
        sftp_client = ssh_client.open_sftp()
265
        try:
266
            if not os.path.exists(os.path.dirname(fileName)):
267
                os.makedirs(os.path.dirname(fileName))
268
            sftp_client.get(fileName, fileName)
269
            try:
270
                str1 = open(fileName).read()
271
                return str1
272
            finally:
273
                pass
274
        except:
275
            "could not read"
276
        return str1