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