Source code for src.imagedata.transports

"""This module provides plugins for various image transports.

Standard plugins provides support for file, http/https and xnat transports.
"""

# Copyright (c) 2013-2025 Erling Andersen, Haukeland University Hospital, Bergen, Norway

import os
from urllib import parse


global __path__


[docs] class TransportPluginNotFound(Exception): pass
[docs] class RootIsNotDirectory(Exception): pass
[docs] class FunctionNotSupported(Exception): pass
[docs] def get_transporter_list(): from .. import plugins return plugins['transport'] if 'transport' in plugins else []
[docs] def Transport( scheme, netloc=None, root=None, mode='r', read_directory_only=False, opts=None): """Return plugin for given transport scheme.""" if opts is None: opts = {} if netloc is None and root is None: url_tuple = parse.urlsplit(scheme) scheme = url_tuple.scheme netloc = url_tuple.netloc try: opts['username'] = url_tuple.username except AttributeError: opts['username'] = None try: opts['password'] = url_tuple.password except AttributeError: opts['password'] = None root = url_tuple.path from .. import plugins if os.name == 'nt': if len(scheme) == 1: # Assume the scheme represents the Windows drive letter root = scheme[0] + ':' + root scheme = 'file' elif scheme == 'file': if root == '': root = netloc if 'transport' in plugins: for pname, ptype, pclass in plugins['transport']: if scheme in pclass.schemes: return pclass( root=root, netloc=netloc, mode=mode, read_directory_only=read_directory_only, opts=opts) raise TransportPluginNotFound("Plugin for transport scheme {} not found.".format(scheme))