Как вернуть все в выводе кроме чего-то конкретного - PullRequest
0 голосов
/ 03 февраля 2020

Можно ли как-нибудь получить вывод, отображающий только те IP-адреса, которые не были введены пользователем в начале скрипта? Начало моего кода ниже.

def get_asset_group_criteria(group_number):
    asset_group_number = str(group_number)
    asset_group_path = "/api/3/asset_groups/" + asset_group_number + "/search_criteria"
    url5 = server + asset_group_path
    response = requests.request("GET", url5, headers=headers, verify=False)
    data = response.json()
    print(data)

x = input("What is the asset group id?: ")
get_asset_group_criteria(x)

Вывод команды print возвращает следующее:

{'match': 'any', 'filters': [{'field': 'ip-address', 'operator': 'is', 'value': '192.168.1.0'}, {'field': 'ip-address', 'operator': 'is', 'value': '192.168.1.1'}]}

Для дальнейшего уточнения того, что я пытаюсь сделать, основываясь на этом выводе :

Я бы хотел, чтобы скрипт спросил пользователя, какой IP-адрес не будет включен в вывод. Затем скрипт пропустит go и ответит всем, что не является этим IP. Как только это будет сделано, я хотел бы использовать PUT для обновления критериев поиска в программе, которую я использую для.

1 Ответ

0 голосов
/ 03 февраля 2020

Можно ли как-нибудь получить вывод, отображающий только те IP-адреса, которые не были введены пользователем в начале скрипта?

Да, все вы нужно отфильтровать массив data['filters'] из ответа, исключая нужный IP. Проверьте фрагмент кода ниже:

def get_asset_group_criteria(group_number):
    asset_group_number = str(group_number)
    asset_group_path = "/api/3/asset_groups/" + asset_group_number + "/search_criteria"
    url5 = server + asset_group_path
    response = requests.request("GET", url5, headers=headers, verify=False)
    data = response.json()
    return data

def put_asset_group_criteria(group_number, data):
    asset_group_number = str(group_number)
    asset_group_path = "/api/3/asset_groups/" + asset_group_number + "/search_criteria"
    url5 = server + asset_group_path
    response = requests.request("PUT", url5, json=data, headers=headers, verify=False)
    return response

x = input("What is the asset group id?: ")
ip = input("What IP should not be included?: ")
data = get_asset_group_criteria(x)
data['filters'] = [filter for filter in data['filters'] if filter['value'] != exclude_ip]
print(data)
resp = put_asset_group_criteria(x, data)
print(resp)

Что я сделал, так это обновил массив data['filters'], сгенерировав новый, скопировав каждый элемент, кроме элементов со значением, равным exclude_ip аргумент.

Вывод должен быть: {'match': 'any', 'filters': [{'field': 'ip-address', 'operator': 'is', 'value': '192.168.1.0'}]}, если сообщается 192.168.1.1.

Запрос PUT очень похож на GET с использованием вашего текущего интерфейса, все, что вам нужно изменить, - это имя метод, от "GET" до "PUT", и передайте в запрос аргумент json, содержащий ваши данные. Проверьте документы .

...