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)
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)
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)
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
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')
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
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__