def compile_resource(resource): """ Return compiled regex for resource matching """ return re.compile( "^" + trim_resource(re.sub(r":(\w+)", r"(?P<\1>[\w-]+?)", resource)) + r"(\?(?P<querystring>.*))?$")
def __init__(self, resource): # syntax: /network/cellular/:id self.resource = trim_resource(resource) self.resource_regex = compile_resource(resource) self.handlers = [] for method in ["get", "post", "put", "delete", "all"]: self.__setattr__(method, self.create_handler_func(method))
def test_trim_resource(self): uris = [ dict(uri="/api/v1/test", trimUri="api/v1/test"), dict(uri="/api/v1/test/", trimUri="api/v1/test"), dict(uri="////api/v1/test////", trimUri="api/v1/test"), dict(uri="////api/v1/test", trimUri="api/v1/test"), dict(uri="api/v1/test/", trimUri="api/v1/test"), dict(uri="api/v1/test//////", trimUri="api/v1/test"), dict(uri="test", trimUri="test"), dict(uri="//test/", trimUri="test"), dict(uri="/test", trimUri="test") ] for testcase in uris: self.assertEqual(trim_resource(testcase["uri"]), testcase["trimUri"])
def compile_resource(resource): """ Return compiled regex for resource matching """ return re.compile("^" + trim_resource(re.sub(r":(\w+)", r"(?P<\1>[\w-]+?)", resource)) + r"(\?(?P<querystring>.*))?$")