Rev 16398 | Rev 16499 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
import StringIOimport base64import gzipimport pymongoimport timeimport urllibimport urllib2import loggingfrom datetime import datetimeimport randomimport urlparseimport socket#TODO Need to add messy stuff to conf.con=Noneheaders = {'User-agent':'Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36','Accept' : 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8','Accept-Language' : 'en-US,en;q=0.8','Accept-Charset' : 'ISO-8859-1,utf-8;q=0.7,*;q=0.3','Connection':'keep-alive','Accept-Encoding' : 'gzip,deflate,sdch'}PROXY_MESH_LIVE = "us-nv.proxymesh.com:31280"PROXY_MESH_GENERAL = "us-il.proxymesh.com:31280"PUSH_NOTIFICATION_URL='http://api.profittill.com/admin/users/push'DTR_API_BASIC_AUTH = base64.encodestring('%s:%s' % ("dtr", "dtr18Feb2015")).replace('\n', '')statusMap = {1:'Active',2:'EOL',3:'In Process',4:'Exclusive'}CB_INIT = 'Waiting Confirmation'CB_PENDING = 'Pending'CB_CREDIT_IN_PROCESS = 'Credit in process'CB_CREDITED = 'Credited to wallet'CB_NA = 'Not Applicable'CB_APPROVED = 'Approved'CB_REJECTED = 'Rejected'CB_ONHOLD = 'On hold'CB_CANCELLED = 'Cancelled'ORDER_PLACED = 'Order Placed'ORDER_DELIVERED = 'Delivered'ORDER_SHIPPED = 'Shipped' #Lets see if we can make use of itORDER_CANCELLED = 'Cancelled'def get_mongo_connection(host='localhost', port=27017):global conif con is None:print "Establishing connection %s host and port %d" %(host,port)try:con = pymongo.MongoClient(host, port)except Exception, e:print ereturn Nonereturn condef to_java_date(py_timestamp):try:java_date = int(time.mktime(py_timestamp.timetuple())) * 1000 + py_timestamp.microsecond / 1000return java_dateexcept:return Nonedef getCashBack(skuId, source_id, category_id, mc, mongoHost):if not bool(mc.get("category_cash_back")):populateCashBack(mc, mongoHost)itemCashBackMap = mc.get("item_cash_back")itemCashBack = itemCashBackMap.get(skuId)if itemCashBack is not None:return itemCashBackcashBackMap = mc.get("category_cash_back")sourceCashBack = cashBackMap.get(source_id)if sourceCashBack is not None and len(sourceCashBack) > 0:for cashBack in sourceCashBack:if cashBack.get(category_id) is None:continueelse:return cashBack.get(category_id)else:return {}def populateCashBack(mc, mongoHost):print "Populating cashback"cashBackMap = {}itemCashBackMap = {}cashBack = list(get_mongo_connection(host=mongoHost).Catalog.CategoryCashBack.find())for row in cashBack:temp_map = {}temp_list = []if cashBackMap.has_key(row['source_id']):arr = cashBackMap.get(row['source_id'])for val in arr:temp_list.append(val)temp_map[row['category_id']] = rowtemp_list.append(temp_map)cashBackMap[row['source_id']] = temp_listelse:temp_map[row['category_id']] = rowtemp_list.append(temp_map)cashBackMap[row['source_id']] = temp_listitemCashBack = list(get_mongo_connection(host=mongoHost).Catalog.ItemCashBack.find())for row in itemCashBack:if not itemCashBackMap.has_key(row['skuId']):itemCashBackMap[row['skuId']] = rowmc.set("item_cash_back", itemCashBackMap, 24 * 60 * 60)mc.set("category_cash_back", cashBackMap, 24 * 60 * 60)def ungzipResponse(r):headers = r.info()if headers.get('Content-Encoding')=='gzip':url_f = StringIO.StringIO(r.read())gz = gzip.GzipFile(fileobj=url_f)html = gz.read()gz.close()return htmlreturn r.read()def fetchResponseUsingProxy(url, headers=headers, livePricing=None, proxy=True):if livePricing is None:PROXY_URL = PROXY_MESH_GENERALelse:PROXY_URL = PROXY_MESH_LIVEif proxy:print PROXY_URLproxy = urllib2.ProxyHandler({'http': PROXY_URL})opener = urllib2.build_opener(proxy)urllib2.install_opener(opener)req = urllib2.Request(url,headers=headers)response = urllib2.urlopen(req)response_data = ungzipResponse(response)response.close()return response_datadef sendNotification(userIds, campaignName, title, message,notificationtype, url, expiresat='2999-01-01'):usertuples = ()count = -1for userId in userIds:count += 1usertuples += (("userIds[" + str(count) + "]", userId),)parameters = usertuples + (("User[name]", campaignName),("User[title]", title ),("User[message]", message),("User[type]", notificationtype),("User[url]", url),("User[expiresat]", expiresat),)parameters = urllib.urlencode(parameters)#print parameterspushpostrequest = urllib2.Request(PUSH_NOTIFICATION_URL, parameters, headers=headers)pushpostrequest.add_header("Authorization", "Basic %s" % DTR_API_BASIC_AUTH)urllib2.urlopen(pushpostrequest).read()def getCurrTimeStamp():return toTimeStamp(datetime.now())def toTimeStamp(dateTimeObj):return int(time.mktime(dateTimeObj.timetuple()))def fromTimeStamp(timestamp):return datetime.fromtimestamp(timestamp)def getNlcPoints(item, minNlc, maxNlc, available_price):if not(minNlc and maxNlc):print "Raising exception minNlc, maxNlc not found for %d"%(item.get('_id'))raiseif item.get('status') == 2:eolWeight = .60else:eolWeight = 1.0if item.get('category_id') == 3:basePointPercentage = 5.0maxNlcPoints = 200elif item.get('category_id') == 5:basePointPercentage = 8.0maxNlcPoints = 150else:basePointPercentage = 10.0maxNlcPoints = 150discFromMinNlc = float((minNlc - (available_price)))/(available_price) *100discFromMaxNlc = float((maxNlc - (available_price)))/(available_price) *100print discFromMinNlcprint discFromMaxNlcif discFromMinNlc > 0:nlcPoints = 100/basePointPercentage * discFromMinNlcelif discFromMinNlc < 0 and discFromMaxNlc > 0:nlcPoints = 0else:nlcPoints = 100/basePointPercentage * discFromMinNlcif (min(nlcPoints,maxNlcPoints)) > 0:nlcPoints = (min(nlcPoints,maxNlcPoints)) * eolWeightelse:nlcPoints = (min(nlcPoints,maxNlcPoints))return nlcPointsdef getLogger(filePath):lgr = logging.getLogger()lgr.setLevel(logging.DEBUG)fh = logging.FileHandler(filePath)fh.setLevel(logging.INFO)frmt = logging.Formatter('%(asctime)s - %(name)s - %(message)s')fh.setFormatter(frmt)lgr.addHandler(fh)return lgrdef removePriceFormatting(price_string):return price_string.strip().replace('Rs.', '').replace('Rs', '').replace(',', '').replace(' ', '').replace(' ', '').split('.')[0]def transformUrl(url,source_id):if source_id == 5:finalUrl = urlparse.urlparse(url)return finalUrl._replace(netloc=finalUrl.netloc.replace(finalUrl.hostname, 'm.shopclues.com')).geturl()elif source_id ==1:return urlelif source_id == 2:finalUrl = urlparse.urlparse(url)return finalUrl._replace(netloc=finalUrl.netloc.replace(finalUrl.hostname, socket.gethostbyname(finalUrl.hostname))).geturl()if __name__ == '__main__':print transformUrl("http://www.flipkart.com/redmi-2/p/itme8ygtcfax6w39",2)