File access_index_from_local_fs.patch of Package micropython-lib
From 65adc276a3e76e51b8c9c6770a2611679e607f3f Mon Sep 17 00:00:00 2001
From: Dominik Heidler <dheidler@suse.de>
Date: Fri, 14 Mar 2025 14:01:39 +0100
Subject: [PATCH] micropython/mip: Allow accessing index from local filesystem.
Just set the index to `file://relative/path` or `file:///absolute/path`.
Signed-off-by: Dominik Heidler <dheidler@suse.de>
---
micropython/mip/mip/__init__.py | 29 +++++++++++++++++++++--------
1 file changed, 21 insertions(+), 8 deletions(-)
diff --git a/micropython/mip/mip/__init__.py b/micropython/mip/mip/__init__.py
index 8920ad8f4..4b4a8c79f 100644
--- a/micropython/mip/mip/__init__.py
+++ b/micropython/mip/mip/__init__.py
@@ -91,6 +91,14 @@ def _rewrite_url(url, branch=None):
def _download_file(url, dest):
+ if url.startswith("file://"):
+ print("Copying:", dest)
+ src = url[7:]
+ _ensure_path_exists(dest)
+ with open(src, "b") as sf:
+ with open(dest, "wb") as f:
+ _chunk(sf, f.write)
+ return True
response = requests.get(url)
try:
if response.status_code != 200:
@@ -108,15 +116,20 @@ def _download_file(url, dest):
def _install_json(package_json_url, index, target, version, mpy):
- response = requests.get(_rewrite_url(package_json_url, version))
- try:
- if response.status_code != 200:
- print("Package not found:", package_json_url)
- return False
+ if package_json_url.startswith("file://"):
+ import json
- package_json = response.json()
- finally:
- response.close()
+ package_json = json.load(open(package_json_url[7:]))
+ else:
+ response = requests.get(_rewrite_url(package_json_url, version))
+ try:
+ if response.status_code != 200:
+ print("Package not found:", package_json_url)
+ return False
+
+ package_json = response.json()
+ finally:
+ response.close()
for target_path, short_hash in package_json.get("hashes", ()):
fs_target_path = target + "/" + target_path
if _check_exists(fs_target_path, short_hash):