Returns a WSGI compatible API server for the given Hug API module

def server(self, default_not_found=True, base_url=None):
        """Returns a WSGI compatible API server for the given Hug API module"""
        falcon_api = falcon.API(middleware=self.middleware)
        default_not_found = self.documentation_404() if default_not_found is True else None
        base_url = self.base_url if base_url is None else base_url

        not_found_handler = default_not_found
        self.api._ensure_started()
        if self.not_found_handlers:
            if len(self.not_found_handlers) == 1 and None in self.not_found_handlers:
                not_found_handler = self.not_found_handlers[None]
            else:
                not_found_handler = partial(self.version_router, api_version=False,
                                            versions=self.not_found_handlers, not_found=default_not_found)
                not_found_handler.interface = True

        if not_found_handler:
            falcon_api.add_sink(not_found_handler)
            self._not_found = not_found_handler

        for sink_base_url, sinks in self.sinks.items():
            for url, extra_sink in sinks.items():
                falcon_api.add_sink(extra_sink, sink_base_url + url + '(?P<path>.*)')

        for router_base_url, routes in self.routes.items():
            for url, methods in routes.items():
                router = {}
                for method, versions in methods.items():
                    method_function = "on_{0}".format(method.lower())
                    if len(versions) == 1 and None in versions.keys():
                        router[method_function] = versions[None]
                    else:
                        router[method_function] = partial(self.version_router, versions=versions,
                                                          not_found=not_found_handler)

                router = namedtuple('Router', router.keys())(**router)
                falcon_api.add_route(router_base_url + url, router)
                if self.versions and self.versions != (None, ):
                    falcon_api.add_route(router_base_url + '/v{api_version}' + url, router)

        def error_serializer(request, response, error):
            response.content_type = self.output_format.content_type
            response.body = self.output_format({"errors": {error.title: error.description}},
                                               request, response)

        falcon_api.set_error_serializer(error_serializer)
        return falcon_api