Source code for pyicat_plus.client.bliss

import os
from typing import List
from typing import Optional

from blissdata.beacon.files import read_config

from .main import IcatClient


[docs] def get_icat_client( timeout: Optional[float] = None, metadata_urls: Optional[List[str]] = None ) -> IcatClient: """ Create and return an instance of `IcatClient` using configuration retrieved from a Beacon server. It is determined from the `BEACON_HOST` environment variable. If the configuration is unavailable, a `RuntimeError` is raised. :param timeout: optional timeout for the ICAT client operations. :param metadata_urls: URLs of the ActiveMQ message brokers to be used for creating ICAT datasets from a directory with metadata. If provided, these URLs will override the configuration retrieved from Beacon. :returns: the ICAT Client. """ beacon_host = os.environ.setdefault("BEACON_HOST", "id00:25000") url = f"beacon://{beacon_host}/__init__.yml" config = read_config(url).get("icat_servers") if not config: raise RuntimeError( f"Beacon host {beacon_host} does not provide ICAT configuration" ) return IcatClient( metadata_urls=metadata_urls if metadata_urls else config["metadata_urls"], elogbook_url=config["elogbook_url"], elogbook_token=config["elogbook_token"], feedback_timeout=timeout, add_files_urls=config["metadata_urls"], )