plugins/slcp/content/Writer.py (62 lines of code) (raw):

import logging import os import os.path import urllib.request, urllib.parse, urllib.error from edge.writer.solrtemplateresponsewriter import SolrTemplateResponseWriter from edge.response.solrjsontemplateresponse import SolrJsonTemplateResponse class Writer(SolrTemplateResponseWriter): def __init__(self, configFilePath): super(Writer, self).__init__(configFilePath) self.contentType = 'application/json' templatePath = os.path.dirname(configFilePath) + os.sep templatePath += self._configuration.get('service', 'template') self.template = self._readTemplate(templatePath) def _generateOpenSearchResponse(self, solrResponse, searchText, searchUrl, searchParams, pretty): response = SolrJsonTemplateResponse() response.setTemplate(self.template) return response.generate(solrResponse, pretty=pretty) def _constructSolrQuery(self, startIndex, entriesPerPage, parameters, facets): queries = [] filterQueries = [] filterQueries.append('status:1') sort = None for key, value in parameters.items(): if value != "": if key == 'keyword': #Special case keyword search on glossary_items only match title if 'table' in parameters and parameters['table'] == 'glossary_items': queries.append('title_t:('+urllib.parse.quote(value) + ')') else: queries.append(urllib.parse.quote(value)) elif key == 'year': start = value + "-01-01T00:00:00.000Z" end = value + "-12-31T23:59:59.999Z" filterQueries.append('created_at:['+start+'%20TO%20'+end+']') elif key == 'table': filterQueries.append('type:' + value) elif key == 'glossary_title': range = value.lower().split('-') filterQueries.append('{!frange%20l=' + range[0] + '%20u=' + range[1] + 'z}' + 'title_lc') elif key == 'sort': sort = urllib.parse.quote(value) elif key == 'topic_id': filterQueries.append('categories_id:' + value) elif key == 'mission_id': filterQueries.append('mission_ids_array:' + value) else: if type(value) is list: if 'table' in parameters and parameters['table'] == 'news_items': filterQueries.append(key + ':(' + '+OR+'.join([self._urlEncodeSolrQueryValue(v) for v in value]) + ')') else: for v in value: filterQueries.append(key + ':' + self._urlEncodeSolrQueryValue(v)) else: filterQueries.append(key + ':' + self._urlEncodeSolrQueryValue(value)) if len(queries) == 0: queries.append('*:*') query = 'q='+'+AND+'.join(queries)+'&version=2.2&indent=on&wt=json&start='+str(startIndex)+'&rows='+str(entriesPerPage) if len(filterQueries) > 0: query += '&fq='+'+AND+'.join(filterQueries) if sort is not None: query += '&sort=' + sort logging.debug('solr query: '+query) return query