[docs]classService:"""Provides a simple to use api to access a bucketfs service. Attributes: buckets: lists all available buckets. """
[docs]def__init__(self,url:str,credentials:Mapping[str,Mapping[str,str]]|None=None,verify:bool|str=True,service_name:Optional[str]=None):"""Create a new Service instance. Args: url: Url of the bucketfs service, e.g. `http(s)://127.0.0.1:2580`. credentials: A mapping containing credentials (username and password) for buckets. E.g. {"bucket1": { "username": "foo", "password": "bar" }} verify: Either a boolean, in which case it controls whether we verify the server's TLS certificate, or a string, in which case it must be a path to a CA bundle to use. Defaults to ``True``. service_name: Optional name of the bucketfs service. """self._url=_parse_service_url(url)self._authenticator=defaultdict(lambda:{"username":"r","password":"read"},credentialsifcredentialsisnotNoneelse{},)self._verify=verifyself._service_name=service_name
@propertydefbuckets(self)->MutableMapping[str,Bucket]:"""List all available buckets."""url=_build_url(service_url=self._url)response=requests.get(url,verify=self._verify)try:LOGGER.info(f"Retrieving bucket list from {url}")response.raise_for_status()exceptHTTPErrorasex:raiseBucketFsError(f"Couldn't list of all buckets from: {self._url}")fromexbuckets=_lines(response)return{name:Bucket(name=name,service=self._url,username=self._authenticator[name]["username"],password=self._authenticator[name]["password"],service_name=self._service_name,verify=self._verify)fornameinbuckets}def__str__(self)->str:returnf"Service<{self._url}>"def__iter__(self)->Iterator[str]:yield fromself.bucketsdef__getitem__(self,item:str)->Bucket:returnself.buckets[item]