analysis/webservice/redirect/RedirectHandler.py (25 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 tornado.web import tornado.gen import logging from webservice.webmodel.RequestParameters import RequestParameters logger = logging.getLogger(__name__) class RedirectHandler(tornado.web.RequestHandler): def initialize(self, redirected_collections=None): self._redirected_collections = redirected_collections @tornado.gen.coroutine def get(self, algo): collection_id = self.request.query_arguments[RequestParameters.DATASET][0].decode('utf-8') collection = self._redirected_collections[collection_id] full_url = self.request.full_url() #redirect to new URL base_url = full_url[:full_url.find(algo)].rstrip('/') new_base_url = collection['path'].rstrip('/') new_full_url = full_url.replace(base_url, new_base_url) # use remote collection id if 'remote_id' in collection: dataset_param = f"ds={collection_id}" new_dataset_param = f"ds={collection['remote_id']}" new_full_url = new_full_url.replace(dataset_param, new_dataset_param) logger.info("redirect request to ", new_full_url) self.redirect( new_full_url, permanent=True )