Project

General

Profile

1
import urllib2
2

    
3
import pysolr
4
from flask import json
5

    
6
from DLI_ObjectResolver 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", "Content Provider": 'provenance', "Typology": 'entitytype'}
15

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

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

    
31
        return data
32

    
33
    def get_item(self, persistent_identifier):
34
        query = 'objidentifier:"%s"' % persistent_identifier
35
        response = self.solr_server.search(q=query)
36
        query_response = []
37
        for hit in response:
38
            query_response.append(DLIObject(hit['dnetresourceidentifier'], self.base_url_dnet))
39

    
40
        return {'objects': query_response}
41

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

    
51
    def get_stats(self):
52

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

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

    
70
        if filter_query is not None:
71
            params['fq'] = filter_query
72
        if start is not None:
73
            params['start'] = start
74
        response = self.solr_server.search(q, rows=page_size, **params)
75
        query_response = []
76
        for hit in response:
77
            dnet_id = hit['dnetresourceidentifier']
78

    
79
            query_response.append(DLIObject(hit['dnetresourceidentifier'], self.base_url_dnet))
80
        if not only_result:
81
            facet = self.get_facet(response.facets['facet_fields'], q)
82
        else:
83
            facet = self.get_facet(response.facets['facet_fields'])
84
        return {'objects': query_response, 'facet': facet, 'total': response.hits}
85

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

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