analysis/webservice/nexus_tornado/app_builders/NexusAppBuilder.py (58 lines of code) (raw):
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import logging
import importlib
from functools import partial
import pkg_resources
import tornado
from nexustiles.nexustiles import NexusTileService
from webservice import NexusHandler
from webservice.nexus_tornado.request.handlers import NexusRequestHandler
from .HandlerArgsBuilder import HandlerArgsBuilder
class NexusAppBuilder:
def __init__(self):
self.handlers = []
self.log = logging.getLogger(__name__)
class VersionHandler(tornado.web.RequestHandler):
def get(self):
self.write(pkg_resources.get_distribution("sdap-nexus").version)
self.handlers.append((r"/version", VersionHandler))
self.handlers.append(
(r'/apidocs', tornado.web.RedirectHandler, {"url": "/apidocs/"}))
apidocs_path = pkg_resources.resource_filename('webservice.apidocs', '')
self.handlers.append(
(
r'/apidocs/(.*)', tornado.web.StaticFileHandler,
{'path': str(apidocs_path), "default_filename": "index.html"}))
def set_modules(self, module_dir, algorithm_config, remote_collections=None, max_request_threads=4):
for moduleDir in module_dir:
self.log.info("Loading modules from %s" % moduleDir)
importlib.import_module(moduleDir)
self.log.info("Running Nexus Initializers")
NexusHandler.executeInitializers(algorithm_config)
self.log.info("Initializing request ThreadPool to %s" % max_request_threads)
tile_service_factory = partial(NexusTileService, algorithm_config)
handler_args_builder = HandlerArgsBuilder(
max_request_threads,
tile_service_factory,
algorithm_config,
remote_collections=remote_collections
)
for clazzWrapper in NexusHandler.AVAILABLE_HANDLERS:
self.handlers.append(
(
clazzWrapper.path,
NexusRequestHandler,
handler_args_builder.get_args(clazzWrapper)
)
)
return self
def enable_static(self, static_dir):
self.log.info("Using static root path '%s'" % static_dir)
self.handlers.append(
(r'/(.*)', tornado.web.StaticFileHandler, {'path': static_dir, "default_filename": "index.html"}))
return self
def build(self, host=None, debug=False):
return tornado.web.Application(
self.handlers,
default_host=host,
debug=debug
)