Subversion Repositories SmartDukaan

Rev

Rev 17267 | Rev 17280 | 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
17233 amit.gupta 2
from email import encoders
3
from email.mime.base import MIMEBase
4
from email.mime.multipart import MIMEMultipart
5
from email.mime.text import MIMEText
16561 amit.gupta 6
from paramiko.client import SSHClient
14843 amit.gupta 7
import StringIO
8
import base64
9
import gzip
16561 amit.gupta 10
import logging
11
import os
12
import paramiko
14843 amit.gupta 13
import pymongo
16561 amit.gupta 14
import random
17233 amit.gupta 15
import smtplib
16561 amit.gupta 16
import socket
13572 kshitij.so 17
import time
14843 amit.gupta 18
import urllib
14736 kshitij.so 19
import urllib2
15906 kshitij.so 20
import urlparse
14705 kshitij.so 21
#TODO Need to add messy stuff to conf.
17233 amit.gupta 22
 
23
 
24
SENDER = "cnc.center@shop2020.in"
25
PASSWORD = "5h0p2o2o"
26
SMTP_SERVER = "smtp.gmail.com"
27
SMTP_PORT = 587    
28
 
29
 
30
 
14708 kshitij.so 31
con=None
14736 kshitij.so 32
headers = { 
33
            'User-agent':'Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36',
34
            'Accept' : 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',      
35
            'Accept-Language' : 'en-US,en;q=0.8',                     
36
            'Accept-Charset' : 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
37
            'Connection':'keep-alive',
38
            'Accept-Encoding' : 'gzip,deflate,sdch'
39
        }
17273 kshitij.so 40
PROXY_MESH_LIVE = "us-ny.proxymesh.com:31280"
41
PROXY_MESH_GENERAL = "us.proxymesh.com:31280"
42
PROXY_FLIPKART = "117.240.187.35:3128"
15152 kshitij.so 43
 
14843 amit.gupta 44
PUSH_NOTIFICATION_URL='http://api.profittill.com/admin/users/push'
45
DTR_API_BASIC_AUTH = base64.encodestring('%s:%s' % ("dtr", "dtr18Feb2015")).replace('\n', '')
16371 amit.gupta 46
statusMap = {1:'Active',2:'EOL',3:'In Process',4:'Exclusive'}
17041 manish.sha 47
SOURCE_MAP = {'AMAZON':1,'FLIPKART':2,'SNAPDEAL':3,'SAHOLIC':4, 'SHOPCLUES.COM':5,'PAYTM.COM':6, 'HOMESHOP18.COM':7}
14747 kshitij.so 48
 
16398 amit.gupta 49
CB_INIT = 'Waiting Confirmation'
50
CB_PENDING = 'Pending'
51
CB_CREDIT_IN_PROCESS = 'Credit in process'
52
CB_CREDITED = 'Credited to wallet'
53
CB_NA = 'Not Applicable'
54
CB_APPROVED = 'Approved'
55
CB_REJECTED = 'Rejected'
56
CB_ONHOLD = 'On hold'
57
CB_CANCELLED = 'Cancelled'
58
 
16399 amit.gupta 59
ORDER_PLACED = 'Order Placed'
60
ORDER_DELIVERED = 'Delivered'
61
ORDER_SHIPPED = 'Shipped' #Lets see if we can make use of it
62
ORDER_CANCELLED = 'Cancelled'
16398 amit.gupta 63
 
16538 kshitij.so 64
AFFILIATE_OFFER_API= {1:"https://www.spicesafar.com/FreeBapp/fetchOffersSM?deviceId=%s&retailerCode=%d"}
65
AFFILIATE_OFFER_DESC_API = {1:"https://www.spicesafar.com/FreeBapp/individualOffersSM?deviceId=%s&offerId=%s&retailerCode=%d"}
16736 amit.gupta 66
CREDIT_TYPE_ORDER = "Order"
67
CREDIT_TYPE_APP = "App"
16399 amit.gupta 68
 
14705 kshitij.so 69
def get_mongo_connection(host='localhost', port=27017):
70
    global con
71
    if con is None:
72
        print "Establishing connection %s host and port %d" %(host,port)
73
        try:
74
            con = pymongo.MongoClient(host, port)
75
        except Exception, e:
76
            print e
77
            return None
78
    return con
79
 
13572 kshitij.so 80
def to_java_date(py_timestamp):
81
    try:
82
        java_date =  int(time.mktime(py_timestamp.timetuple())) * 1000 + py_timestamp.microsecond / 1000
83
        return java_date
84
    except:
14705 kshitij.so 85
        return None
16631 manish.sha 86
 
87
def to_py_date(java_timestamp):
16658 manish.sha 88
    try:
16660 manish.sha 89
        date = datetime.fromtimestamp(java_timestamp / 1e3)
16658 manish.sha 90
    except:
91
        return None
92
 
16631 manish.sha 93
    return date
14705 kshitij.so 94
 
95
def getCashBack(skuId, source_id, category_id, mc, mongoHost):
96
    if not bool(mc.get("category_cash_back")):
97
        populateCashBack(mc, mongoHost)
98
    itemCashBackMap = mc.get("item_cash_back")
99
    itemCashBack = itemCashBackMap.get(skuId)
100
    if itemCashBack is not None:
101
        return itemCashBack
102
    cashBackMap = mc.get("category_cash_back")
103
    sourceCashBack = cashBackMap.get(source_id)
104
    if sourceCashBack is not None and len(sourceCashBack) > 0:
105
        for cashBack in sourceCashBack:
106
            if cashBack.get(category_id) is None:
107
                continue
108
            else:
109
                return cashBack.get(category_id)
110
    else:
111
        return {}
112
 
113
def populateCashBack(mc, mongoHost):
114
    print "Populating cashback"
115
    cashBackMap = {}
116
    itemCashBackMap = {}
117
    cashBack = list(get_mongo_connection(host=mongoHost).Catalog.CategoryCashBack.find())
118
    for row in cashBack:
119
        temp_map = {}
120
        temp_list = []
121
        if cashBackMap.has_key(row['source_id']):
122
            arr = cashBackMap.get(row['source_id'])
123
            for val in arr:
124
                temp_list.append(val)
125
            temp_map[row['category_id']] = row
126
            temp_list.append(temp_map)
127
            cashBackMap[row['source_id']] = temp_list 
128
        else:
129
            temp_map[row['category_id']] = row
130
            temp_list.append(temp_map)
131
            cashBackMap[row['source_id']] = temp_list
132
    itemCashBack = list(get_mongo_connection(host=mongoHost).Catalog.ItemCashBack.find())
133
    for row in itemCashBack:
134
        if not itemCashBackMap.has_key(row['skuId']):
135
            itemCashBackMap[row['skuId']] = row
136
    mc.set("item_cash_back", itemCashBackMap, 24 * 60 * 60)
137
    mc.set("category_cash_back", cashBackMap, 24 * 60 * 60)
138
 
14736 kshitij.so 139
def ungzipResponse(r):
140
    headers = r.info()
141
    if headers.get('Content-Encoding')=='gzip':
142
        url_f = StringIO.StringIO(r.read())
143
        gz = gzip.GzipFile(fileobj=url_f)
144
        html = gz.read()
145
        gz.close()
146
        return html
147
    return r.read()
148
 
149
 
17267 kshitij.so 150
def fetchResponseUsingProxy(url, headers=headers, livePricing=None, proxy=True, flipkart=False):
17041 manish.sha 151
    if livePricing is None:
152
        PROXY_URL = PROXY_MESH_GENERAL
17267 kshitij.so 153
    elif flipkart:
154
        PROXY_URL = PROXY_FLIPKART
17041 manish.sha 155
    else:
156
        PROXY_URL = PROXY_MESH_LIVE
157
    if proxy:
158
        print PROXY_URL
159
        proxy = urllib2.ProxyHandler({'http': PROXY_URL})
160
        opener = urllib2.build_opener(proxy)
161
        urllib2.install_opener(opener)
14736 kshitij.so 162
    req = urllib2.Request(url,headers=headers)
163
    response = urllib2.urlopen(req)
164
    response_data = ungzipResponse(response)
165
    response.close()
166
    return response_data
167
 
15225 amit.gupta 168
def sendNotification(userIds, campaignName, title, message,notificationtype, url, expiresat='2999-01-01'):
14843 amit.gupta 169
    usertuples = ()
170
    count = -1
171
    for userId in userIds:
172
        count += 1
173
        usertuples += (("userIds[" + str(count) + "]", userId),)
174
    parameters = usertuples + (
175
                   ("User[name]", campaignName), 
176
                   ("User[title]", title ), 
177
                   ("User[message]", message), 
178
                   ("User[type]", notificationtype), 
15225 amit.gupta 179
                   ("User[url]", url),
180
                   ("User[expiresat]", expiresat),)
14843 amit.gupta 181
    parameters = urllib.urlencode(parameters)
14987 amit.gupta 182
    #print parameters
14843 amit.gupta 183
    pushpostrequest = urllib2.Request(PUSH_NOTIFICATION_URL, parameters, headers=headers)
184
    pushpostrequest.add_header("Authorization", "Basic %s" % DTR_API_BASIC_AUTH)
14845 amit.gupta 185
    urllib2.urlopen(pushpostrequest).read()
14948 amit.gupta 186
 
187
def getCurrTimeStamp():
188
    return toTimeStamp(datetime.now())
189
 
190
def toTimeStamp(dateTimeObj):
191
    return int(time.mktime(dateTimeObj.timetuple()))
14987 amit.gupta 192
def fromTimeStamp(timestamp):
15166 amit.gupta 193
    return datetime.fromtimestamp(timestamp)
194
 
16499 kshitij.so 195
def getNlcPoints(deal):
196
    if not(deal.get('minNlc') and deal.get('maxNlc')):
197
        print "Raising exception minNlc, maxNlc not found for %d"%(deal.get('_id'))
15182 kshitij.so 198
        raise
16499 kshitij.so 199
    if deal.get('status') == 2:
15182 kshitij.so 200
        eolWeight = .60
201
    else:
202
        eolWeight = 1.0
16499 kshitij.so 203
    if deal.get('category_id') == 3:
15182 kshitij.so 204
        basePointPercentage = 5.0
205
        maxNlcPoints = 200
16499 kshitij.so 206
    elif deal.get('category_id') == 5:
15182 kshitij.so 207
        basePointPercentage = 8.0
208
        maxNlcPoints = 150
209
    else:
210
        basePointPercentage = 10.0
211
        maxNlcPoints = 150
16499 kshitij.so 212
    discFromMinNlc = float((deal.get('minNlc') - (deal.get('available_price'))))/(deal.get('available_price')) *100
213
    discFromMaxNlc = float((deal.get('maxNlc') - (deal.get('available_price'))))/(deal.get('available_price')) *100
15182 kshitij.so 214
    print discFromMinNlc
215
    print discFromMaxNlc
216
    if discFromMinNlc > 0:
217
        nlcPoints = 100/basePointPercentage * discFromMinNlc
218
    elif discFromMinNlc < 0 and discFromMaxNlc > 0:
219
        nlcPoints = 0
220
    else:
221
        nlcPoints = 100/basePointPercentage * discFromMinNlc
222
    if (min(nlcPoints,maxNlcPoints)) > 0:
223
        nlcPoints = (min(nlcPoints,maxNlcPoints)) * eolWeight
224
    else:
225
        nlcPoints = (min(nlcPoints,maxNlcPoints))
226
 
227
    return nlcPoints
228
 
15166 amit.gupta 229
def getLogger(filePath):
230
    lgr = logging.getLogger()
231
    lgr.setLevel(logging.DEBUG)
232
    fh = logging.FileHandler(filePath)
233
    fh.setLevel(logging.INFO)
234
    frmt = logging.Formatter('%(asctime)s - %(name)s - %(message)s')
235
    fh.setFormatter(frmt)
236
    lgr.addHandler(fh)
237
    return lgr
15868 kshitij.so 238
 
239
def removePriceFormatting(price_string):
240
    return price_string.strip().replace('Rs.', '').replace('Rs', '').replace(',', '').replace(' ', '').replace('&nbsp;', '').split('.')[0]
15906 kshitij.so 241
 
15950 kshitij.so 242
def transformUrl(url,source_id):
15906 kshitij.so 243
    if source_id == 5:
244
        finalUrl = urlparse.urlparse(url)
245
        return finalUrl._replace(netloc=finalUrl.netloc.replace(finalUrl.hostname, 'm.shopclues.com')).geturl()
15950 kshitij.so 246
    elif source_id ==1:
247
        return url
248
    elif source_id == 2:
249
        finalUrl = urlparse.urlparse(url)
250
        return finalUrl._replace(netloc=finalUrl.netloc.replace(finalUrl.hostname, socket.gethostbyname(finalUrl.hostname))).geturl()
17013 manish.sha 251
    elif source_id == 7:
252
        productId = url.split('product:')[1].split('/')[0]
253
        finalUrl = 'http://m.homeshop18.com/product.mobi?productId='+str(productId)
254
        return finalUrl
15906 kshitij.so 255
 
256
 
16421 amit.gupta 257
 
258
 
259
def find_between( s, first, last ):
260
    try:
261
        start = s.find( first ) + len( first )
262
        end = s.rfind( last, start )
263
        if start ==-1 or end ==-1:
264
            return ""
265
        return s[start:end]
266
    except ValueError:
267
        return ""
15950 kshitij.so 268
 
15906 kshitij.so 269
if __name__ == '__main__':
15950 kshitij.so 270
    print transformUrl("http://www.flipkart.com/redmi-2/p/itme8ygtcfax6w39",2)
17233 amit.gupta 271
 
272
def sendmail(email, message, title, *varargs):
273
    if email == "":
274
        return
275
    mailServer = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)
276
    mailServer.ehlo()
277
    mailServer.starttls()
278
    mailServer.ehlo()
15906 kshitij.so 279
 
17233 amit.gupta 280
    # Create the container (outer) email message.
281
    msg = MIMEMultipart()
282
    msg['Subject'] = title
283
    msg.preamble = title
284
    html_msg = MIMEText(message, 'html')
285
    msg.attach(html_msg)
15906 kshitij.so 286
 
17233 amit.gupta 287
    #snapdeal more to be added here
288
    for fileName in varargs:
289
        snapdeal = MIMEBase('application', 'vnd.ms-excel')
290
        snapdeal.set_payload(file(fileName).read())
291
        encoders.encode_base64(snapdeal)
292
        snapdeal.add_header('Content-Disposition', 'attachment;filename=' + fileName)
293
        msg.attach(snapdeal)
294
 
295
 
296
    MAILTO = email 
297
    mailServer.login(SENDER, PASSWORD)
298
    mailServer.sendmail(PASSWORD, MAILTO, msg.as_string())
299
 
300
 
16561 amit.gupta 301
def readSSh(fileName):
302
    try:
303
        str1 = open(fileName).read()
304
        return str1
305
    except:
306
        ssh_client = SSHClient()
307
        str1 = ""
308
        ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
309
        ssh_client.connect('dtr', 22, 'root', 'ecip$dtrMay2014')
310
        sftp_client = ssh_client.open_sftp()
311
        try:
312
            if not os.path.exists(os.path.dirname(fileName)):
313
                os.makedirs(os.path.dirname(fileName))
314
            sftp_client.get(fileName, fileName)
315
            try:
316
                str1 = open(fileName).read()
317
                return str1
318
            finally:
319
                pass
320
        except:
321
            "could not read"
322
        return str1