示例#1
0
 def test_attributes_as_dict(self):
     DictRequest = JsonApiRequest('item', dict)
     obj_to_validate = {
         'data': {'type': 'item', 'attributes': {}}
     }
     my_request_obj = DictRequest(**obj_to_validate)
     assert my_request_obj.dict() == obj_to_validate
示例#2
0
 def test_request_with_relationships(self):
     MyRequest = JsonApiRequest('item', dict)
     obj_to_validate = {
         'data': {
             'type': 'item',
             'attributes': {},
             'relationships': {
                 'sold_at': {
                     'data': {
                         'type': 'store',
                         'id': 'abc123',
                         'meta': None
                     },
                 }
             }
         },
     }
     my_request_obj = MyRequest(**obj_to_validate)
     assert my_request_obj.dict() == {
         'data': {
             'type': 'item',
             'attributes': {},
             'relationships': {
                 'sold_at': {
                     'data': {
                         'type': 'store',
                         'id': 'abc123',
                         'meta': None
                     },
                 }
             },
             'id': None
         },
     }
示例#3
0
    def test_data_required(self):
        MyRequest = JsonApiRequest('item', dict)
        obj_to_validate = {
            'data': None
        }
        with raises(ValidationError) as e:
            MyRequest(**obj_to_validate)

        assert e.value.errors() == [
            {'loc': ('data',), 'msg': 'value is not a valid dict', 'type': 'type_error.dict'},
        ]
示例#4
0
    def test_attributes_required(self):
        MyRequest = JsonApiRequest('item', dict)
        obj_to_validate = {'data': {'type': 'item', 'attributes': None}}
        with raises(ValidationError) as e:
            MyRequest(**obj_to_validate)

        assert e.value.errors() == [
            {
                'loc': ('data', 'attributes'),
                'msg': 'none is not an allowed value',
                'type': 'type_error.none.not_allowed'
            },
        ]
示例#5
0
 def test_attributes_as_item_model(self):
     ItemRequest = JsonApiRequest('item', ItemModel)
     obj_to_validate = {
         'data': {
             'type': 'item',
             'attributes': {
                 'name': 'apple',
                 'quantity': 10,
                 'price': 1.20
             }
         }
     }
     my_request_obj = ItemRequest(**obj_to_validate)
     assert my_request_obj.dict() == obj_to_validate
示例#6
0
    def test_type_invalid_string(self):
        MyRequest = JsonApiRequest('item', dict)
        obj_to_validate = {
            'data': {'type': 'not_an_item', 'attributes': {}}
        }
        with raises(ValidationError) as e:
            MyRequest(**obj_to_validate)

        assert e.value.errors() == [
            {
                'loc': ('data', 'type'),
                'msg': "unexpected value; permitted: 'item'",
                'type': 'value_error.const',
                'ctx': {'given': 'not_an_item', 'permitted': ('item',)},
            },
        ]
示例#7
0
    def test_attributes_as_item_model__empty_dict(self):
        ItemRequest = JsonApiRequest('item', ItemModel)
        obj_to_validate = {
            'data': {
                'type': 'item',
                'attributes': {}
            }
        }
        with raises(ValidationError) as e:
            ItemRequest(**obj_to_validate)

        assert e.value.errors() == [
            {'loc': ('data', 'attributes', 'name'), 'msg': 'field required', 'type': 'value_error.missing'},
            {'loc': ('data', 'attributes', 'quantity'), 'msg': 'field required', 'type': 'value_error.missing'},
            {'loc': ('data', 'attributes', 'price'), 'msg': 'field required', 'type': 'value_error.missing'}
        ]
示例#8
0
    name: str
    quantity: int
    price: float
    id: str = str(uuid4().hex)
    created_at: datetime = datetime.now()


# Define our Item Request/Response schema
class Item(BaseModel):
    name: str
    quantity: int
    price: float


ITEM_TYPE_NAME = 'item'
ItemRequest = JsonApiRequest(ITEM_TYPE_NAME, Item)
ItemResponse = JsonApiResponse(ITEM_TYPE_NAME, Item)


def marshal_item(item: ItemData) -> dict:
    return {
        'id': item.id,
        'type': ITEM_TYPE_NAME,
        'attributes': {
            'name': item.name,
            'quantity': item.quantity,
            'price': item.price,
        },
    }

示例#9
0
from pydantic import BaseModel
from pydantic_jsonapi import JsonApiRequest


class ItemModel(BaseModel):
    name: str
    quantity: int
    price: float


class ItemModelWithOrmMode(BaseModel):
    name: str
    quantity: int
    price: float

    class Config:
        orm_mode = True


item_type_name = 'item'
ItemRequest = JsonApiRequest(item_type_name, ItemModel)