Subversion Repositories SmartDukaan

Rev

Rev 17273 | Rev 17340 | 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
 
14948 amit.gupta 168
def getCurrTimeStamp():
169
    return toTimeStamp(datetime.now())
170
 
171
def toTimeStamp(dateTimeObj):
172
    return int(time.mktime(dateTimeObj.timetuple()))
14987 amit.gupta 173
def fromTimeStamp(timestamp):
15166 amit.gupta 174
    return datetime.fromtimestamp(timestamp)
175
 
16499 kshitij.so 176
def getNlcPoints(deal):
177
    if not(deal.get('minNlc') and deal.get('maxNlc')):
178
        print "Raising exception minNlc, maxNlc not found for %d"%(deal.get('_id'))
15182 kshitij.so 179
        raise
16499 kshitij.so 180
    if deal.get('status') == 2:
15182 kshitij.so 181
        eolWeight = .60
182
    else:
183
        eolWeight = 1.0
16499 kshitij.so 184
    if deal.get('category_id') == 3:
15182 kshitij.so 185
        basePointPercentage = 5.0
186
        maxNlcPoints = 200
16499 kshitij.so 187
    elif deal.get('category_id') == 5:
15182 kshitij.so 188
        basePointPercentage = 8.0
189
        maxNlcPoints = 150
190
    else:
191
        basePointPercentage = 10.0
192
        maxNlcPoints = 150
16499 kshitij.so 193
    discFromMinNlc = float((deal.get('minNlc') - (deal.get('available_price'))))/(deal.get('available_price')) *100
194
    discFromMaxNlc = float((deal.get('maxNlc') - (deal.get('available_price'))))/(deal.get('available_price')) *100
15182 kshitij.so 195
    print discFromMinNlc
196
    print discFromMaxNlc
197
    if discFromMinNlc > 0:
198
        nlcPoints = 100/basePointPercentage * discFromMinNlc
199
    elif discFromMinNlc < 0 and discFromMaxNlc > 0:
200
        nlcPoints = 0
201
    else:
202
        nlcPoints = 100/basePointPercentage * discFromMinNlc
203
    if (min(nlcPoints,maxNlcPoints)) > 0:
204
        nlcPoints = (min(nlcPoints,maxNlcPoints)) * eolWeight
205
    else:
206
        nlcPoints = (min(nlcPoints,maxNlcPoints))
207
 
208
    return nlcPoints
209
 
15166 amit.gupta 210
def getLogger(filePath):
211
    lgr = logging.getLogger()
212
    lgr.setLevel(logging.DEBUG)
213
    fh = logging.FileHandler(filePath)
214
    fh.setLevel(logging.INFO)
215
    frmt = logging.Formatter('%(asctime)s - %(name)s - %(message)s')
216
    fh.setFormatter(frmt)
217
    lgr.addHandler(fh)
218
    return lgr
15868 kshitij.so 219
 
220
def removePriceFormatting(price_string):
221
    return price_string.strip().replace('Rs.', '').replace('Rs', '').replace(',', '').replace(' ', '').replace('&nbsp;', '').split('.')[0]
15906 kshitij.so 222
 
15950 kshitij.so 223
def transformUrl(url,source_id):
15906 kshitij.so 224
    if source_id == 5:
225
        finalUrl = urlparse.urlparse(url)
226
        return finalUrl._replace(netloc=finalUrl.netloc.replace(finalUrl.hostname, 'm.shopclues.com')).geturl()
15950 kshitij.so 227
    elif source_id ==1:
228
        return url
229
    elif source_id == 2:
230
        finalUrl = urlparse.urlparse(url)
231
        return finalUrl._replace(netloc=finalUrl.netloc.replace(finalUrl.hostname, socket.gethostbyname(finalUrl.hostname))).geturl()
17013 manish.sha 232
    elif source_id == 7:
233
        productId = url.split('product:')[1].split('/')[0]
234
        finalUrl = 'http://m.homeshop18.com/product.mobi?productId='+str(productId)
235
        return finalUrl
15906 kshitij.so 236
 
237
 
16421 amit.gupta 238
 
239
 
240
def find_between( s, first, last ):
241
    try:
242
        start = s.find( first ) + len( first )
243
        end = s.rfind( last, start )
244
        if start ==-1 or end ==-1:
245
            return ""
246
        return s[start:end]
247
    except ValueError:
248
        return ""
15950 kshitij.so 249
 
15906 kshitij.so 250
if __name__ == '__main__':
15950 kshitij.so 251
    print transformUrl("http://www.flipkart.com/redmi-2/p/itme8ygtcfax6w39",2)
17233 amit.gupta 252
 
253
def sendmail(email, message, title, *varargs):
254
    if email == "":
255
        return
256
    mailServer = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)
257
    mailServer.ehlo()
258
    mailServer.starttls()
259
    mailServer.ehlo()
15906 kshitij.so 260
 
17233 amit.gupta 261
    # Create the container (outer) email message.
262
    msg = MIMEMultipart()
263
    msg['Subject'] = title
264
    msg.preamble = title
265
    html_msg = MIMEText(message, 'html')
266
    msg.attach(html_msg)
15906 kshitij.so 267
 
17233 amit.gupta 268
    #snapdeal more to be added here
269
    for fileName in varargs:
270
        snapdeal = MIMEBase('application', 'vnd.ms-excel')
271
        snapdeal.set_payload(file(fileName).read())
272
        encoders.encode_base64(snapdeal)
273
        snapdeal.add_header('Content-Disposition', 'attachment;filename=' + fileName)
274
        msg.attach(snapdeal)
275
 
276
 
277
    MAILTO = email 
278
    mailServer.login(SENDER, PASSWORD)
279
    mailServer.sendmail(PASSWORD, MAILTO, msg.as_string())
280
 
281
 
16561 amit.gupta 282
def readSSh(fileName):
283
    try:
284
        str1 = open(fileName).read()
285
        return str1
286
    except:
287
        ssh_client = SSHClient()
288
        str1 = ""
289
        ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
290
        ssh_client.connect('dtr', 22, 'root', 'ecip$dtrMay2014')
291
        sftp_client = ssh_client.open_sftp()
292
        try:
293
            if not os.path.exists(os.path.dirname(fileName)):
294
                os.makedirs(os.path.dirname(fileName))
295
            sftp_client.get(fileName, fileName)
296
            try:
297
                str1 = open(fileName).read()
298
                return str1
299
            finally:
300
                pass
301
        except:
302
            "could not read"
303
        return str1