2025-02-05 13:43:43 +01:00
|
|
|
#!/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.
|
|
|
|
"""
|
|
|
|
|
|
|
|
import xml.etree.ElementTree as ET
|
|
|
|
from xml.dom import minidom
|
|
|
|
|
|
|
|
import click
|
|
|
|
from loguru import logger
|
|
|
|
from rich.console import Console
|
|
|
|
|
|
|
|
import eos_downloader.eos
|
|
|
|
|
|
|
|
|
|
|
|
@click.command()
|
|
|
|
@click.pass_context
|
2025-02-05 13:48:40 +01:00
|
|
|
@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=None,
|
|
|
|
type=click.Choice(
|
|
|
|
["debug", "info", "warning", "error", "critical"], case_sensitive=False
|
|
|
|
),
|
|
|
|
)
|
2025-02-05 13:43:43 +01:00
|
|
|
def xml(ctx: click.Context, output: str, log_level: str) -> None:
|
|
|
|
# sourcery skip: remove-unnecessary-cast
|
|
|
|
"""Extract XML directory structure"""
|
|
|
|
console = Console()
|
|
|
|
# Get from Context
|
2025-02-05 13:48:40 +01:00
|
|
|
token = ctx.obj["token"]
|
2025-02-05 13:43:43 +01:00
|
|
|
|
|
|
|
logger.remove()
|
|
|
|
if log_level is not None:
|
|
|
|
logger.add("eos-downloader.log", rotation="10 MB", level=log_level.upper())
|
|
|
|
|
|
|
|
my_download = eos_downloader.eos.EOSDownloader(
|
2025-02-05 13:48:40 +01:00
|
|
|
image="unset",
|
|
|
|
software="EOS",
|
|
|
|
version="unset",
|
2025-02-05 13:43:43 +01:00
|
|
|
token=token,
|
2025-02-05 13:48:40 +01:00
|
|
|
hash_method="sha512sum",
|
|
|
|
)
|
2025-02-05 13:43:43 +01:00
|
|
|
|
|
|
|
my_download.authenticate()
|
2025-02-05 13:48:40 +01:00
|
|
|
xml_object: ET.ElementTree = (
|
|
|
|
my_download.get_folder_tree()
|
|
|
|
) # pylint: disable=protected-access
|
2025-02-05 13:43:43 +01:00
|
|
|
xml_content = xml_object.getroot()
|
|
|
|
|
2025-02-05 13:48:40 +01:00
|
|
|
xmlstr = minidom.parseString(ET.tostring(xml_content)).toprettyxml(
|
|
|
|
indent=" ", newl=""
|
|
|
|
)
|
|
|
|
with open(output, "w", encoding="utf-8") as f:
|
2025-02-05 13:43:43 +01:00
|
|
|
f.write(str(xmlstr))
|
|
|
|
|
2025-02-05 13:48:40 +01:00
|
|
|
console.print(f"XML file saved in: { output }")
|