Procházet zdrojové kódy

validate provided urls

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@74288 15284696-431f-4ddb-bdfa-cd5b030d7da7
Stefan Blumentrath před 6 roky
rodič
revize
45ff0ead5a
1 změnil soubory, kde provedl 33 přidání a 0 odebrání
  1. 33 0
      scripts/g.extension/g.extension.py

+ 33 - 0
scripts/g.extension/g.extension.py

@@ -1679,6 +1679,38 @@ def resolve_source_code(url=None, name=None):
                    .format(version=version[0],
                            module_class=module_class, module_name=name)
         return 'official', trac_url
+
+    # Check if URL can be found
+    # Catch corner case if local URL is given starting with file://
+    url = url[6:] if url.startswith('file://') else url
+    if not os.path.exists(url):
+        url_validated = False
+        if url.startswith('http'):
+            try:
+                open_url = urlopen(url)
+                open_url.close()
+                url_validated = True
+            except:
+                pass
+        else:
+            try:
+                open_url = urlopen('http://' + url)
+                open_url.close()
+                url_validted = True
+            except:
+                pass
+            try:
+                open_url = urlopen('https://' + url)
+                open_url.close()
+                url_validated = True
+            except:
+                pass
+
+        if not url_validated:
+            grass.fatal(_('Cannot open URL: {}'.format(url)))
+
+
+    # Handle local URLs
     if os.path.isdir(url):
         return 'dir', os.path.abspath(url)
     elif os.path.exists(url):
@@ -1687,6 +1719,7 @@ def resolve_source_code(url=None, name=None):
         for suffix in extract_tar.supported_formats:
             if url.endswith('.' + suffix):
                 return suffix, os.path.abspath(url)
+    # Handle remote URLs
     else:
         source, resolved_url = resolve_known_host_service(url)
         if source: