Subversion Repositories SmartDukaan

Rev

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