Update GeoIntel project files
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Copy only non-sensitive DockDeck metadata from Unraid templates."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
from pathlib import Path
|
||||
import xml.etree.ElementTree as ET
|
||||
|
||||
|
||||
ALLOWED_FIELDS = ("Name", "WebUI", "Icon")
|
||||
|
||||
|
||||
def sanitize(source_dir: Path, destination_dir: Path) -> int:
|
||||
destination_dir.mkdir(parents=True, exist_ok=True)
|
||||
written = 0
|
||||
|
||||
for source in sorted(source_dir.glob("*.xml")):
|
||||
try:
|
||||
root = ET.parse(source).getroot()
|
||||
except (ET.ParseError, OSError):
|
||||
continue
|
||||
|
||||
output = ET.Element("Container")
|
||||
for field in ALLOWED_FIELDS:
|
||||
value = root.findtext(field)
|
||||
if value:
|
||||
ET.SubElement(output, field).text = value.strip()
|
||||
|
||||
if output.findtext("Name"):
|
||||
destination = destination_dir / source.name
|
||||
ET.ElementTree(output).write(
|
||||
destination,
|
||||
encoding="utf-8",
|
||||
xml_declaration=True,
|
||||
)
|
||||
destination.chmod(0o644)
|
||||
written_tags = {
|
||||
child.tag for child in ET.parse(destination).getroot()
|
||||
}
|
||||
if not written_tags.issubset(ALLOWED_FIELDS):
|
||||
destination.unlink(missing_ok=True)
|
||||
raise RuntimeError(
|
||||
f"Unexpected field in sanitized template: {source.name}"
|
||||
)
|
||||
written += 1
|
||||
|
||||
return written
|
||||
|
||||
|
||||
def main() -> None:
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("source", type=Path)
|
||||
parser.add_argument("destination", type=Path)
|
||||
args = parser.parse_args()
|
||||
count = sanitize(args.source, args.destination)
|
||||
print(f"Sanitized and verified {count} Unraid templates")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user