Common Code#

Common classes and values used around relenv.

exception relenv.common.RelenvException#

Base class for exeptions generated from relenv.

class relenv.common.WorkDirs(root)#

Simple class used to hold references to working directories relenv uses relative to a given root.

Parameters:

root (str) – The root of the working directories tree

relenv.common.archived_build(triplet=None)#

Finds a the location of an archived build.

Parameters:

triplet (str) – The build triplet to find

Returns:

The location of the archived build

Return type:

pathlib.Path

relenv.common.build_arch()#

Return the current machine.

relenv.common.check_url(url, timeout=30)#

Check that the url returns a 200.

relenv.common.download_url(url, dest, verbose=True, backoff=3, timeout=60)#

Download the url to the provided destination.

This method assumes the last part of the url is a filename. (https://foo.com/bar/myfile.tar.xz)

Parameters:
  • url (str) – The url to download

  • dest (str) – Where to download the url to

  • verbose (bool) – Print download url and destination to stdout

Raises:

urllib.error.HTTPError – If the url was unable to be downloaded

Returns:

The path to the downloaded content

Return type:

str

relenv.common.extract_archive(to_dir, archive)#

Extract an archive to a specific location.

Parameters:
  • to_dir (str) – The directory to extract to

  • archive (str) – The archive to extract

relenv.common.fetch_url(url, fp, backoff=3, timeout=30)#

Fetch the contents of a url.

This method will store the contents in the given file like object.

relenv.common.format_shebang(python, tpl='#!/bin/sh\n"true" \'\'\'\'\n"exec" "$(dirname "$(readlink -f "$0")"){}" "$0" "$@"\n\'\'\'\n')#

Return a formatted shebang.

relenv.common.get_download_location(url, dest)#

Get the full path to where the url will be downloaded to.

Parameters:
  • url (str) – The url to donwload

  • dest (str) – Where to download the url to

Returns:

The path to where the url will be downloaded to

Return type:

str

relenv.common.get_toolchain(arch=None, root=None)#

Get a the toolchain directory, specific to the arch if supplied.

Parameters:
  • arch (str) – The architecture to get the toolchain for

  • root (str) – The root of the relenv working directories to search in

Returns:

The directory holding the toolchain

Return type:

pathlib.Path

relenv.common.get_triplet(machine=None, plat=None)#

Get the target triplet for the specified machine and platform.

If any of the args are None, it will try to deduce what they should be.

Parameters:
  • machine (str) – The machine for the triplet

  • plat (str) – The platform for the triplet

Raises:

RelenvException – If the platform is unknown

Returns:

The target triplet

Return type:

str

relenv.common.list_archived_builds()#

Return a list of version, architecture and platforms for builds.

relenv.common.plat_from_triplet(plat)#

Convert platform from build to the value of sys.platform.

relenv.common.relative_interpreter(root_dir, scripts_dir, interpreter)#

Return a relativized path to the given scripts_dir and interpreter.

relenv.common.runcmd(*args, **kwargs)#

Run a command.

Run the provided command, raising an Exception when the command finishes with a non zero exit code. Arguments are passed through to subprocess.run

Returns:

The process result

Return type:

subprocess.CompletedProcess

Raises:

RelenvException – If the command finishes with a non zero exit code

relenv.common.sanitize_sys_path(sys_path_entries)#

Sanitize sys.path to only include paths relative to the onedir environment.

relenv.common.work_dir(name, root=None)#

Get the absolute path to the relenv working directory of the given name.

Parameters:
  • name (str) – The name of the directory

  • root (str) – The root directory that this working directory will be relative to

Returns:

An absolute path to the requested relenv working directory

Return type:

pathlib.Path

relenv.common.work_dirs(root=None)#

Returns a WorkDirs instance based on the given root.

Parameters:

root (str) – The desired root of relenv’s working directories

Returns:

A WorkDirs instance based on the given root

Return type:

relenv.common.WorkDirs

relenv.common.work_root(root=None)#

Get the root directory that all other relenv working directories should be based on.

Parameters:

root (str) – An explicitly requested root directory

Returns:

An absolute path to the relenv root working directory

Return type:

pathlib.Path