in src/buildstream_plugins/sources/pip.py [0:0]
def fetch(self): # pylint: disable=arguments-differ
with self.tempdir() as tmpdir:
packages = self.ref.strip().split("\n")
package_dir = os.path.join(tmpdir, "packages")
os.makedirs(package_dir)
self.call(
[
*self.host_pip,
"download",
"--no-binary",
":all:",
"--index-url",
self.index_url,
"--dest",
package_dir,
*packages,
],
fail="Failed to install python packages: {}".format(packages),
)
# If the mirror directory already exists, assume that some other
# process has fetched the sources before us and ensure that we do
# not raise an error in that case.
try:
utils.move_atomic(package_dir, self._mirror)
except utils.DirectoryExistsError:
# Another process has beaten us and has fetched the sources
# before us.
pass
except OSError as e:
raise SourceError(
"{}: Failed to move downloaded pip packages from '{}' to '{}': {}".format(
self, package_dir, self._mirror, e
)
) from e