Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
13828 kshitij.so 1
import pysolr
14186 kshitij.so 2
import pymongo
13828 kshitij.so 3
import json
14186 kshitij.so 4
import os
14243 kshitij.so 5
import optparse
14245 kshitij.so 6
import shutil
18252 kshitij.so 7
import traceback
13828 kshitij.so 8
 
9
con=None
10
 
14186 kshitij.so 11
filePath = '/tmp/autosuggest.json'
12
destFilePath = '/home/kshitij/'
13
 
17792 kshitij.so 14
categoryMap = {3:'Mobiles',5:'Tablets',6:'Accessories'}
17790 kshitij.so 15
SOURCE_MAP = {1:'AMAZON',2:'FLIPKART',3:'SNAPDEAL',4:'SAHOLIC',5:"SHOPCLUES.COM",6:"PAYTM.COM",7:"HOMESHOP18.COM"}
13828 kshitij.so 16
xstr = lambda s: s or ""
17
 
14243 kshitij.so 18
parser = optparse.OptionParser()
19
parser.add_option("-m", "--m", dest="mongoHost",
20
                      default="localhost",
21
                      type="string", help="The HOST where the mongo server is running",
22
                      metavar="HOST")
14248 kshitij.so 23
parser.add_option("-s", "--s", dest="server",
24
                      default="localhost",
25
                      type="string", help="The HOST where the mongo server is running",
26
                      metavar="HOST")
14243 kshitij.so 27
 
28
(options, args) = parser.parse_args()
29
 
15067 kshitij.so 30
synonymsMap = {}
31
modelNameSynonymMap = {}
14243 kshitij.so 32
 
15067 kshitij.so 33
 
13828 kshitij.so 34
class __SkuInfo:
35
 
13931 kshitij.so 36
    def __init__(self, id, skuBundleId, brand, model_name, source_product_name, category_id, category, available_price, mrp, in_stock, \
15067 kshitij.so 37
                 source_id, store, title, thumbnail, priceUpdatedOn, brand_synonyms, model_name_synonyms):
13828 kshitij.so 38
        self.id = id
39
        self.skuBundleId = skuBundleId
40
        self.brand = brand
41
        self.model_name = model_name
13931 kshitij.so 42
        self.source_product_name = source_product_name
13828 kshitij.so 43
        self.category_id = category_id
44
        self.category = category
45
        self.available_price = available_price
46
        self.mrp = mrp
47
        self.in_stock = in_stock
48
        self.source_id = source_id
49
        self.store = store
50
        self.title= title
51
        self.thumbnail = thumbnail
13985 kshitij.so 52
        self.priceUpdatedOn = priceUpdatedOn
15067 kshitij.so 53
        self.brand_synonyms = brand_synonyms
54
        self.model_name_synonyms = model_name_synonyms
13828 kshitij.so 55
 
56
 
57
solr = pysolr.Solr("http://104.200.25.40:8080/solr/", timeout=10)
58
 
59
def pushData():
15067 kshitij.so 60
    populateBrandSynonymMap()
15068 kshitij.so 61
    populateModelNameSynonyms()
13828 kshitij.so 62
    l = []
17790 kshitij.so 63
    exception = []
14186 kshitij.so 64
    catalogMap = {}
17791 kshitij.so 65
    items = get_mongo_connection(options.mongoHost).Catalog.MasterData.find({'source_id' : { "$in": SOURCE_MAP.keys() } })
13828 kshitij.so 66
    print items.count()
67
    for item in items:
17790 kshitij.so 68
        try:
69
            title = xstr(item['brand'])+" "+xstr(item['model_name'])
70
        except:
71
            exception.append(item['_id'])
72
            continue
14186 kshitij.so 73
        if not catalogMap.has_key(str(item['skuBundleId'])+" "+title):
14204 kshitij.so 74
            catalogMap[str(item['skuBundleId'])+" "+title] = [title]
18252 kshitij.so 75
        try:
76
            s_info = __SkuInfo(str(item['_id']),int(item['skuBundleId']),(item['brand']),(item['model_name']),(item['source_product_name']),int(item['category_id']),categoryMap.get(item['category_id']),float(item['available_price']),float(item['mrp']),item['in_stock'], \
15067 kshitij.so 77
                        int(item['source_id']),(item['source']),title,(item['thumbnail']), long(item['priceUpdatedOn']), synonymsMap.get(item['brand'].upper()), modelNameSynonymMap.get(item['skuBundleId']))
18252 kshitij.so 78
        except:
79
            traceback.print_exc()
80
            continue
13828 kshitij.so 81
        l.append(s_info.__dict__)
17996 kshitij.so 82
 
16297 kshitij.so 83
    solr.add(l,boost={'source_product_name': '2.0',})
14186 kshitij.so 84
 
17790 kshitij.so 85
 
86
    for x in exception:
87
        print x
88
 
14204 kshitij.so 89
    autoSuggestList = []
90
    for v in catalogMap.itervalues():
14214 kshitij.so 91
        autoSuggestList.append({'val':v[0]})
14186 kshitij.so 92
    PATH = os.path.expanduser(filePath)
93
    if os.path.isfile(PATH):
94
        try:
95
            os.remove(os.path.expanduser(filePath))
96
        except OSError:
97
            pass
98
    output = open(filePath, 'ab+')
14204 kshitij.so 99
    json.dump(autoSuggestList, output)
14186 kshitij.so 100
    output.close()
14248 kshitij.so 101
    if options.server !='localhost':
14244 kshitij.so 102
        try:
14248 kshitij.so 103
            os.system("scp "+filePath +" root@"+options.server+":"+destFilePath)
14244 kshitij.so 104
        except:
14245 kshitij.so 105
            shutil.copy2(filePath, destFilePath)
14186 kshitij.so 106
 
107
 
13828 kshitij.so 108
 
15067 kshitij.so 109
def populateBrandSynonymMap(): 
110
    global synonymsMap
111
    brand_synonyms = get_mongo_connection(options.mongoHost).Catalog.BrandSynonyms.find()
112
    for synonym in brand_synonyms:
113
        synonymsMap[synonym['brand'].upper()] = synonym['synonyms']
114
 
115
def populateModelNameSynonyms():
116
    global modelNameSynonymMap
117
    model_synonyms = get_mongo_connection(options.mongoHost).Catalog.ModelNameSynonyms.find()
118
    for synonym in model_synonyms:
119
        modelNameSynonymMap[synonym['skuBundleId']] = synonym['synonyms'] 
120
 
13828 kshitij.so 121
def get_mongo_connection(host='localhost', port=27017):
122
    global con
123
    if con is None:
124
        print "Establishing connection %s host and port %d" %(host,port)
125
        try:
126
            con = pymongo.MongoClient(host, port)
127
        except Exception, e:
128
            print e
129
            return None
130
    return con
14186 kshitij.so 131
 
13828 kshitij.so 132
if __name__=='__main__':
17790 kshitij.so 133
    pushData()