def handler(event, context): pet_id = event['pathParameters']['petId'] if not ValidationUtil.is_integer(pet_id): return HttpResponseUtil.pet_not_found() if not JsonUtil.is_valid_json(event['body']): return HttpResponseUtil.bad_request( "request body doesn't contain valid json") data = JsonUtil.loads(event['body']) v = Validator(pet_schema) if v.validate(data) is not True: return HttpResponseUtil.bad_request(v.errors) pet = {'id': int(pet_id), **data} try: pets_table.put_item(Item=pet, ConditionExpression='attribute_exists(id)') except ClientError as e: if e.response.get('Error', {}).get('Code') == 'ConditionalCheckFailedException': return HttpResponseUtil.pet_not_found() raise return HttpResponseUtil.ok(pet)
def test_valid_data_will_creates_pet(): event = { 'body': JsonUtil.dumps({ 'id': 1, 'name': 'dog', 'tags': [{ 'id': 1, 'name': 'some tag' }] }) } res = handler(event, {}) assert res['statusCode'] == HTTPStatus.CREATED data = JsonUtil.loads(res['body']) assert data['id'] == 1 assert data['name'] == 'dog' assert data['tags'][0]['id'] == 1 assert data['tags'][0]['name'] == 'some tag' dynamo_res = pets_table.get_item(Key={'id': 1}) assert 'Item' in dynamo_res item = dynamo_res['Item'] assert item['id'] == 1 assert item['name'] == 'dog'
def test_invalid_json_will_return_bad_request(data, res_body): event = {'body': JsonUtil.dumps(data)} res = handler(event, {}) assert res['statusCode'] == HTTPStatus.BAD_REQUEST assert res['body'] == res_body
def get_account(oid): db_handler = DBManager.get_connection() account = db_handler['user'].find_one({"_id": ObjectId(oid)}) if not account: abort(404) account = JsonUtil.itemToStr(account) return jsonify({'account': account})
def handler(event, context): if not JsonUtil.is_valid_json(event['body']): return HttpResponseUtil.bad_request( "request body doesn't contain valid json") data = JsonUtil.loads(event['body']) v = Validator(create_pet_schema) if v.validate(data) is not True: return HttpResponseUtil.bad_request(v.errors) try: pets_table.put_item(Item=data, ConditionExpression='attribute_not_exists(id)') except ClientError as e: if e.response.get('Error', {}).get('Code') == 'ConditionalCheckFailedException': return HttpResponseUtil.conflict( 'the specified id is already exists') raise return HttpResponseUtil.created(data)
def test_duplicate_id_return_conflict(): pets_table.put_item(Item={'id': 1, 'name': 'cat'}) event = { 'body': JsonUtil.dumps({ 'id': 1, 'name': 'dog', 'tags': [{ 'id': 1, 'name': 'some tag' }] }) } res = handler(event, {}) assert res['statusCode'] == HTTPStatus.CONFLICT assert len(pets_table.scan()['Items']) == 1
def ok(data, headers={}): return _create_response(HTTPStatus.OK, JsonUtil.dumps(data), headers)
def not_found(message, headers={}): return _create_response(HTTPStatus.NOT_FOUND, JsonUtil.dumps({'message': message}), headers)
def created(data, headers={}): return _create_response(HTTPStatus.CREATED, JsonUtil.dumps(data), headers)
def conflict(message, headers={}): return _create_response(HTTPStatus.CONFLICT, JsonUtil.dumps({'message': message}), headers)
def bad_request(errors, headers={}): return _create_response(HTTPStatus.BAD_REQUEST, JsonUtil.dumps({'message': errors}), headers)