Просмотр исходного кода

tools: idf_tools.py: fix compatibility with Python <= 2.7.8

Multiple ssl-related features have been backported from Python 3.x
to Python 2.7.9. This adds a fallback so that idf_tools.py can work
on older versions.
Ivan Grokhotkov 5 лет назад
Родитель
Сommit
d9db49d9f7
1 измененных файлов с 12 добавлено и 3 удалено
  1. 12 3
      tools/idf_tools.py

+ 12 - 3
tools/idf_tools.py

@@ -307,7 +307,11 @@ def unpack(filename, destination):
 def urlretrieve_ctx(url, filename, reporthook=None, data=None, context=None):
     url_type, path = splittype(url)
 
-    with contextlib.closing(urlopen(url, data, context=context)) as fp:
+    # urlopen doesn't have context argument in Python <=2.7.9
+    extra_urlopen_args = {}
+    if context:
+        extra_urlopen_args["context"] = context
+    with contextlib.closing(urlopen(url, data, **extra_urlopen_args)) as fp:
         headers = fp.info()
 
         # Just return the local path and the "headers" for file://
@@ -665,8 +669,13 @@ class IDFTool(object):
                 # For dl.espressif.com, add the ISRG x1 root certificate.
                 # This works around the issue with outdated certificate stores in some installations.
                 if "dl.espressif.com" in url:
-                    ctx = ssl.create_default_context()
-                    ctx.load_verify_locations(cadata=ISRG_X1_ROOT_CERT)
+                    try:
+                        ctx = ssl.create_default_context()
+                        ctx.load_verify_locations(cadata=ISRG_X1_ROOT_CERT)
+                    except AttributeError:
+                        # no ssl.create_default_context or load_verify_locations cadata argument
+                        # in Python <=2.7.8
+                        pass
 
                 urlretrieve_ctx(url, local_temp_path, report_progress if not global_non_interactive else None, context=ctx)
                 sys.stdout.write("\rDone\n")