1
0
Fork 0
eos-downloader/eos_downloader/cli/debug/commands.py
Daniel Baumann 8d2f70e3c7
Merging upstream version 0.12.0.
Signed-off-by: Daniel Baumann <daniel@debian.org>
2025-02-10 06:39:52 +01:00

86 lines
2.5 KiB
Python

#!/usr/bin/env python
# coding: utf-8 -*-
# pylint: disable=no-value-for-parameter
# pylint: disable=too-many-arguments
# pylint: disable=line-too-long
# pylint: disable=duplicate-code
# flake8: noqa E501
"""
Commands for ARDL CLI to get data.
"""
# Standard library imports
import xml.etree.ElementTree as ET
from xml.dom import minidom
# Third party imports
import click
# Local imports
import eos_downloader.defaults
import eos_downloader.logics.arista_server
from eos_downloader.cli.utils import cli_logging
@click.command()
@click.pass_context
@click.option(
"--output",
default=str("arista.xml"),
help="Path to save XML file",
type=click.Path(),
show_default=True,
)
@click.option(
"--log-level",
"--log",
help="Logging level of the command",
default="INFO",
type=click.Choice(
["debug", "info", "warning", "error", "critical"], case_sensitive=False
),
)
def xml(ctx: click.Context, output: str, log_level: str) -> None:
"""Downloads and saves XML data from Arista EOS server.
This function authenticates with an Arista server, retrieves XML data,
and saves it to a file in a prettified format.
Args:
ctx (click.Context): Click context object containing authentication token
output (str): File path where the XML output should be saved
log_level (str): Logging level to use for output messages
Raises:
Exception: If authentication with the server fails
Example:
>>> xml(ctx, "output.xml", "INFO")
INFO: connected to server aaa.bbb.ccc
INFO: XML file saved under output.xml
"""
log = cli_logging(log_level)
token = ctx.obj["token"]
server = eos_downloader.logics.arista_server.AristaServer(
token=token, session_server=eos_downloader.defaults.DEFAULT_SERVER_SESSION
)
try:
server.authenticate()
except Exception as error: # pylint: disable=W0703
log.error(f"Cant connect to server: {error}")
log.info(f"connected to server {eos_downloader.defaults.DEFAULT_SERVER_SESSION}")
xml_data = server.get_xml_data()
if xml_data is None:
log.error("No XML data received")
return
xml_object: ET.ElementTree = xml_data # pylint: disable=protected-access
xml_content = xml_object.getroot()
xmlstr = minidom.parseString(ET.tostring(xml_content)).toprettyxml(
indent=" ", newl=""
)
with open(output, "w", encoding="utf-8") as f:
f.write(str(xmlstr))
log.info(f"XML file saved under {output}")