Source code for tesk.api.ga4gh.tes.service_info.service_info
"""Service info for TES API."""importjsonimportloggingfromtypingimportAny,OptionalfromfocaimportFocafrompydanticimportAnyUrlfromtesk.api.ga4gh.tes.modelsimport(Artifact,Organization,TesServiceInfo,TesServiceType,)fromtesk.exceptionsimportConfigNotFoundErrorfromtesk.utilsimportget_config_pathlogger=logging.getLogger(__name__)
[docs]classServiceInfo:"""Service info for TES API."""def__init__(self)->None:"""Initializes the BaseServiceInfoRequest class."""self.service_info:Optional[TesServiceInfo]=Noneself.config=Foca(config_file=get_config_path()).conf
[docs]defget_default_service_info(self)->TesServiceInfo:"""Get the default service info. if service info is not provided in the config, this method will return the default service info. Returns: TesServiceInfo: Default service info. """logger.warning("Service info not found in config. Using default service info.")returnTesServiceInfo(id="org.ga4gh.tes",name="TES",type=TesServiceType(group="org.ga4gh",artifact=Artifact.tes,version="1.1.0",),organization=Organization(name="my_organization",url=AnyUrl("https://example.com"),),version="1.0.0",)
[docs]defget_service_info_from_config(self)->TesServiceInfo:"""Returns service info from config. Returns: TesServiceInfo: Service info from config. Raises: ConfigNotFoundError: If custom config or part of it is not found in the config file. """ifnotself.config.custom:raiseConfigNotFoundError("Custom configuration not found.")service_info_data=self.config.custom.get("service_info")ifnotservice_info_data:raiseConfigNotFoundError("Service info not found in custom configuration.")try:service_info=TesServiceInfo(**service_info_data)exceptTypeErrorase:logging.error(f"Exception occurred: {e}")raiseConfigNotFoundError(f"Invalid service info format: {e}")fromNonereturnservice_info
[docs]defresponse(self)->dict[str,Any]:"""Returns serialized response for /service-info. Returns: dict: Serialized response. """ifself.service_infoisNone:try:self.service_info=self.get_service_info_from_config()exceptConfigNotFoundError:self.service_info=self.get_default_service_info()returndict(json.loads(self.service_info.json()))