def test_etag_verify_check_etag_warning(self, app, method): old_item = {'item_id': 1, 'db_field': 0} old_etag = _generate_etag(old_item) with mock.patch.object(app.logger, 'warning') as mock_warning: with app.test_request_context('/', method=method, headers={'If-Match': old_etag}): verify_check_etag() if (is_etag_enabled(app) and method in ['PUT', 'PATCH', 'DELETE']): assert mock_warning.called mock_warning.reset_mock() else: assert not mock_warning.called check_etag(old_item) verify_check_etag() assert not mock_warning.called disable_etag_for_request() verify_check_etag() assert not mock_warning.called check_etag(old_item) verify_check_etag() assert not mock_warning.called
def put(self, new_item, item_id): item = self._get_item(item_id) # Check ETag is a manual action, no shema used check_etag(item['db_field']) new_item = collection.put(item_id, new_item) # Compute ETag using arbitrary data and no schema set_etag(new_item['db_field']) return new_item
def delete(self, item_id): item = self._get_item(item_id) check_etag(item, DocEtagSchema) del collection.items[collection.items.index(item)]
def put(self, new_item, item_id): item = self._get_item(item_id) check_etag(item, DocEtagSchema) return collection.put(item_id, new_item)
def test_etag_check_etag(self, app, schemas): etag_schema = schemas.DocEtagSchema old_item = {'item_id': 1, 'db_field': 0} new_item = {'item_id': 1, 'db_field': 1} old_etag = _generate_etag(old_item) old_etag_with_schema = _generate_etag(old_item, etag_schema) with app.test_request_context('/', headers={'If-Match': old_etag}): check_etag(old_item) if is_etag_enabled(app): with pytest.raises(PreconditionFailed): check_etag(new_item) else: check_etag(new_item) disable_etag_for_request() check_etag(old_item) check_etag(new_item) with app.test_request_context( '/', headers={'If-Match': old_etag_with_schema}): check_etag(old_item, etag_schema) if is_etag_enabled(app): with pytest.raises(PreconditionFailed): check_etag(new_item, etag_schema) else: check_etag(new_item) disable_etag_for_request() check_etag(old_item) check_etag(new_item)
def delete_resource(item_id): item = _get_item(item_id) check_etag(item) del collection.items[collection.items.index(item)]
def put_resource(new_item, item_id): item = _get_item(item_id) check_etag(item) return collection.put(item_id, new_item)
def delete(self, item_id): item = self._get_item(item_id) # Check ETag is a manual action and schema must be provided check_etag(item, DocSchema) collection.delete(item_id)
def put(self, new_item, item_id): item = self._get_item(item_id) # Check ETag is a manual action and schema must be provided check_etag(item, DocSchema) return collection.put(item_id, new_item)
def delete(self, item_id): item = self._get_item(item_id) # Check ETag is a manual action, no shema used check_etag(item['db_field']) collection.delete(item_id)
def delete(self, item_id): item = self._get_item(item_id) # Check ETag is a manual action, ETag schema is used check_etag(item) collection.delete(item_id)
def put(self, new_item, item_id): item = self._get_item(item_id) # Check ETag is a manual action, ETag schema is used check_etag(item) new_item = collection.put(item_id, new_item) return new_item