Project

General

Profile

1
import urllib2
2

    
3
from flask import json
4
import pysolr
5

    
6
from DLIObject import DLIObject
7

    
8

    
9
class QueryResolver(object):
10
    def __init__(self, solr_url, base_url_dnet):
11
        self.solr_url = solr_url
12
        self.solr_server = pysolr.Solr(self.solr_url)
13
        self.base_url_dnet = base_url_dnet
14
        self.facet_renaming = {'entitytype': "Typology", 'provenance': "Content Provider",
15
                               "Content Provider": 'provenance', "Typology": 'entitytype'}
16

    
17
    def get_facet(self, facet, query=None):
18
        data = []
19

    
20
        f = 'entitytype'
21
        if query is not None:
22
            data.append({'facet': self.facet_renaming[f], 'query_name': f, 'values': [
23
                {'key': facet[f][i], 'value': facet[f][i + 1]} for i in range(0, len(facet[f]), 2)]})
24
        else:
25
            data.append({'facet': self.facet_renaming[f], 'query_name': f,
26
                         'values': [{'key': facet[f][i], 'value': facet[f][i + 1]} for i in
27
                                    range(0, len(facet[f]), 2)]})
28
        f = 'provenance'
29
        data.append({'facet': self.facet_renaming[f], 'query_name': f,
30
                     'values': [{'key': facet[f][i], 'value': facet[f][i + 1]} for i in range(0, len(facet[f]), 2)]})
31

    
32
        return data
33

    
34
    def get_item(self, persistent_identifier):
35
        query = 'objidentifier:"%s"' % persistent_identifier
36
        response = self.solr_server.search(q=query)
37
        query_response = []
38
        for hit in response:
39
            result = hit['__result'][0]
40
            query_response.append(DLIObject(result.encode('utf8')))
41

    
42
        return {'objects': query_response}
43

    
44
    def get_stats_detail(self):
45
        data = urllib2.urlopen(self.base_url_dnet + "/mvc/ui/stats/getLastStats")
46
        result = []
47
        d = json.loads(data.read())
48
        for k in d:
49
            if 'Deduction' not in k['datasource']:
50
                result.append(k)
51
        return result
52

    
53
    def get_stats(self):
54

    
55
        data = urllib2.urlopen(self.base_url_dnet + "/mvc/ui/stats/getAllStats")
56
        result = {}
57
        d = json.loads(data.read())
58
        for item in d:
59
            result[item] = []
60
            for k in d[item]:
61
                if 'Deduction' not in k['datasource']:
62
                    result[item].append(k)
63
        return result
64

    
65
    def query(self, q, browse_fields, start=None, page_size=10, only_result=False, filter_query=None):
66
        params = {}
67
        if browse_fields is not None:
68
            params['facet'] = 'true',
69
            params['facet.field'] = browse_fields
70
            params['facet.mincount'] = 1
71

    
72
        if filter_query is not None:
73
            params['fq'] = filter_query
74
        if start is not None:
75
            params['start'] = start
76
        response = self.solr_server.search(q, rows=page_size, **params)
77
        query_response = []
78
        for hit in response:
79
            result = hit['__result'][0]
80
            query_response.append(DLIObject(result.encode('utf8')))
81
        if not only_result:
82
            facet = self.get_facet(response.facets['facet_fields'], q)
83
        else:
84
            facet = self.get_facet(response.facets['facet_fields'])
85
        return {'objects': query_response, 'facet': facet, 'total': response.hits}
86

    
87
    def get_ds_info(self, id, name):
88
        param =""
89
        value = ""
90
        if (len(id)>0):
91
            param="id"
92
            value=id
93
        if len(name)>0:
94
            param="name"
95
            value= name.replace(" ",'%20')
96
        url_query= self.base_url_dnet + "/mvc/ui/dli/datasource/info.do?%s=%s" % (param,value)
97
        data = urllib2.urlopen(url_query)
98
        d = json.loads(data.read())
99
        return d
100

    
101
    def get_all_ds(self):
102
        data = urllib2.urlopen(self.base_url_dnet + "/mvc/ui/dli/datasource/datasources.do")
103
        d = json.loads(data.read())
104
        return d
(3-3/7)