Subversion Repositories SmartDukaan

Rev

Rev 20322 | 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
20285 kshitij.so 8
from dtr.utils.utils import CATEGORY_MAP, SUB_CATEGORY_MAP
13828 kshitij.so 9
 
10
con=None
11
 
17790 kshitij.so 12
SOURCE_MAP = {1:'AMAZON',2:'FLIPKART',3:'SNAPDEAL',4:'SAHOLIC',5:"SHOPCLUES.COM",6:"PAYTM.COM",7:"HOMESHOP18.COM"}
13828 kshitij.so 13
xstr = lambda s: s or ""
14
 
14243 kshitij.so 15
parser = optparse.OptionParser()
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="HOST")
20285 kshitij.so 20
parser.add_option("-s", "--s", dest="solrPath",
20322 kshitij.so 21
                      default="http://localhost:8983/solr/",
20285 kshitij.so 22
                      type="string", help="Complete solr path",
14248 kshitij.so 23
                      metavar="HOST")
14243 kshitij.so 24
 
25
(options, args) = parser.parse_args()
26
 
15067 kshitij.so 27
synonymsMap = {}
28
modelNameSynonymMap = {}
14243 kshitij.so 29
 
15067 kshitij.so 30
 
13828 kshitij.so 31
class __SkuInfo:
32
 
20285 kshitij.so 33
    def __init__(self, id, ids, brand, model_name, category_id, subCategoryId,thumbnail, title, brand_synonyms, model_name_synonyms, source_product_names, \
34
                 category, subCategory):
13828 kshitij.so 35
        self.id = id
20285 kshitij.so 36
        self.ids = ids
13828 kshitij.so 37
        self.brand = brand
38
        self.model_name = model_name
39
        self.category_id = category_id
20285 kshitij.so 40
        self.subCategoryId = subCategoryId
41
        self.thumbnail = thumbnail 
13828 kshitij.so 42
        self.title= title
15067 kshitij.so 43
        self.brand_synonyms = brand_synonyms
44
        self.model_name_synonyms = model_name_synonyms
20285 kshitij.so 45
        self.source_product_names = source_product_names
46
        self.category = category
47
        self.subCategory = subCategory 
13828 kshitij.so 48
 
49
 
20285 kshitij.so 50
solr = pysolr.Solr(options.solrPath, timeout=10)
13828 kshitij.so 51
 
52
def pushData():
15067 kshitij.so 53
    populateBrandSynonymMap()
15068 kshitij.so 54
    populateModelNameSynonyms()
17790 kshitij.so 55
    exception = []
14186 kshitij.so 56
    catalogMap = {}
20663 kshitij.so 57
    items = get_mongo_connection(options.mongoHost).Catalog.MasterData.find({'source_id' : { "$in": SOURCE_MAP.keys() },'category_id':{"$in":[3,5]} })
13828 kshitij.so 58
    print items.count()
59
    for item in items:
17790 kshitij.so 60
        try:
61
            title = xstr(item['brand'])+" "+xstr(item['model_name'])
62
        except:
63
            exception.append(item['_id'])
64
            continue
17996 kshitij.so 65
 
20285 kshitij.so 66
        if catalogMap.has_key(int(item['skuBundleId'])):
67
            skuInfo = catalogMap.get(int(item['skuBundleId']))
68
            skuInfo.source_product_names.append(item['source_product_name'].strip())
69
            skuInfo.ids.append(int(item['_id']))
70
        else:
71
            syn_brand = synonymsMap.get((item['brand']).upper())
72
            model_syn = modelNameSynonymMap.get(item['skuBundleId'])
20286 kshitij.so 73
            try:
20287 kshitij.so 74
                if len(str(item['thumbnail']).strip()) == 0:
75
                    item['thumbnail'] = "http://api.profittill.com/img/no_image_available.png"
76
            except:
77
                print "Exception in item thumbnail",item['_id']
20288 kshitij.so 78
                continue
20287 kshitij.so 79
            try:
20286 kshitij.so 80
                skuInfo = __SkuInfo(str(item['skuBundleId']), [int(item['_id'])], str(item['brand']).strip(), str(item['model_name']).strip(), \
20285 kshitij.so 81
                                int(item['category_id']), int(item['subCategoryId']), item['thumbnail'].strip(), title, syn_brand, model_syn, [item['source_product_name'].strip()], \
82
                                CATEGORY_MAP.get(int(item['category_id'])), SUB_CATEGORY_MAP.get(int(item['subCategoryId'])))
20286 kshitij.so 83
            except:
84
                print "Exception in item ",item['_id']
20288 kshitij.so 85
                continue
20285 kshitij.so 86
            catalogMap[int(item['skuBundleId'])] = skuInfo
20322 kshitij.so 87
    l=[]        
20285 kshitij.so 88
    for data in catalogMap.values():
89
        l.append(data.__dict__)
20322 kshitij.so 90
    solr.add(l)
91
 
17790 kshitij.so 92
    for x in exception:
93
        print x
13828 kshitij.so 94
 
15067 kshitij.so 95
def populateBrandSynonymMap(): 
96
    global synonymsMap
97
    brand_synonyms = get_mongo_connection(options.mongoHost).Catalog.BrandSynonyms.find()
98
    for synonym in brand_synonyms:
99
        synonymsMap[synonym['brand'].upper()] = synonym['synonyms']
100
 
101
def populateModelNameSynonyms():
102
    global modelNameSynonymMap
103
    model_synonyms = get_mongo_connection(options.mongoHost).Catalog.ModelNameSynonyms.find()
104
    for synonym in model_synonyms:
105
        modelNameSynonymMap[synonym['skuBundleId']] = synonym['synonyms'] 
106
 
13828 kshitij.so 107
def get_mongo_connection(host='localhost', port=27017):
108
    global con
109
    if con is None:
110
        print "Establishing connection %s host and port %d" %(host,port)
111
        try:
112
            con = pymongo.MongoClient(host, port)
113
        except Exception, e:
114
            print e
115
            return None
116
    return con
14186 kshitij.so 117
 
13828 kshitij.so 118
if __name__=='__main__':
17790 kshitij.so 119
    pushData()