Example #1
0
def validate_data(request, model, partial=False, data=None):
    if data is None:
        data = validate_json_data(request)
    try:
        if partial and isinstance(request.context, model):
            initial_data = request.context.serialize()
            m = model(initial_data)
            new_patch = apply_data_patch(initial_data, data)
            if new_patch:
                m.import_data(new_patch, partial=True, strict=True)
            m.__parent__ = request.context.__parent__
            m.validate()
            role = request.context.get_role()
            method = m.to_patch
        else:
            m = model(data)
            m.__parent__ = request.context
            m.validate()
            method = m.serialize
            role = 'create'
    except (ModelValidationError, ModelConversionError), e:
        for i in e.message:
            request.errors.add('body', i, e.message[i])
        request.errors.status = 422
        raise error_handler(request)
Example #2
0
def validate_json_data(request):
    try:
        json = request.json_body
    except ValueError, e:
        request.errors.add('body', 'data', e.message)
        request.errors.status = 422
        raise error_handler(request)
Example #3
0
def extract_lot_adapter(request, lot_id):
    db = request.registry.db
    doc = db.get(lot_id)
    if doc is None or doc.get('doc_type') != 'Lot':
        request.errors.add('url', 'lot_id', 'Not Found')
        request.errors.status = 404
        raise error_handler(request)

    return request.lot_from_data(doc)
Example #4
0
def lot_from_data(request, data, raise_error=True, create=True):
    lotType = data.get('lotType', DEFAULT_LOT_TYPE)
    model = request.registry.lotTypes.get(lotType)
    if model is None and raise_error:
        request.errors.add('body', 'lotType', 'Not implemented')
        request.errors.status = 415
        raise error_handler(request)
    update_logging_context(request, {'lot_type': lotType})
    if model is not None and create:
        model = model(data)
    return model
Example #5
0
    def test_error_handler(self):
        errors = Errors(403)
        errors.add('body', 'data',
                   "Can't update resource in current (draft) status")

        request = mock.MagicMock()
        request.matchdict = {'a': 'b'}
        request.errors = errors
        response = error_handler(request)

        self.assertEqual(
            response.body,
            '{"status": "error", "errors": [{"location": "body", "name": "data", "description": "Can\'t update resource in current (draft) status"}]}'
        )
        self.assertEqual(response.content_type, 'application/json')
        self.assertEqual(response.status, '403 Forbidden')
Example #6
0
def get_item(parent, key, request):
    request.validated['{}_id'.format(key)] = request.matchdict['{}_id'.format(
        key)]
    items = [
        i for i in getattr(parent, '{}s'.format(key), [])
        if i.id == request.matchdict['{}_id'.format(key)]
    ]
    if not items:
        from openregistry.api.utils import error_handler
        request.errors.add('url', '{}_id'.format(key), 'Not Found')
        request.errors.status = 404
        raise error_handler(request)
    else:
        if key == 'document':
            request.validated['{}s'.format(key)] = items
        item = items[-1]
        request.validated[key] = item
        request.validated['id'] = request.matchdict['{}_id'.format(key)]
        item.__parent__ = parent
        return item
Example #7
0
    check_document, update_document_url,
    error_handler, raise_operation_error
)


def validate_json_data(request):
    try:
        json = request.json_body
    except ValueError, e:
        request.errors.add('body', 'data', e.message)
        request.errors.status = 422
        raise error_handler(request)
    if not isinstance(json, dict) or 'data' not in json or not isinstance(json.get('data'), dict):
        request.errors.add('body', 'data', "Data not available")
        request.errors.status = 422
        raise error_handler(request)
    request.validated['json_data'] = json['data']
    return json['data']


def validate_data(request, model, partial=False, data=None):
    if data is None:
        data = validate_json_data(request)
    try:
        if partial and isinstance(request.context, model):
            initial_data = request.context.serialize()
            m = model(initial_data)
            new_patch = apply_data_patch(initial_data, data)
            if new_patch:
                m.import_data(new_patch, partial=True, strict=True)
            m.__parent__ = request.context.__parent__