Example #1
0
    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))
Example #2
0
    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))
Example #3
0
    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())
Example #4
0
    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())
Example #5
0
    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)
Example #6
0
    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)
Example #7
0
    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)
Example #8
0
    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")])
Example #9
0
    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
Example #10
0
    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
Example #11
0
    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