Example #1
0
    def test___init__(self, mock_session):

        source = relations_restful.Source("unit", "http://test.com", a=1)
        self.assertEqual(source.name, "unit")
        self.assertEqual(source.url, "http://test.com")
        self.assertEqual(source.session.a, 1)
        self.assertEqual(relations.SOURCES["unit"], source)

        source = relations_restful.Source("test",
                                          "http://unit.com",
                                          session="sesh")
        self.assertEqual(source.name, "test")
        self.assertEqual(source.url, "http://unit.com")
        self.assertEqual(source.session, "sesh")
        self.assertEqual(relations.SOURCES["test"], source)
Example #2
0
    def test_result(self):

        source = relations_restful.Source("test",
                                          "http://unit.com",
                                          session="sesh")

        model = unittest.mock.MagicMock()
        model.NAME = "moded"
        model.overflow = False

        # good

        response = unittest.mock.MagicMock()
        response.status_code = 200
        response.json.return_value = {"name": "value", "overflow": True}

        self.assertEqual(source.result(model, "name", response), "value")
        self.assertTrue(model.overflow)

        # bad

        response = unittest.mock.MagicMock()
        response.status_code = 500
        response.json.return_value = {"message": "whoops"}

        self.assertRaisesRegex(relations.ModelError, "moded: whoops",
                               source.result, model, "whatevs", response)
Example #3
0
    def setUp(self):
        class ResourceModel(relations.Model):
            SOURCE = "TestRestfulResource"

        class Simple(ResourceModel):
            id = int
            name = str

        class Plain(ResourceModel):
            ID = None
            simple_id = int
            name = str

        relations.OneToMany(Simple, Plain)

        class SimpleResource(relations_restful.Resource):
            MODEL = Simple

        class PlainResource(relations_restful.Resource):
            MODEL = Plain

        class Meta(ResourceModel):
            id = int
            name = str
            flag = bool
            spend = float
            people = set
            stuff = list
            things = dict, {"extract": "for__0____1"}
            push = str, {"inject": "stuff___1__relations.io____1"}

        def subnet_attr(values, value):

            values["address"] = str(value)
            min_ip = value[0]
            max_ip = value[-1]
            values["min_address"] = str(min_ip)
            values["min_value"] = int(min_ip)
            values["max_address"] = str(max_ip)
            values["max_value"] = int(max_ip)

        class Net(ResourceModel):

            id = int
            ip = ipaddress.IPv4Address, {
                "attr": {
                    "compressed": "address",
                    "__int__": "value"
                },
                "init": "address",
                "titles": "address",
                "extract": {
                    "address": str,
                    "value": int
                }
            }
            subnet = ipaddress.IPv4Network, {
                "attr": subnet_attr,
                "init": "address",
                "titles": "address"
            }

            TITLES = "ip__address"
            INDEX = "ip__value"

        class MetaResource(relations_restful.Resource):
            MODEL = Meta

        class NetResource(relations_restful.Resource):
            MODEL = Net

        class Unit(ResourceModel):
            id = int
            name = str

        class Test(ResourceModel):
            id = int
            unit_id = int
            name = str

        class Case(ResourceModel):
            id = int
            test_id = int
            name = str

        relations.OneToMany(Unit, Test)
        relations.OneToOne(Test, Case)

        class UnitResource(relations_restful.Resource):
            MODEL = Unit

        class TestResource(relations_restful.Resource):
            MODEL = Test

        class CaseResource(relations_restful.Resource):
            MODEL = Case

        self.resource = relations.unittest.MockSource("TestRestfulResource")

        self.app = flask.Flask("source-api")
        restful = flask_restful.Api(self.app)

        restful.add_resource(SimpleResource, '/simple', '/simple/<id>')
        restful.add_resource(PlainResource, '/plain')

        restful.add_resource(MetaResource, '/meta', '/meta/<id>')
        restful.add_resource(NetResource, '/net', '/net/<id>')

        restful.add_resource(UnitResource, '/unit', '/unit/<id>')
        restful.add_resource(TestResource, '/test', '/test/<id>')
        restful.add_resource(CaseResource, '/case', '/case/<id>')

        self.source = relations_restful.Source("TestRestfulSource", "",
                                               self.app.test_client())

        def result(model, key, response):

            if key in response.json:
                return response.json[key]

            print(response.json)

        self.source.result = result
    def setUp(self):
        class ResourceModel(relations.Model):
            SOURCE = "TestRestfulResource"

        class Simple(ResourceModel):
            id = int
            name = str

        class Plain(ResourceModel):
            ID = None
            simple_id = int
            name = str

        relations.OneToMany(Simple, Plain)

        class SimpleResource(relations_restful.Resource):
            MODEL = Simple

        class PlainResource(relations_restful.Resource):
            MODEL = Plain

        class Unit(ResourceModel):
            id = int
            name = str

        class Test(ResourceModel):
            id = int
            unit_id = int
            name = str

        class Case(ResourceModel):
            id = int
            test_id = int
            name = str

        relations.OneToMany(Unit, Test)
        relations.OneToOne(Test, Case)

        class UnitResource(relations_restful.Resource):
            MODEL = Unit

        class TestResource(relations_restful.Resource):
            MODEL = Test

        class CaseResource(relations_restful.Resource):
            MODEL = Case

        self.resource = relations.unittest.MockSource("TestRestfulResource")

        self.app = flask.Flask("source-api")
        restful = flask_restful.Api(self.app)

        restful.add_resource(SimpleResource, '/simple', '/simple/<id>')
        restful.add_resource(PlainResource, '/plain')

        restful.add_resource(UnitResource, '/unit', '/unit/<id>')
        restful.add_resource(TestResource, '/test', '/test/<id>')
        restful.add_resource(CaseResource, '/case', '/case/<id>')

        self.source = relations_restful.Source("TestRestfulSource", "",
                                               self.app.test_client())

        def result(model, key, response):
            return response.json[key]

        self.source.result = result