Subversion Repositories SmartDukaan

Rev

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