Artifactory

class audbackend.backend.Artifactory(host, repository, *, authentication=None)[source]

Backend for Artifactory.

Parameters

authentication

Artifactory.authentication

Object used for authentication, e.g. username, password tuple.

checksum()

Artifactory.checksum(path)

MD5 checksum for file on backend.

Parameters

path (str) – path to file on backend

Return type

str

Returns

MD5 checksum

Raises
  • BackendError – if an error is raised on the backend, e.g. path does not exist

  • ValueError – if path does not start with '/', ends on '/', or does not match '[A-Za-z0-9/._-]+'

  • RuntimeError – if backend was not opened

close()

Artifactory.close()

Close connection to backend.

Raises

BackendError – if an error is raised on the backend

copy_file()

Artifactory.copy_file(src_path, dst_path, *, validate=False, verbose=False)

Copy file on backend.

If dst_path exists and has a different checksum, it is overwritten. Otherwise, the operation is silently skipped.

If validate is set to True, a final check is performed to assert that src_path and dst_path have the same checksum. If it fails, dst_path is removed and an InterruptedError is raised.

Parameters
  • src_path (str) – source path to file on backend

  • dst_path (str) – destination path to file on backend

  • validate (bool) – verify file was successfully copied

  • verbose (bool) – show debug messages

Raises
  • BackendError – if an error is raised on the backend

  • InterruptedError – if validation fails

  • ValueError – if src_path or dst_path does not start with '/', ends on '/', or does not match '[A-Za-z0-9/._-]+'

  • RuntimeError – if backend was not opened

create()

classmethod Artifactory.create(host, repository, *, authentication=None)

Create repository.

Creates repository located at host on the backend.

Parameters
  • host (str) – host address

  • repository (str) – repository name

  • authentication (Optional[Any]) – object used for authentication, e.g. a tuple with username and password

Raises

BackendError – if an error is raised on the backend, e.g. repository exists already or cannot be created

date()

Artifactory.date(path)

Last modification date of file on backend.

If the date cannot be determined, an empty string is returned.

Parameters

path (str) – path to file on backend

Return type

str

Returns

date in format 'yyyy-mm-dd'

Raises
  • BackendError – if an error is raised on the backend, e.g. path does not exist

  • ValueError – if path does not start with '/', ends on '/', or does not match '[A-Za-z0-9/._-]+'

  • RuntimeError – if backend was not opened

delete()

classmethod Artifactory.delete(host, repository, *, authentication=None)

Delete repository.

Deletes repository located at host on the backend.

Parameters
  • host (str) – host address

  • repository (str) – repository name

  • authentication (Optional[Any]) – access token for possible authentication, e.g. username, password tuple

Raises

BackendError – if an error is raised on the backend, e.g. repository does not exist

exists()

Artifactory.exists(path, *, suppress_backend_errors=False)

Check if file exists on backend.

Parameters
  • path (str) – path to file on backend

  • suppress_backend_errors (bool) – if set to True, silently catch errors raised on the backend and return False

Return type

bool

Returns

True if file exists

Raises
  • BackendError – if suppress_backend_errors is False and an error is raised on the backend, e.g. due to a connection timeout

  • ValueError – if path does not start with '/', ends on '/', or does not match '[A-Za-z0-9/._-]+'

  • ValueError – if version is empty or does not match '[A-Za-z0-9._-]+'

  • RuntimeError – if backend was not opened

get_archive()

Artifactory.get_archive(src_path, dst_root, *, tmp_root=None, validate=False, verbose=False)

Get archive from backend and extract.

The archive type is derived from the extension of src_path. See audeer.extract_archive() for supported extensions.

If dst_root does not exist, it is created.

If validate is set to True, a final check is performed to assert that src_path and the retrieved archive have the same checksum. If it fails, the retrieved archive is removed and an InterruptedError is raised.

Parameters
  • src_path (str) – path to archive on backend

  • dst_root (str) – local destination directory

  • tmp_root (Optional[str]) – directory under which archive is temporarily extracted. Defaults to temporary directory of system

  • validate (bool) – verify archive was successfully retrieved from the backend

  • verbose (bool) – show debug messages

Return type

List[str]

Returns

extracted files

Raises

get_authentication()

classmethod Artifactory.get_authentication(host)[source]

Username and password/access token for given host.

Returns a username and password / API key / access token, which can be used to authenticate with an Artifactory server.

Note, API keys are deprecated and will no longer work with newer versions of Artifactory.

To get the username, password/access token combination, the function looks first for the two environment variables ARTIFACTORY_USERNAME and ARTIFACTORY_API_KEY. Otherwise, it tries to extract missing values from a global config file. The default path of the config file (~/.artifactory_python.cfg) can be overwritten with the environment variable ARTIFACTORY_CONFIG_FILE. If no config file exists or if it does not contain an entry for the host, the username is set to 'anonymous' and the password/key to an empty string. In that case the host has to support anonymous access, when trying to authenticate.

Parameters

host (str) – hostname of Artifactory backend

Return type

Tuple[str, str]

Returns

username, password / API key / access token tuple

get_file()

Artifactory.get_file(src_path, dst_path, *, validate=False, verbose=False)

Get file from backend.

If the folder of dst_path does not exist, it is created.

If dst_path exists with a different checksum, it is overwritten, Otherwise, the operation is silently skipped.

If validate is set to True, a final check is performed to assert that src_path and dst_path have the same checksum. If it fails, dst_path is removed and an InterruptedError is raised.

Parameters
  • src_path (str) – path to file on backend

  • dst_path (str) – destination path to local file

  • validate (bool) – verify file was successfully retrieved from the backend

  • verbose (bool) – show debug messages

Return type

str

Returns

full path to local file

Raises

host

Artifactory.host

Host path.

join()

Artifactory.join(path, *paths)

Join to (sub-)path on backend.

Parameters
  • path (str) – first part of path

  • *paths – additional parts of path

Return type

str

Returns

path joined by Backend.sep

Raises

ValueError – if path contains invalid character or does not start with '/', or if joined path contains invalid character

ls()

Artifactory.ls(path='/', *, pattern=None, suppress_backend_errors=False)

List files on backend.

Returns a sorted list of tuples with path and version. If a full path (e.g. /sub/file.ext) is provided, all versions of the path are returned. If a sub-path (e.g. /sub/) is provided, all files that start with the sub-path are returned. When path is set to '/' a (possibly empty) list with all files on the backend is returned.

Parameters
  • path (str) – path or sub-path (if it ends with '/') on backend

  • pattern (Optional[str]) – if not None, return only files matching the pattern string, see fnmatch.fnmatch()

  • suppress_backend_errors (bool) – if set to True, silently catch errors raised on the backend and return an empty list

Return type

List[str]

Returns

list of tuples (path, version)

Raises
  • BackendError – if suppress_backend_errors is False and an error is raised on the backend, e.g. path does not exist

  • ValueError – if path does not start with '/' or does not match '[A-Za-z0-9/._-]+'

  • RuntimeError – if backend was not opened

move_file()

Artifactory.move_file(src_path, dst_path, *, validate=False, verbose=False)

Move file on backend.

If dst_path exists and has a different checksum, it is overwritten. Otherwise, src_path is removed and the operation silently skipped.

If validate is set to True, a final check is performed to assert that src_path and dst_path have the same checksum. If it fails, dst_path is removed and an InterruptedError is raised. To ensure src_path still exists in this case it is first copied and only removed when the check has successfully passed.

Parameters
  • src_path (str) – source path to file on backend

  • dst_path (str) – destination path to file on backend

  • validate (bool) – verify file was successfully moved

  • verbose (bool) – show debug messages

Raises
  • BackendError – if an error is raised on the backend

  • InterruptedError – if validation fails

  • ValueError – if src_path or dst_path does not start with '/', ends on '/', or does not match '[A-Za-z0-9/._-]+'

  • RuntimeError – if backend was not opened

open()

Artifactory.open()

Open connection to backend.

Repository must exist, use audbackend.backend.Base.create() to create it. Finally, use audbackend.backend.Base.close() to close the connection. Instead of explicitly calling audbackend.backend.Base.open() and audbackend.backend.Base.close() it is good practice to use a with statement.

Raises

BackendError – if an error is raised on the backend, e.g. repository does not exist

opened

Artifactory.opened

If a connection to the repository has been established.

owner()

Artifactory.owner(path)

Owner of file on backend.

If the owner of the file cannot be determined, an empty string is returned.

Parameters

path (str) – path to file on backend

Return type

str

Returns

owner

Raises
  • BackendError – if an error is raised on the backend, e.g. path does not exist

  • ValueError – if path does not start with '/', ends on '/', or does not match '[A-Za-z0-9/._-]+'

  • RuntimeError – if backend was not opened

path()

Artifactory.path(path)[source]

Convert to backend path.

This extends the relative path on the backend by host and repository, and returns an artifactory.ArtifactoryPath object.

Parameters

path (str) – path on backend

Return type

ArtifactoryPath

Returns

Artifactory path object

put_archive()

Artifactory.put_archive(src_root, dst_path, *, files=None, tmp_root=None, validate=False, verbose=False)

Create archive and put on backend.

The archive type is derived from the extension of dst_path. See audeer.create_archive() for supported extensions.

The operation is silently skipped, if an archive with the same checksum already exists on the backend.

If validate is set to True, a final check is performed to assert that the local archive and dst_path have the same checksum. If it fails, dst_path is removed and an InterruptedError is raised.

Parameters
  • src_root (str) – local root directory where files are located. By default, all files below src_root will be included into the archive. Use files to select specific files

  • dst_path (str) – path to archive on backend

  • files (Union[str, Sequence[str], None]) – file(s) to include into the archive. Must exist within src_root

  • tmp_root (Optional[str]) – directory under which archive is temporarily created. Defaults to temporary directory of system

  • validate (bool) – verify archive was successfully put on the backend

  • verbose (bool) – show debug messages

Raises

put_file()

Artifactory.put_file(src_path, dst_path, *, validate=False, verbose=False)

Put file on backend.

The operation is silently skipped, if a file with the same checksum already exists on the backend.

If validate is set to True, a final check is performed to assert that src_path and dst_path have the same checksum. If it fails, dst_path is removed and an InterruptedError is raised.

Parameters
  • src_path (str) – path to local file

  • dst_path (str) – path to file on backend

  • validate (bool) – verify file was successfully put on the backend

  • verbose (bool) – show debug messages

Raises

remove_file()

Artifactory.remove_file(path)

Remove file from backend.

Parameters

path (str) – path to file on backend

Raises
  • BackendError – if an error is raised on the backend, e.g. path does not exist

  • ValueError – if path does not start with '/', ends on '/', or does not match '[A-Za-z0-9/._-]+'

  • RuntimeError – if backend was not opened

repository

Artifactory.repository

Repository name.

sep

Artifactory.sep

File separator on backend.

Returns: file separator

split()

Artifactory.split(path)

Split path on backend into sub-path and basename.

Parameters

path (str) – path containing Backend.sep as separator

Return type

Tuple[str, str]

Returns

tuple containing (root, basename)

Raises

ValueError – if path does not start with '/' or does not match '[A-Za-z0-9/._-]+'