Subversion Repositories SmartDukaan

Rev

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