Skip to content

Instantly share code, notes, and snippets.

@kler
Created April 17, 2017 14:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kler/56710fdea361afa79cc2314bd6eb0e7e to your computer and use it in GitHub Desktop.
Save kler/56710fdea361afa79cc2314bd6eb0e7e to your computer and use it in GitHub Desktop.
Proposal for restyResolver to handle nested paths
import logging
import re
from connexion.resolver import RestyResolver
logger = logging.getLogger('connexion.resolver')
class NestedRestyResolver(RestyResolver):
"""Overrider RestyResolver to support complex paths (/a/b/c/ => a.b.c)"""
def resolve_operation_id_using_rest_semantics(self, operation):
"""
Resolves the operationId using REST semantics
:type operation: connexion.operation.Operation
"""
logger.debug(operation.path)
path_match = re.search(
'^(?P<extended_path>[^{]*).*$', operation.path
)
def get_controller_name():
x_router_controller = operation.operation.get('x-swagger-router-controller')
name = self.default_module_name
resource_name = path_match.group('extended_path').strip('/').replace('/', '.')
if x_router_controller:
name = x_router_controller
elif resource_name:
resource_controller_name = resource_name.replace('-', '_')
name += '.' + resource_controller_name
return name
def get_function_name():
method = operation.method
is_collection_endpoint = \
method.lower() == 'get' \
and not path_match.group('extended_path')
return self.collection_endpoint_name if is_collection_endpoint else method.lower()
return '{}.{}'.format(get_controller_name(), get_function_name())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment