Subversion Repositories SmartDukaan

Rev

Rev 17393 | Rev 17651 | 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
        }
17340 kshitij.so 40
PROXY_MESH_LIVE = "ch.proxymesh.com:31280"
17393 amit.gupta 41
PROXY_MESH_GENERAL = "us-ca.proxymesh.com:31280"
17273 kshitij.so 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"
17605 kshitij.so 68
SUB_CATEGORY_MAP = {7:'Memory Card',8:'Data Cable',9:'USB Lights',10:"Screen Magnifier"}
16399 amit.gupta 69
 
14705 kshitij.so 70
def get_mongo_connection(host='localhost', port=27017):
71
    global con
72
    if con is None:
73
        print "Establishing connection %s host and port %d" %(host,port)
74
        try:
75
            con = pymongo.MongoClient(host, port)
76
        except Exception, e:
77
            print e
78
            return None
79
    return con
80
 
13572 kshitij.so 81
def to_java_date(py_timestamp):
82
    try:
83
        java_date =  int(time.mktime(py_timestamp.timetuple())) * 1000 + py_timestamp.microsecond / 1000
84
        return java_date
85
    except:
14705 kshitij.so 86
        return None
16631 manish.sha 87
 
88
def to_py_date(java_timestamp):
16658 manish.sha 89
    try:
16660 manish.sha 90
        date = datetime.fromtimestamp(java_timestamp / 1e3)
16658 manish.sha 91
    except:
92
        return None
93
 
16631 manish.sha 94
    return date
14705 kshitij.so 95
 
96
def getCashBack(skuId, source_id, category_id, mc, mongoHost):
17605 kshitij.so 97
    if mc.get("category_cash_back") is None or not bool(mc.get("category_cash_back")):
14705 kshitij.so 98
        populateCashBack(mc, mongoHost)
99
    itemCashBackMap = mc.get("item_cash_back")
100
    itemCashBack = itemCashBackMap.get(skuId)
101
    if itemCashBack is not None:
102
        return itemCashBack
103
    cashBackMap = mc.get("category_cash_back")
104
    sourceCashBack = cashBackMap.get(source_id)
105
    if sourceCashBack is not None and len(sourceCashBack) > 0:
106
        for cashBack in sourceCashBack:
107
            if cashBack.get(category_id) is None:
108
                continue
109
            else:
110
                return cashBack.get(category_id)
111
    else:
112
        return {}
113
 
114
def populateCashBack(mc, mongoHost):
115
    print "Populating cashback"
116
    cashBackMap = {}
117
    itemCashBackMap = {}
118
    cashBack = list(get_mongo_connection(host=mongoHost).Catalog.CategoryCashBack.find())
119
    for row in cashBack:
120
        temp_map = {}
121
        temp_list = []
122
        if cashBackMap.has_key(row['source_id']):
123
            arr = cashBackMap.get(row['source_id'])
124
            for val in arr:
125
                temp_list.append(val)
126
            temp_map[row['category_id']] = row
127
            temp_list.append(temp_map)
128
            cashBackMap[row['source_id']] = temp_list 
129
        else:
130
            temp_map[row['category_id']] = row
131
            temp_list.append(temp_map)
132
            cashBackMap[row['source_id']] = temp_list
133
    itemCashBack = list(get_mongo_connection(host=mongoHost).Catalog.ItemCashBack.find())
134
    for row in itemCashBack:
135
        if not itemCashBackMap.has_key(row['skuId']):
136
            itemCashBackMap[row['skuId']] = row
137
    mc.set("item_cash_back", itemCashBackMap, 24 * 60 * 60)
138
    mc.set("category_cash_back", cashBackMap, 24 * 60 * 60)
139
 
14736 kshitij.so 140
def ungzipResponse(r):
141
    headers = r.info()
142
    if headers.get('Content-Encoding')=='gzip':
143
        url_f = StringIO.StringIO(r.read())
144
        gz = gzip.GzipFile(fileobj=url_f)
145
        html = gz.read()
146
        gz.close()
147
        return html
148
    return r.read()
149
 
150
 
17267 kshitij.so 151
def fetchResponseUsingProxy(url, headers=headers, livePricing=None, proxy=True, flipkart=False):
17041 manish.sha 152
    if livePricing is None:
153
        PROXY_URL = PROXY_MESH_GENERAL
17267 kshitij.so 154
    elif flipkart:
155
        PROXY_URL = PROXY_FLIPKART
17041 manish.sha 156
    else:
157
        PROXY_URL = PROXY_MESH_LIVE
158
    if proxy:
159
        print PROXY_URL
160
        proxy = urllib2.ProxyHandler({'http': PROXY_URL})
161
        opener = urllib2.build_opener(proxy)
162
        urllib2.install_opener(opener)
14736 kshitij.so 163
    req = urllib2.Request(url,headers=headers)
164
    response = urllib2.urlopen(req)
165
    response_data = ungzipResponse(response)
166
    response.close()
167
    return response_data
168
 
14948 amit.gupta 169
def getCurrTimeStamp():
170
    return toTimeStamp(datetime.now())
171
 
172
def toTimeStamp(dateTimeObj):
173
    return int(time.mktime(dateTimeObj.timetuple()))
14987 amit.gupta 174
def fromTimeStamp(timestamp):
15166 amit.gupta 175
    return datetime.fromtimestamp(timestamp)
176
 
16499 kshitij.so 177
def getNlcPoints(deal):
178
    if not(deal.get('minNlc') and deal.get('maxNlc')):
179
        print "Raising exception minNlc, maxNlc not found for %d"%(deal.get('_id'))
15182 kshitij.so 180
        raise
16499 kshitij.so 181
    if deal.get('status') == 2:
15182 kshitij.so 182
        eolWeight = .60
183
    else:
184
        eolWeight = 1.0
16499 kshitij.so 185
    if deal.get('category_id') == 3:
15182 kshitij.so 186
        basePointPercentage = 5.0
187
        maxNlcPoints = 200
16499 kshitij.so 188
    elif deal.get('category_id') == 5:
15182 kshitij.so 189
        basePointPercentage = 8.0
190
        maxNlcPoints = 150
191
    else:
192
        basePointPercentage = 10.0
193
        maxNlcPoints = 150
16499 kshitij.so 194
    discFromMinNlc = float((deal.get('minNlc') - (deal.get('available_price'))))/(deal.get('available_price')) *100
195
    discFromMaxNlc = float((deal.get('maxNlc') - (deal.get('available_price'))))/(deal.get('available_price')) *100
15182 kshitij.so 196
    print discFromMinNlc
197
    print discFromMaxNlc
198
    if discFromMinNlc > 0:
199
        nlcPoints = 100/basePointPercentage * discFromMinNlc
200
    elif discFromMinNlc < 0 and discFromMaxNlc > 0:
201
        nlcPoints = 0
202
    else:
203
        nlcPoints = 100/basePointPercentage * discFromMinNlc
204
    if (min(nlcPoints,maxNlcPoints)) > 0:
205
        nlcPoints = (min(nlcPoints,maxNlcPoints)) * eolWeight
206
    else:
207
        nlcPoints = (min(nlcPoints,maxNlcPoints))
208
 
209
    return nlcPoints
210
 
15166 amit.gupta 211
def getLogger(filePath):
212
    lgr = logging.getLogger()
213
    lgr.setLevel(logging.DEBUG)
214
    fh = logging.FileHandler(filePath)
215
    fh.setLevel(logging.INFO)
216
    frmt = logging.Formatter('%(asctime)s - %(name)s - %(message)s')
217
    fh.setFormatter(frmt)
218
    lgr.addHandler(fh)
219
    return lgr
15868 kshitij.so 220
 
221
def removePriceFormatting(price_string):
222
    return price_string.strip().replace('Rs.', '').replace('Rs', '').replace(',', '').replace(' ', '').replace('&nbsp;', '').split('.')[0]
15906 kshitij.so 223
 
15950 kshitij.so 224
def transformUrl(url,source_id):
15906 kshitij.so 225
    if source_id == 5:
226
        finalUrl = urlparse.urlparse(url)
227
        return finalUrl._replace(netloc=finalUrl.netloc.replace(finalUrl.hostname, 'm.shopclues.com')).geturl()
15950 kshitij.so 228
    elif source_id ==1:
229
        return url
230
    elif source_id == 2:
231
        finalUrl = urlparse.urlparse(url)
232
        return finalUrl._replace(netloc=finalUrl.netloc.replace(finalUrl.hostname, socket.gethostbyname(finalUrl.hostname))).geturl()
17013 manish.sha 233
    elif source_id == 7:
234
        productId = url.split('product:')[1].split('/')[0]
235
        finalUrl = 'http://m.homeshop18.com/product.mobi?productId='+str(productId)
236
        return finalUrl
15906 kshitij.so 237
 
238
 
16421 amit.gupta 239
 
240
 
241
def find_between( s, first, last ):
242
    try:
243
        start = s.find( first ) + len( first )
244
        end = s.rfind( last, start )
245
        if start ==-1 or end ==-1:
246
            return ""
247
        return s[start:end]
248
    except ValueError:
249
        return ""
15950 kshitij.so 250
 
15906 kshitij.so 251
if __name__ == '__main__':
15950 kshitij.so 252
    print transformUrl("http://www.flipkart.com/redmi-2/p/itme8ygtcfax6w39",2)
17233 amit.gupta 253
 
254
def sendmail(email, message, title, *varargs):
255
    if email == "":
256
        return
257
    mailServer = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)
258
    mailServer.ehlo()
259
    mailServer.starttls()
260
    mailServer.ehlo()
15906 kshitij.so 261
 
17233 amit.gupta 262
    # Create the container (outer) email message.
263
    msg = MIMEMultipart()
264
    msg['Subject'] = title
265
    msg.preamble = title
266
    html_msg = MIMEText(message, 'html')
267
    msg.attach(html_msg)
15906 kshitij.so 268
 
17233 amit.gupta 269
    #snapdeal more to be added here
270
    for fileName in varargs:
271
        snapdeal = MIMEBase('application', 'vnd.ms-excel')
272
        snapdeal.set_payload(file(fileName).read())
273
        encoders.encode_base64(snapdeal)
274
        snapdeal.add_header('Content-Disposition', 'attachment;filename=' + fileName)
275
        msg.attach(snapdeal)
276
 
277
 
278
    MAILTO = email 
279
    mailServer.login(SENDER, PASSWORD)
280
    mailServer.sendmail(PASSWORD, MAILTO, msg.as_string())
281
 
282
 
16561 amit.gupta 283
def readSSh(fileName):
284
    try:
285
        str1 = open(fileName).read()
286
        return str1
287
    except:
288
        ssh_client = SSHClient()
289
        str1 = ""
290
        ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
291
        ssh_client.connect('dtr', 22, 'root', 'ecip$dtrMay2014')
292
        sftp_client = ssh_client.open_sftp()
293
        try:
294
            if not os.path.exists(os.path.dirname(fileName)):
295
                os.makedirs(os.path.dirname(fileName))
296
            sftp_client.get(fileName, fileName)
297
            try:
298
                str1 = open(fileName).read()
299
                return str1
300
            finally:
301
                pass
302
        except:
303
            "could not read"
304
        return str1