Я пытаюсь вернуть все элементы в моем списке, чтобы я мог отобразить его в таблице с помощью другой функции, а также повторно использовать те же данные, извлеченные для внесения изменений в другую функцию.
Цельздесь для извлечения данных из API, который содержит информацию об эмуляциях / модулях.С этими данными я создаю красивые таблицы для просмотра пользователем, а также использую их для внесения изменений.Некоторые изменения включают включение / отключение эмуляции и включение / отключение устройств, существующих внутри каждой эмуляции.
Текущая функция:
Эта текущая функция прекрасно работает, но требует рефакторинга, потому что мне нужно иметь возможность повторно использовать эти же данные внутри emulation_extraction для печати таблицыа также внести изменения в эти данные.
def get_emulation_id():
"""This will get_emulation data and based on the emulation name chosen
by the user it will extract the data by using emulation id and format a
new structure so it can build a table.
"""
emulation_name = input(input_message(msg="Please ENTER Emulation name: "))
emulation_found = False
for data in get_emulation():
if emulation_name in data["name"]:
emulation_found = True
emulation = tesuto.apis.Emulation.get(data["id"]).data
emulation_extraction = []
for device in emulation.devices:
# tesuto.console.output(device)
emulation_extraction.append(
{
"name": device["name"],
"model_name": device["model_name"],
"version_name": device["version_name"],
"enabled/disabled": device["is_enabled"],
}
)
headers = ["name", "model_name", "version_name", "enabled/disabled"]
pretty_table = get_pretty_table(headers, emulation_extraction)
print("\nEmulation name: ", data["name"], "\n")
print(pretty_table.get_string())
if not emulation_found:
print("\nInvalid emulation name, Try again\n")
view_emulation_info()
user_input = input(input_message())
Когда я пытаюсь сделать это, он возвращает только один элемент в моем списке, а не все мои элементы, как это происходит, когда я манипулирую данными внутри get_emulation_id function:
def get_emulation_id():
"""This will get_emulation data and based on the emulation name chosen
by the user it will extract the data by using emulation id and format a
new structure so it can build a table.
"""
emulation_name = input(input_message(msg="Please ENTER Emulation name: "))
emulation_found = False
for data in get_emulation():
if emulation_name in data["name"]:
emulation_found = True
emulation = tesuto.apis.Emulation.get(data["id"]).data
emulation_extraction = []
for device in emulation.devices:
# tesuto.console.output(device)
emulation_extraction.append(
{
"name": device["name"],
"model_name": device["model_name"],
"version_name": device["version_name"],
"enabled/disabled": device["is_enabled"],
}
)
print("\nEmulation name: ", data["name"], "\n")
# print(print_device_table().get_string())
print(json.dumps(emulation_extraction, indent=4))
return emulation_extraction
Ожидается увидеть и то, что я вижу без оператора return :
Please ENTER Emulation name: pod41
Emulation name: pod410
[
{
"name": "nxos-spine1",
"model_name": "NX-OSv",
"version_name": "7.0.3.I7.4",
"enabled/disabled": false
},
{
"name": "nxos-spine2",
"model_name": "NX-OSv",
"version_name": "7.0.3.I7.4",
"enabled/disabled": false
},
{
"name": "csr1",
"model_name": "CSR1000v",
"version_name": "16.8.1",
"enabled/disabled": false
},
{
"name": "csr2",
"model_name": "CSR1000v",
"version_name": "16.8.1",
"enabled/disabled": false
},
{
"name": "csr3",
"model_name": "CSR1000v",
"version_name": "16.8.1",
"enabled/disabled": false
},
....omitted
]
Emulation name: pod411
[
{
"name": "nxos-spine1",
"model_name": "NX-OSv",
"version_name": "7.0.3.I7.4",
"enabled/disabled": false
},
{
"name": "nxos-spine2",
"model_name": "NX-OSv",
"version_name": "7.0.3.I7.4",
"enabled/disabled": false
},
{
"name": "csr1",
"model_name": "CSR1000v",
"version_name": "16.8.1",
"enabled/disabled": false
},
{
"name": "csr2",
"model_name": "CSR1000v",
"version_name": "16.8.1",
"enabled/disabled": false
},
{
"name": "csr3",
"model_name": "CSR1000v",
"version_name": "16.8.1",
"enabled/disabled": false
....omitted
]
Emulation name: pod412
[
{
"name": "nxos-spine1",
"model_name": "NX-OSv",
"version_name": "7.0.3.I7.4",
"enabled/disabled": false
},
{
"name": "nxos-spine2",
"model_name": "NX-OSv",
"version_name": "7.0.3.I7.4",
"enabled/disabled": false
},
{
"name": "csr1",
"model_name": "CSR1000v",
"version_name": "16.8.1",
"enabled/disabled": false
},
{
"name": "csr2",
"model_name": "CSR1000v",
"version_name": "16.8.1",
"enabled/disabled": false
},
{
"name": "csr3",
"model_name": "CSR1000v",
"version_name": "16.8.1",
"enabled/disabled": false
},
{
"name": "vmx1",
"model_name": "MX",
"version_name": "18.2R1.9",
"enabled/disabled": false
....omitted
]
Emulation name: pod413
[
{
"name": "nxos-spine1",
"model_name": "NX-OSv",
"version_name": "7.0.3.I7.4",
"enabled/disabled": false
},
{
"name": "nxos-spine2",
"model_name": "NX-OSv",
"version_name": "7.0.3.I7.4",
"enabled/disabled": false
},
{
"name": "csr1",
"model_name": "CSR1000v",
"version_name": "16.8.1",
"enabled/disabled": false
},
{
"name": "csr2",
"model_name": "CSR1000v",
"version_name": "16.8.1",
"enabled/disabled": false
},
{
"name": "csr3",
"model_name": "CSR1000v",
"version_name": "16.8.1",
"enabled/disabled": false
},
....omitted
]
Что я на самом деле вижу с оператором return :
Please ENTER Emulation name: pod41
Emulation name: pod410
[
{
"name": "nxos-spine1",
"model_name": "NX-OSv",
"version_name": "7.0.3.I7.4",
"enabled/disabled": false
},
{
"name": "nxos-spine2",
"model_name": "NX-OSv",
"version_name": "7.0.3.I7.4",
"enabled/disabled": false
},
{
"name": "csr1",
"model_name": "CSR1000v",
"version_name": "16.8.1",
"enabled/disabled": false
},
{
"name": "csr2",
"model_name": "CSR1000v",
"version_name": "16.8.1",
"enabled/disabled": false
},
{
"name": "csr3",
"model_name": "CSR1000v",
"version_name": "16.8.1",
"enabled/disabled": false
},
....omitted
]