def test_get_url(self): name1 = "agents" name2 = "james_bond" root = InternalNode(name1, None) node = root.add_child(name2) self.assertEqual(root.get_url(), name1) self.assertEqual(node.get_url(), "%s/%s" % (name1, name2))
def test_get_url_param(self): name1 = "agents" varname = "id" name2 = "${%s}" % varname root = InternalNode(name1, None) node = root.add_child(name2) self.assertEqual(root.get_url(), name1) self.assertEqual(node.get_url(), "%s/%s" % (name1, name2))
def test_ctor(self): name = "james_bond" node = InternalNode(name, None) self.assertEqual(node.name, name) self.assertEqual(node.parent, None) self.assertEqual(node.children, {}) self.assertEqual(node.param_children, {}) self.assertEqual(node.methods, []) self.assertEqual(node.doc, None) self.assertEqual(node.varname, None) self.assertFalse(node.is_placeholder())
def test_ctor_param(self): varname = "id" name = "${%s}" % varname node = InternalNode(name, None) self.assertEqual(node.name, name) self.assertEqual(node.parent, None) self.assertEqual(node.children, {}) self.assertEqual(node.param_children, {}) self.assertEqual(node.methods, []) self.assertEqual(node.doc, None) self.assertEqual(node.varname, varname) self.assertTrue(node.is_placeholder())
def test_add_child(self): name1 = "agents" name2 = "james_bond" root = InternalNode(name1, None) self.assertEqual(root.children, {}) node = root.add_child(name2) self.assertIsInstance(node, InternalNode) self.assertEqual(node.parent, root) self.assertEqual(node.name, name2) self.assertEqual(root.children, {name2: node}) self.assertEqual(root.param_children, {}) self.assertFalse(node.is_placeholder()) #test idempotent node_dup = root.add_child(name2) self.assertEqual(node, node_dup)
def test_add_child_param(self): name1 = "agents" varname = "id" name2 = "${%s}" % varname root = InternalNode(name1, None) self.assertEqual(root.param_children, {}) node = root.add_child(name2) self.assertIsInstance(node, InternalNode) self.assertEqual(node.parent, root) self.assertEqual(node.name, name2) self.assertEqual(root.children, {}) self.assertEqual(root.param_children, {varname: node}) self.assertTrue(node.is_placeholder()) #test idempotent node_dup = root.add_child(name2) self.assertEqual(node, node_dup)
def test_set_doc(self): name = "james_bond" helpstring = "RTFM" helpstring_unicode = u"RTFM" node = InternalNode(name, None) self.assertEqual(node.doc, None) node.set_doc(helpstring) self.assertEqual(node.doc, helpstring) node.set_doc(helpstring_unicode) self.assertEqual(node.doc, helpstring_unicode) node.set_doc(None) self.assertEqual(node.doc, None) with self.assertRaisesRegexp( ValueError, "bad type for doc: got int, expected string"): node.set_doc(12) self.assertEqual(node.doc, None)
def test_add_method(self): name = "james_bond" node = InternalNode(name, None) self.assertEqual(node.methods, []) node.add_method("get") self.assertEqual(node.methods, [InternalMethod("GET")]) #test idempotent node.add_method("get") self.assertEqual(node.methods, [InternalMethod("GET")]) node.add_method("put") self.assertEqual(node.methods, [InternalMethod("GET"), InternalMethod("PUT")])
def parse(self): """ Parse the Swager file and return the InternalNode hierarchy from it """ schema = flex.load(self.file) paths = schema['paths'] root = InternalNode("", None) def request_validator(req): """ callback used to validate a request """ flex.core.validate_api_request(schema, req) def response_validator(reply, request_method='get', raw_request=None): """ callback used to validate a server response """ flex.core.validate_api_response(schema, reply, request_method=request_method, raw_request=raw_request) for path in paths: url_parts = path.split("/") # get the final node #TODO: resolve '$ref' in path parent = root for part in url_parts: if not part: continue #if part == '$ref': # raise UnimplementedError("Swagger Parser does not support $ref") #Internal Node identify variable with '${.*}', Swagger with '/{.*}' part = SWAGGER_VARNAME_RE.sub("${\\1}", part) child = parent.add_child(part) parent = child resource = paths[path] for verb in resource: parent.add_method(verb, request_validator=request_validator, response_validator=response_validator) return root
def parse(self): """ Parse the resources list and return the InternalNode hierarchy from it """ root = InternalNode("", None) for res in self.resources: url = res["url"] parts = url.split("/") parent = root for part in parts: if not part: continue child = parent.add_child(part) parent = child if "method" in res: parent.add_method(res["method"]) if "doc" in res: parent.set_doc(res["doc"]) return root
def parse(self): """ Parse the RAML file and return the InternalNode hierarchy from it """ description = prp.load(self.file) root = InternalNode("", None) if '/' in description.resources: res = description.resources['/'] del description.resources['/'] if res is not None: #FIXME: this duplicate code from _parse_resource if res.methods is not None: for method in res.methods: root.add_method(method) root.set_doc(res.description) if description.resources is not None: for name in description.resources: res = description.resources[name] self._parse_resource(root, name, res) return root