mirror of
https://github.com/FULU-Foundation/OrcaSlicer-bambulab.git
synced 2026-05-14 06:53:47 -07:00
67 lines
2.0 KiB
Python
67 lines
2.0 KiB
Python
#!/usr/bin/env python3
|
|
from __future__ import annotations
|
|
|
|
import argparse
|
|
import pathlib
|
|
import sys
|
|
import tempfile
|
|
import urllib.request
|
|
|
|
URLS = [
|
|
"https://raw.githubusercontent.com/nlohmann/json/v3.11.3/single_include/nlohmann/json.hpp",
|
|
"https://raw.githubusercontent.com/nlohmann/json/develop/single_include/nlohmann/json.hpp",
|
|
]
|
|
|
|
|
|
def default_dest() -> pathlib.Path:
|
|
return pathlib.Path(__file__).resolve().parents[2] / "src" / "nlohmann" / "json.hpp"
|
|
|
|
|
|
def valid_header(text: str) -> bool:
|
|
return "NLOHMANN_JSON_VERSION_MAJOR" in text and "namespace nlohmann" in text
|
|
|
|
|
|
def download(url: str) -> str:
|
|
with urllib.request.urlopen(url, timeout=60) as r:
|
|
data = r.read()
|
|
return data.decode("utf-8")
|
|
|
|
|
|
def main() -> int:
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument("--dest", default=str(default_dest()))
|
|
args = parser.parse_args()
|
|
|
|
dest = pathlib.Path(args.dest).resolve()
|
|
if dest.is_file() and dest.stat().st_size > 0:
|
|
text = dest.read_text(encoding="utf-8", errors="ignore")
|
|
if valid_header(text):
|
|
print(f"nlohmann json already present: {dest}")
|
|
return 0
|
|
|
|
dest.parent.mkdir(parents=True, exist_ok=True)
|
|
|
|
last_error = None
|
|
for url in URLS:
|
|
try:
|
|
print(f"downloading {url}")
|
|
text = download(url)
|
|
if not valid_header(text):
|
|
raise RuntimeError("downloaded file does not look like nlohmann/json.hpp")
|
|
with tempfile.NamedTemporaryFile("w", delete=False, encoding="utf-8", dir=str(dest.parent)) as tmp:
|
|
tmp.write(text)
|
|
tmp_path = pathlib.Path(tmp.name)
|
|
tmp_path.replace(dest)
|
|
print(f"saved {dest}")
|
|
return 0
|
|
except Exception as exc:
|
|
last_error = exc
|
|
print(f"failed {url}: {exc}", file=sys.stderr)
|
|
|
|
print(f"failed to fetch nlohmann/json.hpp: {last_error}", file=sys.stderr)
|
|
return 1
|
|
|
|
|
|
if __name__ == "__main__":
|
|
raise SystemExit(main())
|