Subversion Repositories SmartDukaan

Rev

Rev 22315 | Rev 22317 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
22307 amit.gupta 1
from elixir import *
2
from shop2020.clients.InventoryClient import InventoryClient
3
from shop2020.model.v1.catalog.impl import DataService
4
from shop2020.model.v1.catalog.impl.DataService import Item, Tag_Listing, \
5
    Tag_Ranking, PrivateDeals
6
from shop2020.thriftpy.model.v1.catalog.ttypes import status
7
from sqlalchemy.sql.expression import or_, desc
8
from sqlalchemy.sql.functions import now
9
import json
10
import optparse
11
import os
12
import pymongo
13
import pysolr
14
import shutil
15
import traceback
16
#import pymongo
17
#import pysolr
18
 
19
 
20
parser = optparse.OptionParser()
22308 amit.gupta 21
parser.add_option("-d", "--d", dest="dbHost",
22
                      default="127.0.0.1",
22307 amit.gupta 23
                      type="string", help="The HOST where the mysql server is running",
22308 amit.gupta 24
                      metavar="DBHOST")
22307 amit.gupta 25
parser.add_option("-s", "--s", dest="solrPath",
22314 amit.gupta 26
                      default="http://localhost:8983/solr/demo",
22307 amit.gupta 27
                      type="string", help="Complete solr path",
22308 amit.gupta 28
                      metavar="SOLRHOST")
29
parser.add_option("-m", "--m", dest="mongoHost",
22311 amit.gupta 30
                      default="localhost",
22308 amit.gupta 31
                      type="string", help="Complete solr path",
22307 amit.gupta 32
                      metavar="HOST")
33
 
34
(options, args) = parser.parse_args()
35
 
22312 amit.gupta 36
con=None
22307 amit.gupta 37
 
22310 amit.gupta 38
DataService.initialize(db_hostname=options.dbHost)
22307 amit.gupta 39
solr = pysolr.Solr(options.solrPath, timeout=10)
40
 
22308 amit.gupta 41
def get_mongo_connection(host='localhost', port=27017):
42
    global con
43
    if con is None:
44
        print "Establishing connection %s host and port %d" %(host,port)
45
        try:
46
            con = pymongo.MongoClient(host, port)
47
        except Exception, e:
48
            print e
49
            return None
50
    return con
22307 amit.gupta 51
 
52
class __SkuInfo:
53
 
54
    def __init__(self, id, ids, brand, model_name, category_id, subCategoryId,thumbnail, title, brand_synonyms, model_name_synonyms, source_product_names, \
55
                 category, subCategory):
56
        #Skubundle id
57
        self.id = id
58
        #_id of skus
59
        self.ids = ids
60
        self.brand = brand
61
        self.model_name = model_name
62
        self.category_id = category_id
63
        self.subCategoryId = subCategoryId
64
        self.thumbnail = thumbnail 
65
        self.title= title
66
        self.brand_synonyms = brand_synonyms
67
        self.model_name_synonyms = model_name_synonyms
68
        self.source_product_names = source_product_names
69
        self.category = category
70
        self.subCategory = subCategory
71
 
72
    def toJSON(self):
73
        return json.dumps(self, default=lambda o: o.__dict__, 
74
            sort_keys=True, indent=4)
75
 
76
class __Catalog:
77
 
78
    def __init__(self, id, rank, title, items):
79
        #Skubundle id
80
        self.id = id
81
        self.rank = rank
82
        self.title = title
83
        self._childDocuments_ = items
84
    def toJSON(self):
85
        return json.dumps(self, default=lambda o: o.__dict__)
86
 
87
class __Item:
88
    def __init__(self, id, color, tags):
89
        self.id = id
90
        self.color = color
91
        self._childDocuments_ = tags
92
        def toJSON(self):
93
            return json.dumps(self, default=lambda o: o.__dict__)
94
class __Tag:
95
    def __init__(self, id, sellingPrice, mop):
96
        self.id = id
97
        self.sellingPrice = sellingPrice
98
        self.mop = mop
99
 
100
 
101
#solr = pysolr.Solr(options.solrPath, timeout=10)
102
 
103
 
104
def todict(obj, classkey=None):
105
    if isinstance(obj, dict):
106
        data = {}
107
        for (k, v) in obj.items():
108
            data[k] = todict(v, classkey)
109
        return data
110
    elif hasattr(obj, "_ast"):
111
        return todict(obj._ast())
112
    elif hasattr(obj, "__iter__"):
113
        return [todict(v, classkey) for v in obj]
114
    elif hasattr(obj, "__dict__"):
115
        data = dict([(key, todict(value, classkey)) 
116
            for key, value in obj.__dict__.iteritems() 
117
            if not callable(value) and not key.startswith('_')])
118
        if classkey is not None and hasattr(obj, "__class__"):
119
            data[classkey] = obj.__class__.__name__
120
        return data
121
    else:
122
        return obj
123
 
124
 
125
def populateTagItems():
126
 
127
 
128
    tagRankingList = session.query(Tag_Ranking.catalogItemId).order_by(desc(Tag_Ranking.rankPoints)).all()
129
 
130
 
131
 
132
    catalogMap = {}
133
    #stmt = session.query(PrivateDeals).filter_by(isActive=1).filter(now().between(PrivateDeals.startDate, PrivateDeals.endDate)).subquery()
134
    #query = session.query(Item, privateDealAlias.dealPrice).outerjoin((privateDealAlias, Item.id==privateDealAlias.item_id)).filter(Item.status != status.PHASED_OUT)
135
    tuples = session.query(Tag_Listing, Item).join((Item, Item.id==Tag_Listing.item_id)).filter(or_(Item.status==status.ACTIVE, Item.status==status.PAUSED_BY_RISK)).filter(Tag_Listing.active==True)
136
    projection={'thumbnailImageUrl':1}
137
    for tag, item in tuples:
138
        if not catalogMap.has_key(item.catalog_item_id):
139
            catalogObj = {}
140
            catalogObj['title'] = " ".join(filter(None, [item.brand, item.model_name,  item.model_number]))
141
            catalogObj['identifier'] = item.catalog_item_id
142
            catalogObj['items'] = {}
143
            filterMap = {"_id":item.catalog_item_id}
144
            #Dont include it catalog not available
145
            try:
22313 amit.gupta 146
                catalogObj['imageUrl'] = get_mongo_connection(options.mongoHost).CONTENT.siteContent.find_one(filterMap, projection)['thumbnailImageUrl']
22307 amit.gupta 147
            except:
22312 amit.gupta 148
                traceback.print_exc()
22307 amit.gupta 149
                continue
150
            try: 
151
                catalogObj['rank'] = tagRankingList.index(item.catalog_item_id)
152
            except:
153
                #A very big number
154
                catalogObj['rank'] = 500000
155
 
156
            catalogObj['categoryId'] = 3 if item.category in [10006, 10009] else 6   
157
            catalogMap[item.catalog_item_id] = catalogObj
158
 
159
        catalogObj = catalogMap.get(item.catalog_item_id)
160
 
161
        if not  catalogObj['items'].has_key(item.id):
162
            catalogObj['items'][item.id] = {'color': item.color, 'tagPricing':[]}
163
 
164
        itemMap = catalogObj['items'].get(item.id)
165
        itemMap['tagPricing'].append(tag)
166
 
167
 
168
    catalogObjs = []
169
    for catalogId, catalogMap in catalogMap.iteritems():
170
        itemsMap = catalogMap['items']
171
        itemObjs = []
172
        for itemId, itemMap in itemsMap.iteritems():
173
            tags = itemMap['tagPricing']
174
            for tag in tags:
22315 amit.gupta 175
                itemObj = {'id':('itemtag-%s-%s'%(itemId, tag.tag_id)), 'color_s':itemMap['color'],  'itemId_i': itemId, 'tagId_i':tag.tag_id, 
176
                           'mop_f': tag.mop, 'sellingPrice_f': tag.selling_price}
22307 amit.gupta 177
            itemObjs.append(itemObj)
22315 amit.gupta 178
        catalogObj = {'id':'catalog' + str(catalogId), 'rank_i':catalogMap['rank'], 'title_s': catalogMap['title'], '_childDocuments_':itemObjs, 'catalogId_i':catalogId}
22307 amit.gupta 179
        catalogObjs.append(catalogObj)
180
 
22316 amit.gupta 181
    catalogObjs[0]['_childDocuments_'].append({'id':'dummy'})
22307 amit.gupta 182
    solr.delete(q='*:*')
183
    solr.add(catalogObjs)
184
 
185
 
186
 
187
 
188
 
189
    #items = Item.query.filter(Item.risky==True).filter(or_(Item.status==status.ACTIVE)).all()
190
#    global con
191
#    if con is None:
192
#        print "Establishing connection %s host and port %d" %(host,port)
193
#        try:
194
#            con = pymongo.MongoClient(host, port)
195
#        except Exception, e:
196
#            print e
197
#            return None
198
#    return con
199
 
200
def pushData():
201
    #rankPoints = populateRankPoints()
202
    populateTagItems()
203
    #orderedMap = orderIt
204
    #convertToSolrDoc() 
205
 
206
if __name__=='__main__':
207
    pushData()