Subversion Repositories SmartDukaan

Rev

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

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