def create_backend_app(service): from werkzeug.routing import Map current_file = os.path.abspath(__file__) current_dir = os.path.abspath(os.path.join(current_file, os.pardir)) template_dir = os.path.join(current_dir, "templates") # Create the backend_app backend_app = Flask("moto", template_folder=template_dir) backend_app.debug = True backend_app.service = service CORS(backend_app) # Reset view functions to reset the app backend_app.view_functions = {} backend_app.url_map = Map() backend_app.url_map.converters["regex"] = RegexConverter backend_dict = backends.get_backend(service) if "us-east-1" in backend_dict: backend = backend_dict["us-east-1"] else: backend = backend_dict["global"] for url_path, handler in backend.flask_paths.items(): view_func = convert_to_flask_response(handler) if handler.__name__ == "dispatch": endpoint = "{0}.dispatch".format(handler.__self__.__name__) else: endpoint = view_func.__name__ original_endpoint = endpoint index = 2 while endpoint in backend_app.view_functions: # HACK: Sometimes we map the same view to multiple url_paths. Flask # requires us to have different names. endpoint = original_endpoint + str(index) index += 1 # Some services do not provide a URL path # I.e., boto3 sends a request to 'https://ingest.timestream.amazonaws.com' # Which means we have a empty url_path to catch this request - but Flask can't handle that if url_path: backend_app.add_url_rule( url_path, endpoint=endpoint, methods=HTTP_METHODS, view_func=view_func, strict_slashes=False, ) backend_app.test_client_class = AWSTestHelper return backend_app
def create_backend_app(service): from werkzeug.routing import Map # Create the backend_app backend_app = Flask(__name__) backend_app.debug = True backend_app.service = service CORS(backend_app) # Reset view functions to reset the app backend_app.view_functions = {} backend_app.url_map = Map() backend_app.url_map.converters["regex"] = RegexConverter backend = list(backends.get_backend(service).values())[0] for url_path, handler in backend.flask_paths.items(): view_func = convert_flask_to_httpretty_response(handler) if handler.__name__ == "dispatch": endpoint = "{0}.dispatch".format(handler.__self__.__name__) else: endpoint = view_func.__name__ original_endpoint = endpoint index = 2 while endpoint in backend_app.view_functions: # HACK: Sometimes we map the same view to multiple url_paths. Flask # requires us to have different names. endpoint = original_endpoint + str(index) index += 1 backend_app.add_url_rule( url_path, endpoint=endpoint, methods=HTTP_METHODS, view_func=view_func, strict_slashes=False, ) backend_app.test_client_class = AWSTestHelper return backend_app