Rev 17780 | Rev 17986 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
from elixir import *from dtr.storage.MemCache import MemCachefrom shop2020.model.v1.catalog.impl import DataService as CatalogDataServicefrom shop2020.model.v1.inventory.impl import DataService as InventoryDataServicefrom shop2020.model.v1.catalog.impl.DataService import Item, PrivateDealsfrom shop2020.model.v1.inventory.impl.DataService import ItemAvailabilityCachefrom dtr.utils.utils import get_mongo_connection, SOURCE_MAPimport optparseimport tracebackfrom datetime import datetimeparser = optparse.OptionParser()parser.add_option("-H", "--host", dest="hostname",default="localhost",type="string", help="The HOST where the DB server is running",metavar="host")parser.add_option("-m", "--m", dest="mongoHost",default="localhost",type="string", help="The HOST where the mongo server is running",metavar="mongo_host")(options, args) = parser.parse_args()bundleMap = {}inventoryMap = {}memCon = NonemaxQuantity = 20def get_memcache_connection(host='127.0.0.1'):global memConif memCon is None:print "Establishing connection %s host" %(host)try:memCon = MemCache(host)except Exception, e:print ereturn Nonereturn memCondef populateSaholicBundles():global bundleMapallSaholicBundles = get_mongo_connection(host=options.mongoHost).Catalog.MasterData.find({'source_id':SOURCE_MAP.get('SAHOLIC')})for item in allSaholicBundles:try:if item.get('identifier') is not None or item.get('identifier').strip()!="":#validItems.append({'_id':item.get('_id'),'catalog_item_id':long(item.get('identifier'))})bundleMap[long(item.get('identifier'))] = []else:print "Identifier not valid for %d"%(item.get('_id'))print type(item.get('identifier'))except Exception as e:print eprint "Exception Identifier not valid for %d"%(item.get('_id'))print bundleMapdef addItemIdInfo():global bundleMapCatalogDataService.initialize(db_hostname=options.hostname,setup=False)totalLength = len(bundleMap.keys())fetch =100start = 0toBreak = Falsewhile(True):print startprint fetchif fetch > totalLength:fetch = totalLengthtoBreak = Trueitem_list = bundleMap.keys()[start:fetch]items = session.query(Item,PrivateDeals).outerjoin((PrivateDeals,Item.id==PrivateDeals.item_id)).filter(Item.catalog_item_id.in_(item_list)).all()print itemsfor i in items:d_item = i[0]d_privatedeal = i[1]tempList = bundleMap.get(d_item.catalog_item_id)sellingPrice = d_item.sellingPricesellingPriceType = "Normal"if d_privatedeal is not None and d_privatedeal.isActive==1 and d_privatedeal.startDate < datetime.now() and d_privatedeal.endDate > datetime.now() and d_privatedeal.dealPrice >0:sellingPrice = d_privatedeal.dealPricesellingPriceType = "Private deal price"tempList.append({'item_id':d_item.id,'color':d_item.color,'sellingPrice':sellingPrice,'sellingPriceType':sellingPriceType})if toBreak:print "Breaking"breakstart = fetchfetch = start + fetchsession.close()def addInfoToMemCache():for k, v in bundleMap.iteritems():for item in v:availability = inventoryMap.get(item.get('item_id'))if availability is None:availability = 0item['availability'] = availabilityif availability < maxQuantity:item['maxQuantity'] = availabilityelse:item['maxQuantity'] = maxQuantitytemp = sorted(v, key = lambda x: (x['availability']),reverse=True)mc = get_memcache_connection(host=options.mongoHost)mc.set(str("item_availability_"+str(k)), temp, 24*60*60)def fetchItemAvailablity():global inventoryMapInventoryDataService.initialize(db_hostname=options.hostname,setup=False)allInventory = session.query(ItemAvailabilityCache).filter(ItemAvailabilityCache.sourceId==1).all()for itemInventory in allInventory:inventoryMap[itemInventory.itemId] = itemInventory.totalAvailabilitysession.close()if __name__ == '__main__':populateSaholicBundles()addItemIdInfo()fetchItemAvailablity()addInfoToMemCache()mc = get_memcache_connection(host=options.mongoHost)print mc.get("item_availability_1005556")