summary refs log tree commit diff
path: root/pkgs/development/tools/poetry2nix/poetry2nix/fetch_from_legacy.py
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/development/tools/poetry2nix/poetry2nix/fetch_from_legacy.py')
-rw-r--r--pkgs/development/tools/poetry2nix/poetry2nix/fetch_from_legacy.py134
1 files changed, 0 insertions, 134 deletions
diff --git a/pkgs/development/tools/poetry2nix/poetry2nix/fetch_from_legacy.py b/pkgs/development/tools/poetry2nix/poetry2nix/fetch_from_legacy.py
deleted file mode 100644
index 44ea092acb0..00000000000
--- a/pkgs/development/tools/poetry2nix/poetry2nix/fetch_from_legacy.py
+++ /dev/null
@@ -1,134 +0,0 @@
-# Some repositories (such as Devpi) expose the Pypi legacy API
-# (https://warehouse.pypa.io/api-reference/legacy.html).
-#
-# Note it is not possible to use pip
-# https://discuss.python.org/t/pip-download-just-the-source-packages-no-building-no-metadata-etc/4651/12
-
-import os
-import sys
-import netrc
-from urllib.parse import urlparse, urlunparse
-from html.parser import HTMLParser
-import urllib.request
-import shutil
-import ssl
-from os.path import normpath
-
-
-# Parse the legacy index page to extract the href and package names
-class Pep503(HTMLParser):
-    def __init__(self):
-        super().__init__()
-        self.sources = {}
-        self.url = None
-        self.name = None
-
-    def handle_data(self, data):
-        if self.url is not None:
-            self.name = data
-
-    def handle_starttag(self, tag, attrs):
-        if tag == "a":
-            for name, value in attrs:
-                if name == "href":
-                    self.url = value
-
-    def handle_endtag(self, tag):
-        if self.url is not None:
-            self.sources[self.name] = self.url
-        self.url = None
-
-
-url = sys.argv[1]
-package_name = sys.argv[2]
-index_url = url + "/" + package_name + "/"
-package_filename = sys.argv[3]
-
-# Parse username and password for this host from the netrc file if given.
-username, password = None, None
-if os.environ["NETRC"]:
-    netrc_obj = netrc.netrc(os.environ["NETRC"])
-    host = urlparse(index_url).netloc
-    # Strip port number if present
-    if ":" in host:
-        host = host.split(":")[0]
-    username, _, password = netrc_obj.authenticators(host)
-
-print("Reading index %s" % index_url)
-
-context = ssl.create_default_context()
-context.check_hostname = False
-context.verify_mode = ssl.CERT_NONE
-
-# Extract out username/password from index_url, if present.
-parsed_url = urlparse(index_url)
-username = parsed_url.username or username
-password = parsed_url.password or password
-index_url = parsed_url._replace(netloc=parsed_url.netloc.rpartition("@")[-1]).geturl()
-
-req = urllib.request.Request(index_url)
-if username and password:
-    import base64
-
-    password_b64 = base64.b64encode(":".join((username, password)).encode()).decode(
-        "utf-8"
-    )
-    req.add_header("Authorization", "Basic {}".format(password_b64))
-response = urllib.request.urlopen(req, context=context)
-index = response.read()
-
-parser = Pep503()
-parser.feed(str(index, "utf-8"))
-if package_filename not in parser.sources:
-    print(
-        "The file %s has not be found in the index %s" % (package_filename, index_url)
-    )
-    exit(1)
-
-package_file = open(package_filename, "wb")
-# Sometimes the href is a relative or absolute path within the index's domain.
-indicated_url = urlparse(parser.sources[package_filename])
-if indicated_url.netloc == "":
-    parsed_url = urlparse(index_url)
-
-    if indicated_url.path.startswith("/"):
-        # An absolute path within the index's domain.
-        path = parser.sources[package_filename]
-    else:
-        # A relative path.
-        path = parsed_url.path + "/" + parser.sources[package_filename]
-
-    package_url = urlunparse(
-        (
-            parsed_url.scheme,
-            parsed_url.netloc,
-            path,
-            None,
-            None,
-            None,
-        )
-    )
-else:
-    package_url = parser.sources[package_filename]
-
-# Handle urls containing "../"
-parsed_url = urlparse(package_url)
-real_package_url = urlunparse(
-    (
-        parsed_url.scheme,
-        parsed_url.netloc,
-        normpath(parsed_url.path),
-        parsed_url.params,
-        parsed_url.query,
-        parsed_url.fragment,
-    )
-)
-print("Downloading %s" % real_package_url)
-
-req = urllib.request.Request(real_package_url)
-if username and password:
-    req.add_unredirected_header("Authorization", "Basic {}".format(password_b64))
-response = urllib.request.urlopen(req, context=context)
-
-with response as r:
-    shutil.copyfileobj(r, package_file)