server.py (82 lines of code) (raw):

import tornado.httpserver import tornado.ioloop import tornado.web import logging import logging.config import os import configparser import socket import pluginhandler class GenericHandler(tornado.web.RequestHandler): def initialize(self, pluginName, format=None): super(GenericHandler, self).initialize() self._pluginHandler = pluginhandler.PluginHandler(pluginName, 'plugins', format) @tornado.web.asynchronous def get(self): self._handleRequest('get') @tornado.web.asynchronous def post(self): self._handleRequest('post') @tornado.web.asynchronous def options(self): self._handleRequest('options') def _handleRequest(self, httpMethod): try: #logging.debug("_handleRequest") self._pluginHandler.handleRequest(httpMethod, self.request.path, self) except BaseException as exception: logging.exception('something is wrong with this plugin: '+str(exception)) self.set_status(404) self.write('something is wrong with this plugin: '+str(exception)) self.finish() class TemplateRenderHandler(tornado.web.RequestHandler): def get(self): self.set_header("Content-Type", "application/xml") try: fileName = self.request.path.split('/').pop() self.render(fileName) except BaseException as exception: self.set_header("Content-Type", "text/html") self.set_status(404) self.write('File not found '+fileName) if __name__ == "__main__": #logging.basicConfig(filename="log.txt",level=logging.DEBUG) logging.config.fileConfig(r'./logging.conf') configuration = configparser.RawConfigParser() configuration.read(r'./config.conf') settings = dict(static_path=os.path.join(os.path.dirname(__file__), "static"), static_url_prefix="/static/", template_path=os.path.join(os.path.dirname(__file__), "templates")) application = tornado.web.Application([ #(r"/dataset/.*", DatasetHandler), (r"/heartbeat", GenericHandler, dict(pluginName='heartbeat', format=['json'])), (r"/ws/search/samos", GenericHandler, dict(pluginName='samos', format=['json'])), (r"/ws/search/icoads", GenericHandler, dict(pluginName='icoads', format=['json'])), (r"/ws/search/spurs", GenericHandler, dict(pluginName='spurs', format=['json'])), (r"/ws/search/spurs2", GenericHandler, dict(pluginName='spurs2', format=['json'])), (r"/nexus/climatology", GenericHandler, dict(pluginName='nexus', format=['climatology'])), (r"/nexus/solr", GenericHandler, dict(pluginName='nexus', format=['solr'])), (r"/nexus/subsetter", GenericHandler, dict(pluginName='nexus', format=['subsetter'])), (r"/ws/search/dataset", GenericHandler, dict(pluginName='slcp', format=['atom'])), (r"/ws/search/granule", GenericHandler, dict(pluginName='slcp', format=['granule'])), (r"/ws/facet/dataset", GenericHandler, dict(pluginName='slcp', format=['facet'])), (r"/ws/suggest/dataset", GenericHandler, dict(pluginName='slcp', format=['suggest'])), (r"/ws/metadata/dataset", GenericHandler, dict(pluginName='slcp', format=['echo10', 'umm-json'])), (r"/ws/indicator/dataset", GenericHandler, dict(pluginName='slcp', format=['indicator'])), (r"/ws/dat/dataset", GenericHandler, dict(pluginName='slcp', format=['dat'])), (r"/ws/search/content", GenericHandler, dict(pluginName='slcp', format=['content'])), (r"/ws/search/basin", GenericHandler, dict(pluginName='slcp', format=['basin'])), (r"/ws/search/anomaly", GenericHandler, dict(pluginName='oceanxtremes', format=['datacasting'])), (r"/ws/submit/anomaly", GenericHandler, dict(pluginName='oceanxtremes', format=['post'])), (r"/ws/search/attribute", GenericHandler, dict(pluginName='oiip', format=['json', 'xml'])), (r"/tie/collection", GenericHandler, dict(pluginName='tie', format=['collection'])), (r"/example/es", GenericHandler, dict(pluginName='example', format=['elastic'])), #(r"/ws/metadata/dataset", DatasetHandler, dict(format=['iso', 'gcmd'])), #(r"/granule/.*", GranuleHandler), #(r"/ws/search/granule", GenericHandler, dict(pluginName='product', format=['atom'])), #(r"/ws/metadata/granule", GranuleHandler, dict(format=['iso', 'fgdc', 'datacasting'])), (r"/passthrough/.*", GenericHandler, dict(pluginName='passthrough')), (r"/ws/search/.*", TemplateRenderHandler) ], default_host=configuration.get('server', 'host'), **settings) http_server = tornado.httpserver.HTTPServer(application) http_server.listen( configuration.getint('server', 'port') ) ioLoop = tornado.ioloop.IOLoop.instance() try: logging.info('tornado is started.') ioLoop.start() except KeyboardInterrupt: logging.info('tornado is shutting down.') ioLoop.stop()