Subversion Repositories SmartDukaan

Rev

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