Exemple #1
0
def create_yaal_context(req, path_values, descriptor):
    if req.mimetype == "application/json":
        try:
            payload = req.get_json()
        except Exception:
            payload = None
    else:
        payload = None

    if req.mimetype == "multipart/form-data" or req.mimetype == "application/x-www-form-urlencoded":
        ke = KeyExpander()
        for k, v in req.form.items():
            ke.set_prop(k, v)
        payload = ke.get_data()

    ke = KeyExpander()
    for k, v in req.args.items():
        ke.set_prop(k, v)
    query = ke.get_data()

    ke = KeyExpander()
    for k, v in req.headers.items():
        ke.set_prop(k, v)
    headers = ke.get_data()

    ke = KeyExpander()
    for k, v in req.cookies.items():
        ke.set_prop(k, v)
    cookies = ke.get_data()

    return create_context(descriptor, payload, query, path_values, headers,
                          cookies)
    def test_create_context_with_values(self):
        descriptor = {
            "path": ""
        }
        data = {
            "number1": 1,
            "Number2": 2
        }
        context = yaal.create_context(descriptor=descriptor, query=data, path_values=data, header=data, cookie=data,
                                      payload=data)

        self.assertEqual(1, context.get_prop("$query.number1"))
        self.assertEqual(2, context.get_prop("$query.number2"))
        self.assertDictEqual(data, context.get_prop("$query").get_data())

        self.assertEqual(1, context.get_prop("$path.number1"))
        self.assertEqual(2, context.get_prop("$path.number2"))
        self.assertDictEqual(data, context.get_prop("$path").get_data())

        self.assertEqual(1, context.get_prop("$header.number1"))
        self.assertEqual(2, context.get_prop("$header.number2"))
        self.assertDictEqual(data, context.get_prop("$header").get_data())

        self.assertEqual(1, context.get_prop("$cookie.number1"))
        self.assertEqual(2, context.get_prop("$cookie.number2"))
        self.assertDictEqual(data, context.get_prop("$cookie").get_data())

        self.assertDictEqual(data, context.get_data())

        self.assertEqual(Shape, type(context))
    def test_trunk_with_error(self):
        descriptor = {
            "path": "user",
            "twigs": [{
                "content": "error"
            }],
            "input_type": "object",
            "output_type": "array",
            "_validators": None
        }

        ctx = create_context(descriptor)

        rs, errors = _execute_twigs(descriptor, {"db": FakeDataProvider()},
                                    ctx, None)

        self.assertListEqual(errors, [{
            "$action": "error",
            "message": "message1",
            '$http_status_code': 400
        }, {
            "$action": "error",
            "message": "message2",
            '$http_status_code': 400
        }])
        self.assertEqual(ctx.get_prop("$response.status_code"), 400)
    def test_trunk_with_cookie(self):
        descriptor = {
            "twigs": [{
                "content": "cookie"
            }],
            "path": "user",
            "input_type": "object",
            "output_type": "array",
            "_validators": None
        }

        ctx = create_context(descriptor)

        _execute_twigs(descriptor, {"db": FakeDataProvider()}, ctx, None)

        self.assertDictEqual(
            ctx.get_prop("$response.$cookie").get_data(), {
                'name1': {
                    "$action": 'cookie',
                    'name': 'name1',
                    'value': 'value'
                },
                'name2': {
                    "$action": 'cookie',
                    'name': 'name2',
                    'value': 'value'
                }
            })
    def test_trunk_with_params(self):
        descriptor = {
            "twigs": [{
                "content": "params"
            }],
            "input_type": "object",
            "output_type": "array",
            "_validators": None,
            "path": "path"
        }

        ctx = create_context(descriptor)

        _execute_twigs(descriptor, {"db": FakeDataProvider()}, ctx, None)

        d = ctx.get_prop("$params").get_data()

        self.assertDictEqual(
            d, {
                "$last_inserted_id": 1,
                "path": "path",
                "$action": 'params',
                'a': '1',
                'b': '2'
            })
    def test_create_context_with_validator(self):
        model = {}
        validator = {}
        descriptor = {
            "path": "",
            "model": {
                "query": model,
                "path": model,
                "cookie": model,
                "header": model
            },
            "_validators": {
                "query": validator,
                "path": validator,
                "cookie": validator,
                "header": validator
            }
        }
        context = yaal.create_context(descriptor=descriptor)

        self.assertEqual(model, context.get_prop("$query").get_schema())
        self.assertEqual(validator, context.get_prop("$query").get_validator())

        self.assertEqual(model, context.get_prop("$path").get_schema())
        self.assertEqual(validator, context.get_prop("$path").get_validator())

        self.assertEqual(model, context.get_prop("$cookie").get_schema())
        self.assertEqual(validator, context.get_prop("$cookie").get_validator())

        self.assertEqual(model, context.get_prop("$header").get_schema())
        self.assertEqual(validator, context.get_prop("$header").get_validator())
    def test_create_context_returns_empty_shape(self):
        descriptor = {
            "path": "path"
        }

        context = yaal.create_context(descriptor=descriptor)
        self.assertEqual(Shape, type(context))
        self.assertEqual("path", context.get_prop("$params.path"))
    def test_create_context_returns_request_id(self):
        descriptor = {
            "path": ""
        }

        context = yaal.create_context(descriptor=descriptor)
        self.assertEqual(Shape, type(context))
        self.assertIsNotNone(context.get_prop("$request.id"))
Exemple #9
0
    def test_execute_branches_deep(self):
        descriptor = {
            "name":
            "$",
            "method":
            "$",
            "path":
            "path",
            "input_type":
            "object",
            "output_type":
            "array",
            "_validators":
            None,
            "partition_by":
            None,
            "use_parent_rows":
            None,
            "model": {
                "payload": {
                    "type": "object",
                    "properties": {
                        "items": {
                            "type": "array"
                        }
                    }
                }
            },
            "_validators": {
                "payload": None
            },
            "branches": [{
                "name": "items",
                "method": "$.items",
                "input_type": "array",
                "partition_by": None,
                "use_parent_rows": None,
                "branches": None,
                "twigs": [{
                    "content": "select"
                }]
            }]
        }

        ctx = create_context(descriptor, payload={"items": [{}]})
        rs, errors = _execute_branch(descriptor, True,
                                     {"db": FakeDataProviderDeep()}, ctx, [],
                                     None)

        self.assertListEqual(rs, [{
            "items": [{
                'name': 'kiruba'
            }, {
                'name': 'sankar'
            }]
        }])
        self.assertEqual(errors, None)
Exemple #10
0
    def test_simple_get_shape_check(self):
        descriptor = self._gravity.create_descriptor("get1/get")
        input_shape = create_context(descriptor)

        self.assertIsNotNone(input_shape._shapes["data"])
        self.assertIsNotNone(input_shape._shapes["paging"])
        self.assertIsNotNone(input_shape._shapes["data"]._shapes["items"])
        self.assertIsNotNone(
            input_shape._shapes["data"]._shapes["items"]._shapes["product"])
Exemple #11
0
    def test_run(self):
        descriptor = self._gravity.create_descriptor("post1/post")
        d = {"Items": [{"A": 1}, {"b": 1}], "name": {"F": 1}}
        input_shape = create_context(descriptor, payload=d)

        rs = get_result(descriptor, self.get_data_provider, input_shape)

        self.assertListEqual(rs, [{"items": [{"a": 1}, {"b": 1}], "name": {"F": 1}}])

        self.assertDictEqual(input_shape.get_prop("name"), {"F": 1})
    def test_simple_get_trunk_check(self):
        g = self._g

        descriptor = g.create_descriptor("name/get", None)
        self.assertTrue(descriptor["name"] == "$")
        self.assertTrue(descriptor["method"] == "$")

        descriptor_ctx = g.get_descriptor_path_by_route("name", "get")
        ctx = create_context(descriptor, payload={"Name": "First"})
        r = g.get_result_json(descriptor, descriptor_ctx, ctx)

        self.assertListEqual([{"name": "First Last"}], json.loads(r))
 def test_create_context_structure(self):
     descriptor = {
         "path": ""
     }
     context = yaal.create_context(descriptor=descriptor)
     self.assertEqual(Shape, type(context))
     self.assertEqual(Shape, type(context.get_prop("$query")))
     self.assertEqual(Shape, type(context.get_prop("$path")))
     self.assertEqual(Shape, type(context.get_prop("$header")))
     self.assertEqual(Shape, type(context.get_prop("$cookie")))
     self.assertEqual(Shape, type(context.get_prop("$request")))
     self.assertEqual(Shape, type(context.get_prop("$response")))
     self.assertEqual(Shape, type(context.get_prop("$params")))
    def test_trunk_with_connection_missing(self):
        descriptor = {
            "twigs": [{
                "content": "break",
                "connection": "db1"
            }],
            "input_type": "object",
            "output_type": "array",
            "_validators": None,
            "path": "user"
        }

        ctx = create_context(descriptor)

        with self.assertRaises(Exception):
            _execute_twigs(descriptor, {"db": FakeDataProvider()}, ctx, None)
    def test_trunk_with_break(self):
        descriptor = {
            "twigs": [{
                "content": "break",
                "connection": "db"
            }],
            "input_type": "object",
            "output_type": "array",
            "_validators": None,
            "path": "user"
        }

        ctx = create_context(descriptor)
        rs, errors = _execute_twigs(descriptor, {"db": FakeDataProvider()},
                                    ctx, None)

        self.assertListEqual(rs, [{'a': '1', 'b': '2'}])
Exemple #16
0
    def test_execute_branch_simple(self):
        descriptor = {
            "path": "user",
            "leafs": [],
            "input_type": "object",
            "output_type": "array",
            "_validators": None,
            "partition_by": None,
            "use_parent_rows": None,
            "branches": None
        }

        ctx = create_context(descriptor)
        rs, errors = _execute_branch(descriptor, True,
                                     {"db": FakeDataProviderSimple()}, ctx, [],
                                     None)

        self.assertListEqual(rs, [])
        self.assertEqual(errors, None)
Exemple #17
0
    def test_trunk_with_parameters_queries_check(self):
        gravity = Yaal("/path", FakeContentReader1(), True)
        descriptor = gravity.create_descriptor("get1/get")

        parameters = descriptor["parameters"]
        self.assertIn("id1", parameters)
        self.assertIn("id2", parameters)
        self.assertIs(type(parameters), dict)

        leafs = descriptor["twigs"]
        self.assertIs(type(leafs), list)
        self.assertEqual(2, len(leafs))
        leaf0 = leafs[0]
        leaf0_parameters = leaf0["parameters"]
        self.assertEqual(2, len(leaf0_parameters))
        self.assertEqual("integer", leaf0_parameters[0]["type"])
        self.assertEqual("bool", leaf0_parameters[1]["type"])

        leaf1 = leafs[1]
        leaf1_parameters = leaf1["parameters"]
        self.assertEqual(1, len(leaf1_parameters))
        self.assertEqual("bool", leaf1_parameters[0]["type"])

        s = create_context(descriptor)
Exemple #18
0
from yaal import Yaal, create_context

YAAL_DEBUG = False

DATA_PROVIDERS = {
    "db": "sqlite3://./serve/db/app.db",
    "sqlite3": "sqlite3:///"
}

CORS_ENABLED = False

if __name__ == '__main__':
    path = "user/1"
    method = "get"
    root_path = "serve/api"

    y = Yaal(root_path, None, True)
    for name, db_url in DATA_PROVIDERS.items():
        y.setup_data_provider(name, db_url)

    descriptor_ctx = y.get_descriptor_path_by_route(path, method)
    descriptor = y.get_descriptor(descriptor_ctx)

    if not descriptor:
        print("descriptor is not found")
        exit()

    context = create_context(descriptor,
                             path_values=descriptor_ctx["path_values"])
    print(y.get_result_json(descriptor, descriptor_ctx, context))
Exemple #19
0
    def test_simple_get_shape_check(self):
        descriptor = self._gravity.create_descriptor("post1/post")
        input_shape = create_context(descriptor)

        self.assertIsNotNone(input_shape._shapes["items"])
        self.assertEqual(len(input_shape._shapes["items"]._shapes), 0)