| import logging |
| import urllib.request, urllib.parse, urllib.error |
| import json |
| |
| from edge.writer.proxywriter import ProxyWriter |
| |
| class Writer(ProxyWriter): |
| def __init__(self, configFilePath): |
| super(Writer, self).__init__(configFilePath) |
| |
| def _generateUrl(self, requestHandler): |
| url = self._configuration.get('solr', 'url') |
| parameters = {} |
| parameters['wt'] = 'json' |
| parameters['omitHeader'] = 'true' |
| parameters['q'] = '*:*' |
| try: |
| parameters['fq'] = 'id:"' + requestHandler.get_argument('id') + '"' |
| except: |
| parameters['fl'] = 'id,name,rate,uncertainties,unit,shortenUnit,abbrUnit,updated_at' |
| try: |
| if requestHandler.get_argument('latest').lower() == 'true': |
| parameters['fl'] = 'xLatest,yLatest,unit,abbrUnit,updated_at' |
| except: |
| pass |
| url += '/select?' + urllib.parse.urlencode(parameters) |
| logging.debug("proxy to url : " + url) |
| return url |
| |
| def onResponse(self, response): |
| if response.error: |
| self.requestHandler.set_status(404) |
| self.requestHandler.write(str(response.error)) |
| self.requestHandler.finish() |
| else: |
| for name, value in response.headers.items(): |
| logging.debug('header: '+name+':'+value) |
| self.requestHandler.set_header(name, value) |
| self.requestHandler.set_header('Access-Control-Allow-Origin', '*') |
| |
| solrJson = json.loads(response.body) |
| if len(solrJson['response']['docs']) > 1: |
| # Need to order indicators accordingly |
| solrJsonClone = {} |
| solrJsonClone['response'] = {} |
| solrJsonClone['response']['start'] = solrJson['response']['start'] |
| solrJsonClone['response']['numFound'] = solrJson['response']['numFound'] |
| solrJsonClone['response']['docs'] = [] |
| |
| indicators = {} |
| for doc in solrJson['response']['docs']: |
| indicators[doc['id']] = doc |
| for indicator in self._configuration.get('solr', 'ordering').split(','): |
| if indicator in indicators: |
| solrJsonClone['response']['docs'].append(indicators[indicator]) |
| solrJson = solrJsonClone |
| for doc in solrJson['response']['docs']: |
| if 'uncertainties' in doc: |
| if doc['id'] in self._configuration.get('solr', 'uncertainties').split(','): |
| doc['uncertainties'] = int(round(doc['uncertainties'])) |
| doc['rate'] = int(round(doc['rate'])) |
| |
| self.requestHandler.write(solrJson) |
| self.requestHandler.finish() |