Subversion Repositories SmartDukaan

Rev

Rev 15906 | Rev 15950 | 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
14705 kshitij.so 12
#TODO Need to add messy stuff to conf.
14708 kshitij.so 13
con=None
14736 kshitij.so 14
headers = { 
15
            'User-agent':'Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36',
16
            'Accept' : 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',      
17
            'Accept-Language' : 'en-US,en;q=0.8',                     
18
            'Accept-Charset' : 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
19
            'Connection':'keep-alive',
20
            'Accept-Encoding' : 'gzip,deflate,sdch'
21
        }
15768 kshitij.so 22
PROXY_MESH_LIVE = "us-ca.proxymesh.com:31280"
15338 kshitij.so 23
PROXY_MESH_GENERAL = "us-il.proxymesh.com:31280"
15152 kshitij.so 24
 
14843 amit.gupta 25
PUSH_NOTIFICATION_URL='http://api.profittill.com/admin/users/push'
26
DTR_API_BASIC_AUTH = base64.encodestring('%s:%s' % ("dtr", "dtr18Feb2015")).replace('\n', '')
14747 kshitij.so 27
 
14705 kshitij.so 28
def get_mongo_connection(host='localhost', port=27017):
29
    global con
30
    if con is None:
31
        print "Establishing connection %s host and port %d" %(host,port)
32
        try:
33
            con = pymongo.MongoClient(host, port)
34
        except Exception, e:
35
            print e
36
            return None
37
    return con
38
 
13572 kshitij.so 39
def to_java_date(py_timestamp):
40
    try:
41
        java_date =  int(time.mktime(py_timestamp.timetuple())) * 1000 + py_timestamp.microsecond / 1000
42
        return java_date
43
    except:
14705 kshitij.so 44
        return None
45
 
46
def getCashBack(skuId, source_id, category_id, mc, mongoHost):
47
    if not bool(mc.get("category_cash_back")):
48
        populateCashBack(mc, mongoHost)
49
    itemCashBackMap = mc.get("item_cash_back")
50
    itemCashBack = itemCashBackMap.get(skuId)
51
    if itemCashBack is not None:
52
        return itemCashBack
53
    cashBackMap = mc.get("category_cash_back")
54
    sourceCashBack = cashBackMap.get(source_id)
55
    if sourceCashBack is not None and len(sourceCashBack) > 0:
56
        for cashBack in sourceCashBack:
57
            if cashBack.get(category_id) is None:
58
                continue
59
            else:
60
                return cashBack.get(category_id)
61
    else:
62
        return {}
63
 
64
def populateCashBack(mc, mongoHost):
65
    print "Populating cashback"
66
    cashBackMap = {}
67
    itemCashBackMap = {}
68
    cashBack = list(get_mongo_connection(host=mongoHost).Catalog.CategoryCashBack.find())
69
    for row in cashBack:
70
        temp_map = {}
71
        temp_list = []
72
        if cashBackMap.has_key(row['source_id']):
73
            arr = cashBackMap.get(row['source_id'])
74
            for val in arr:
75
                temp_list.append(val)
76
            temp_map[row['category_id']] = row
77
            temp_list.append(temp_map)
78
            cashBackMap[row['source_id']] = temp_list 
79
        else:
80
            temp_map[row['category_id']] = row
81
            temp_list.append(temp_map)
82
            cashBackMap[row['source_id']] = temp_list
83
    itemCashBack = list(get_mongo_connection(host=mongoHost).Catalog.ItemCashBack.find())
84
    for row in itemCashBack:
85
        if not itemCashBackMap.has_key(row['skuId']):
86
            itemCashBackMap[row['skuId']] = row
87
    mc.set("item_cash_back", itemCashBackMap, 24 * 60 * 60)
88
    mc.set("category_cash_back", cashBackMap, 24 * 60 * 60)
89
 
14736 kshitij.so 90
def ungzipResponse(r):
91
    headers = r.info()
92
    if headers.get('Content-Encoding')=='gzip':
93
        url_f = StringIO.StringIO(r.read())
94
        gz = gzip.GzipFile(fileobj=url_f)
95
        html = gz.read()
96
        gz.close()
97
        return html
98
    return r.read()
99
 
100
 
15897 kshitij.so 101
def fetchResponseUsingProxy(url, headers=headers, livePricing=None, proxy=True):
15209 kshitij.so 102
    if livePricing is None:
15338 kshitij.so 103
        PROXY_URL = PROXY_MESH_GENERAL
15209 kshitij.so 104
    else:
15338 kshitij.so 105
        PROXY_URL = PROXY_MESH_LIVE
15897 kshitij.so 106
    if proxy:
15931 kshitij.so 107
        print PROXY_URL
15897 kshitij.so 108
        proxy = urllib2.ProxyHandler({'http': PROXY_URL})
109
        opener = urllib2.build_opener(proxy)
110
        urllib2.install_opener(opener)
14736 kshitij.so 111
    req = urllib2.Request(url,headers=headers)
112
    response = urllib2.urlopen(req)
113
    response_data = ungzipResponse(response)
114
    response.close()
115
    return response_data
116
 
15225 amit.gupta 117
def sendNotification(userIds, campaignName, title, message,notificationtype, url, expiresat='2999-01-01'):
14843 amit.gupta 118
    usertuples = ()
119
    count = -1
120
    for userId in userIds:
121
        count += 1
122
        usertuples += (("userIds[" + str(count) + "]", userId),)
123
    parameters = usertuples + (
124
                   ("User[name]", campaignName), 
125
                   ("User[title]", title ), 
126
                   ("User[message]", message), 
127
                   ("User[type]", notificationtype), 
15225 amit.gupta 128
                   ("User[url]", url),
129
                   ("User[expiresat]", expiresat),)
14843 amit.gupta 130
    parameters = urllib.urlencode(parameters)
14987 amit.gupta 131
    #print parameters
14843 amit.gupta 132
    pushpostrequest = urllib2.Request(PUSH_NOTIFICATION_URL, parameters, headers=headers)
133
    pushpostrequest.add_header("Authorization", "Basic %s" % DTR_API_BASIC_AUTH)
14845 amit.gupta 134
    urllib2.urlopen(pushpostrequest).read()
14948 amit.gupta 135
 
136
def getCurrTimeStamp():
137
    return toTimeStamp(datetime.now())
138
 
139
def toTimeStamp(dateTimeObj):
140
    return int(time.mktime(dateTimeObj.timetuple()))
14987 amit.gupta 141
def fromTimeStamp(timestamp):
15166 amit.gupta 142
    return datetime.fromtimestamp(timestamp)
143
 
15182 kshitij.so 144
def getNlcPoints(item, minNlc, maxNlc, available_price):
145
    if not(minNlc and maxNlc):
15249 kshitij.so 146
        print "Raising exception minNlc, maxNlc not found for %d"%(item.get('_id'))
15182 kshitij.so 147
        raise
148
    if item.get('status') == 2:
149
        eolWeight = .60
150
    else:
151
        eolWeight = 1.0
152
    if item.get('category_id') == 3:
153
        basePointPercentage = 5.0
154
        maxNlcPoints = 200
155
    elif item.get('category_id') == 5:
156
        basePointPercentage = 8.0
157
        maxNlcPoints = 150
158
    else:
159
        basePointPercentage = 10.0
160
        maxNlcPoints = 150
161
    discFromMinNlc = float((minNlc - (available_price)))/(available_price) *100
162
    discFromMaxNlc = float((maxNlc - (available_price)))/(available_price) *100
163
    print discFromMinNlc
164
    print discFromMaxNlc
165
    if discFromMinNlc > 0:
166
        nlcPoints = 100/basePointPercentage * discFromMinNlc
167
    elif discFromMinNlc < 0 and discFromMaxNlc > 0:
168
        nlcPoints = 0
169
    else:
170
        nlcPoints = 100/basePointPercentage * discFromMinNlc
171
    if (min(nlcPoints,maxNlcPoints)) > 0:
172
        nlcPoints = (min(nlcPoints,maxNlcPoints)) * eolWeight
173
    else:
174
        nlcPoints = (min(nlcPoints,maxNlcPoints))
175
 
176
    return nlcPoints
177
 
15166 amit.gupta 178
def getLogger(filePath):
179
    lgr = logging.getLogger()
180
    lgr.setLevel(logging.DEBUG)
181
    fh = logging.FileHandler(filePath)
182
    fh.setLevel(logging.INFO)
183
    frmt = logging.Formatter('%(asctime)s - %(name)s - %(message)s')
184
    fh.setFormatter(frmt)
185
    lgr.addHandler(fh)
186
    return lgr
15868 kshitij.so 187
 
188
def removePriceFormatting(price_string):
189
    return price_string.strip().replace('Rs.', '').replace('Rs', '').replace(',', '').replace(' ', '').replace('&nbsp;', '').split('.')[0]
15906 kshitij.so 190
 
191
def changeToMobileUrl(url,source_id):
192
    if source_id == 5:
193
        finalUrl = urlparse.urlparse(url)
194
        return finalUrl._replace(netloc=finalUrl.netloc.replace(finalUrl.hostname, 'm.shopclues.com')).geturl()
195
 
196
 
197
 
198
if __name__ == '__main__':
199
    print changeToMobileUrl("http://m.shopclues.com/samsung-galaxy-note-4-white-colour-32gb-ready-stock.html",5)
200
 
201