Как установить значения в ответе Json списка словарей - PullRequest
0 голосов
/ 05 февраля 2020

Вот ответ Json, который я получаю из запроса GET.


[
    {
        "run_date": "2020-01-31T11:14:11+00:00",
        "id": 124,
        "job_id": "2020-01-31T11:14:11+00:00",
        "start_date": "2020-01-31T11:14:11.571934+00:00",
        "state": "failed"
    },
    {
        "run_date": "2020-01-31T11:14:11+00:00",
        "id": 215,
        "job_id": "2020-01-31T11:14:11+00:00",
        "start_date": "2020-01-31T11:14:11.571934+00:00",
        "state": "success"
    },
    {
        "run_date": "2020-01-31T11:14:11+00:00",
        "id": 746,
        "job_id": "2020-01-31T11:14:11+00:00",
        "start_date": "2020-02-04T11:46:32.465726+00:00",
        "state": "pause"
    }

]

  1. Из ответа, как я могу утверждать, что каждый из списка словарей имеет run_date, id, job_id и state.

  2. Можно ли утверждать, что получил id == 215 и его состояние успешно?

Заранее спасибо

1 Ответ

2 голосов
/ 05 февраля 2020

РЕДАКТИРОВАТЬ: Вы можете использовать некоторую библиотеку схем, например, Marshmallow, чтобы утверждать, что каждый прогон принадлежит определенной схеме

Я бы попробовал что-то вроде этого:

def assert_runs(runs, assertions, success_ids):
    for run in runs:
        for assertion in assertions:
            assert assertion in run
            if run['id'] in success_ids:
                try:
                    assert run['state'] == 'success'
                except AssertionError as e:
                    print('ERROR', run['id'], run['state'])
                    raise e

Передача списка прогонов, утверждений и идентификаторов для подтверждения успеха. Но это слишком вложенно, поэтому я бы разделил на две функции, такие как:

def assert_ids(run, success_ids):
    if run['id'] in success_ids:
        try:
            assert run['state'] == 'success'
        except AssertionError as e:
            print('ERROR', run['id'], run['state'])
            raise e

def assert_runs(runs, assertions, success_ids):
    for run in runs:
        for assertion in assertions:
            assert assertion in run
            assert_ids(run, success_ids)

И назвал бы это:

assertions = ['run_date', 'id', 'job_id', 'state']
runs = [
    {
        "run_date": "2020-01-31T11:14:11+00:00",
        "id": 124,
        "job_id": "2020-01-31T11:14:11+00:00",
        "start_date": "2020-01-31T11:14:11.571934+00:00",
        "state": "failed"
    },
    {
        "run_date": "2020-01-31T11:14:11+00:00",
        "id": 215,
        "job_id": "2020-01-31T11:14:11+00:00",
        "start_date": "2020-01-31T11:14:11.571934+00:00",
        "state": "success"
    },
    {
        "run_date": "2020-01-31T11:14:11+00:00",
        "id": 746,
        "job_id": "2020-01-31T11:14:11+00:00",
        "start_date": "2020-02-04T11:46:32.465726+00:00",
        "state": "pause"
    }

]

assert_runs(runs, assertions, [215, 746])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...