Commit 7556847e authored by Eric Duminil's avatar Eric Duminil
Browse files

Slight refactor

parent 9f123942
......@@ -99,7 +99,7 @@ def app() -> None:
args = parser.parse_args()
if args.install:
cmd_install(args)
cmd_install()
if args.template and args.citygml:
cmd_run(args)
......
......@@ -10,12 +10,11 @@ import urllib.request
import zipfile
from pathlib import Path
from .runner import SIMSTADT_VERSION_FORMAT
def _parse_simstadt_name(manifest: str) -> str:
m = re.search(
r"Implementation-Version:\s*(\S+)\s+\((\w+),\s*rev\.\s*(\w+),\s*(\d+)",
manifest,
)
m = re.search(f"Implementation-Version: *{SIMSTADT_VERSION_FORMAT}", manifest)
if not m:
raise ValueError("Cannot parse Implementation-Version from MANIFEST.MF")
version, branch, rev, date = m.groups()
......@@ -31,7 +30,7 @@ def _get_java_version() -> int | None:
return None
def cmd_install(args) -> None:
def cmd_install() -> None:
url = "https://simstadt.hft-stuttgart.de/download/InstallFiles/SimStadt2_latest.zip"
desktop = Path.home() / "Desktop"
......@@ -53,11 +52,17 @@ def cmd_install(args) -> None:
try:
with zipfile.ZipFile(tmp) as zf:
jar_entry = next(
(n for n in zf.namelist() if re.match(r"lib/simstadt-desktop-.*\.jar$", n)),
(
n
for n in zf.namelist()
if re.match(r"lib/simstadt-desktop-.*\.jar$", n)
),
None,
)
if not jar_entry:
print("Error: simstadt-desktop JAR not found in ZIP", file=sys.stderr)
print(
"Error: simstadt-desktop JAR not found in ZIP", file=sys.stderr
)
raise SystemExit(1)
with zipfile.ZipFile(io.BytesIO(zf.read(jar_entry))) as jar:
if "META-INF/MANIFEST.MF" not in jar.namelist():
......@@ -78,7 +83,10 @@ def cmd_install(args) -> None:
for member in zf.infolist():
member_path = (dest / member.filename).resolve()
if not member_path.is_relative_to(dest.resolve()):
print(f"Error: ZIP contains unsafe path: {member.filename}", file=sys.stderr)
print(
f"Error: ZIP contains unsafe path: {member.filename}",
file=sys.stderr,
)
raise SystemExit(1)
zf.extractall(dest)
for member in zf.infolist():
......@@ -98,6 +106,12 @@ def cmd_install(args) -> None:
java_version = _get_java_version()
if java_version is None:
print("Warning: Java not found. SimStadt requires Java 17. Download: https://bell-sw.com/pages/downloads/#jdk-17-lts", file=sys.stderr)
print(
"Warning: Java not found. SimStadt requires Java 17. Download: https://bell-sw.com/pages/downloads/#jdk-17-lts",
file=sys.stderr,
)
elif java_version < 17:
print(f"Warning: Java {java_version} found but SimStadt requires Java 17. Download: https://bell-sw.com/pages/downloads/#jdk-17-lts", file=sys.stderr)
print(
f"Warning: Java {java_version} found but SimStadt requires Java 17. Download: https://bell-sw.com/pages/downloads/#jdk-17-lts",
file=sys.stderr,
)
......@@ -26,6 +26,7 @@ from .utils import chdir, random_id
PARAMS = "params.xml"
SIMSTADT2_GLOB = "SimStadt2_0.*/"
SIMSTADT_TEMP_REPO = Path(tempfile.gettempdir()) / "simstadt_repo"
SIMSTADT_VERSION_FORMAT = r"(\S+)\s*\((\w+), rev. (\w+), (\d+)\s*\)"
load_dotenv()
......@@ -69,9 +70,9 @@ def get_template_path() -> Path:
)
def get_version_and_date() -> tuple[str, str]:
SIMSTADT_VERSION_FORMAT = re.compile(r"Launching SimStadt (\S+) \((\w+), rev. (\w+), (\d+)\)")
SIMSTADT_VERSION_PATTERN = re.compile(f"Launching SimStadt {SIMSTADT_VERSION_FORMAT}")
output = get_simstadt_output(get_simstadt_folder())
m = SIMSTADT_VERSION_FORMAT.search(output)
m = SIMSTADT_VERSION_PATTERN.search(output)
if not m:
raise ValueError(f"No SimStadt version string found in output:\n{output}")
version, _branch, _commit, date = m.groups()
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment