Subversion Repositories SmartDukaan

Rev

Rev 17777 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
17772 kshitij.so 1
from elixir import *
2
from dtr.storage.MemCache import MemCache
3
from shop2020.model.v1.catalog.impl import DataService as CatalogDataService
4
from shop2020.model.v1.inventory.impl import DataService as InventoryDataService
5
from shop2020.model.v1.catalog.impl.DataService import Item
6
from shop2020.model.v1.inventory.impl.DataService import ItemAvailabilityCache
7
from dtr.utils.utils import get_mongo_connection, SOURCE_MAP
8
import optparse
9
import traceback
10
 
11
parser = optparse.OptionParser()
12
parser.add_option("-H", "--host", dest="hostname",
13
                      default="localhost",
14
                      type="string", help="The HOST where the DB server is running",
15
                      metavar="host")
16
parser.add_option("-m", "--m", dest="mongoHost",
17
                      default="localhost",
18
                      type="string", help="The HOST where the mongo server is running",
19
                      metavar="mongo_host")
20
 
21
(options, args) = parser.parse_args()
22
 
23
bundleMap = {}
24
inventoryMap = {}
25
memCon = None
26
maxQuantity = 20
27
 
28
def get_memcache_connection(host='127.0.0.1'):
29
    global memCon
30
    if memCon is None:
31
        print "Establishing connection %s host" %(host)
32
        try:
33
            memCon = MemCache(host)
34
        except Exception, e:
35
            print e
36
            return None
37
    return memCon
38
 
39
def populateSaholicBundles():
40
    global bundleMap
41
    allSaholicBundles = get_mongo_connection(host=options.mongoHost).Catalog.MasterData.find({'source_id':SOURCE_MAP.get('SAHOLIC')})
42
    for item in allSaholicBundles:
43
        try:
44
            if item.get('identifier') is not None or item.get('identifier').strip()!="":
45
                #validItems.append({'_id':item.get('_id'),'catalog_item_id':long(item.get('identifier'))})
46
                bundleMap[long(item.get('identifier'))] = []
47
 
48
            else:
49
                print "Identifier not valid for %d"%(item.get('_id'))
50
                print type(item.get('identifier'))
51
        except Exception as e:
52
            print e
53
            print "Exception Identifier not valid for %d"%(item.get('_id'))
54
    print bundleMap 
55
 
56
 
57
def addItemIdInfo():
58
    global bundleMap
59
    CatalogDataService.initialize(db_hostname='localhost',setup=False)
60
    totalLength = len(bundleMap.keys())
61
    fetch =100
62
    start = 0
63
    toBreak = False
64
    while(True):
65
        print start
66
        print fetch
67
        if fetch > totalLength:
68
            fetch = totalLength
69
            toBreak = True
70
 
71
        item_list = bundleMap.keys()[start:fetch]
72
        items = session.query(Item).filter(Item.catalog_item_id.in_(item_list)).all()
73
        print items
74
        for i in items:
75
            tempList = bundleMap.get(i.catalog_item_id)
76
            tempList.append({'item_id':i.id,'color':i.color})
77
        if toBreak:
78
            print "Breaking"
79
            break
80
        start = fetch
81
        fetch = start + fetch
82
    session.close()
83
 
84
def addInfoToMemCache():
85
    for k, v in bundleMap.iteritems():
86
        for item in v:
87
            availability = inventoryMap.get(item.get('item_id'))
88
            if availability is None:
89
                availability = 0
90
            item['availability'] = availability
91
            if availability < maxQuantity:
92
                item['maxQuantity'] = availability
93
            else:
94
                item['maxQuantity'] = maxQuantity
95
        temp = sorted(v, key = lambda x: (x['availability']),reverse=True)
96
        mc = get_memcache_connection(host=options.mongoHost)
97
        mc.set(str("item_availability_"+str(k)), temp, 24*60*60)
98
 
99
 
100
def fetchItemAvailablity():
101
    global inventoryMap
102
    InventoryDataService.initialize(db_hostname='localhost',setup=False)
103
    allInventory = session.query(ItemAvailabilityCache).filter(ItemAvailabilityCache.sourceId==1).all()
104
    for itemInventory in allInventory:
105
        inventoryMap[itemInventory.itemId] = itemInventory.totalAvailability
106
    session.close()
107
 
108
if __name__ == '__main__':
109
    populateSaholicBundles()
110
    addItemIdInfo()
111
    fetchItemAvailablity()
112
    addInfoToMemCache()
113
    mc = get_memcache_connection(host=options.mongoHost)
114
    print mc.get("item_availability_1005556")