Условное / массовое удаление Python Eve

Из ответа Никола SO здесь и моего собственного тестирования кажется очевидным, что Ева не поддерживать условное удаление в конечных точках ресурсов.

Я знаю, что могу использовать GET: "where={...}" запрос к _ids и _etags документов, которые я хочу удалить, а затем отправить серию запросов на каждую конечную точку элемента, чтобы удалить их с заголовком If-Match, соответствующим образом установленным для каждого элемента _etag:

for each item:
    DELETE: http://localhost:5000/items/<item._id>

... но я бы хотел по возможности избегать отправки нескольких HTTP-запросов.

Одним из решений может быть предопределенные фильтры базы данных, но это будут статические фильтры. где я бы хотел динамически фильтровать удаление в зависимости от некоторых параметров URL. крючки перед событием могут быть решением, которое я ищу .

Поддерживает ли Ева массовое удаление? А если нет, то каков рекомендуемый способ расширить функциональность Евы для обеспечения условного и / или массового удаления?


person Austin Clifton    schedule 07.04.2017    source источник


Ответы (1)


Я добавил ловушку перед событием в DELETE, и, похоже, это работает с тестами, которые я провел до сих пор:

def add_delete_filters(resource, request, lookup):
    if 'where' in request.args:
        conditions = request.args.getlist('where')
        for cond_str in conditions:
            cond = json.loads(cond_str)
            for attrib in cond:
                lookup[attrib] = cond[attrib]

app = Eve()
app.on_pre_DELETE += add_delete_filters
person Austin Clifton    schedule 11.04.2017