import os, io, zipfile, shutil, requests GITHUB_SOURCES = [ ("RTLucassen", "B-line_detection"), ("ljhowell", "LUS-Segmentation-RT"), ("GuoJiaqi-1020", "MeDiVLAD"), ] def _dl_and_extract(owner, repo, ref): url = f"https://github.com/{owner}/{repo}/archive/refs/heads/{ref}.zip" r = requests.get(url, timeout=60) r.raise_for_status() z = zipfile.ZipFile(io.BytesIO(r.content)) tmp = f"_tmp_{repo}" os.makedirs(tmp, exist_ok=True) z.extractall(tmp) top = [os.path.join(tmp, d) for d in os.listdir(tmp) if os.path.isdir(os.path.join(tmp, d))] if not top: raise RuntimeError(f"Could not find extracted folder for {owner}/{repo}") src = top[0] dst = os.path.join("external", repo) os.makedirs("external", exist_ok=True) if os.path.exists(dst): shutil.rmtree(dst) shutil.move(src, dst) shutil.rmtree(tmp, ignore_errors=True) return dst def fetch_upstream(): os.makedirs("external", exist_ok=True) results = {} for owner, repo in GITHUB_SOURCES: dst = os.path.join("external", repo) if os.path.isdir(dst): results[repo] = "exists" continue # try 'main' then 'master' try: _dl_and_extract(owner, repo, "main") results[repo] = "downloaded-main" except Exception: _dl_and_extract(owner, repo, "master") results[repo] = "downloaded-master" return results