Source code for openeo.rest.capabilities
from typing import Dict, List, Optional, Union
from openeo.internal.jupyter import render_component
from openeo.rest.models import federation_extension
from openeo.util import deep_get
from openeo.utils.version import ApiVersionException, ComparableVersion
__all__ = ["OpenEoCapabilities"]
[docs]
class OpenEoCapabilities:
"""Container of the openEO capabilities document of an openEO backend."""
def __init__(self, data: dict, url: Optional[str] = None):
self.capabilities = data
self.url = url
def get(self, key: str, default=None):
return self.capabilities.get(key, default)
def deep_get(self, *keys, default=None):
return deep_get(self.capabilities, *keys, default=default)
[docs]
def api_version(self) -> Union[str, None]:
"""Version number of the openEO API specification this back-end implements."""
if "api_version" in self.capabilities:
return self.capabilities.get("api_version")
else:
# Legacy/deprecated
return self.capabilities.get("version")
@property
def api_version_check(self) -> ComparableVersion:
"""Helper to easily check if the API version is at least or below some threshold version."""
api_version = self.api_version()
if not api_version:
raise ApiVersionException("No API version found")
return ComparableVersion(api_version)
[docs]
def supports_endpoint(self, path: str, method="GET") -> bool:
"""Check if backend supports given endpoint"""
return any(
endpoint.get("path") == path and method.upper() in endpoint.get("methods", [])
for endpoint in self.capabilities.get("endpoints", [])
)
[docs]
def currency(self) -> Union[str, None]:
"""Get default billing currency."""
return self.deep_get("billing", "currency", default=None)
[docs]
def list_plans(self) -> List[dict]:
"""List all billing plans."""
return self.deep_get("billing", "plans", default=[])
def _repr_html_(self):
return render_component("capabilities", data=self.capabilities, parameters={"url": self.url})
[docs]
def ext_federation_backend_details(self) -> Union[Dict[str, dict], None]:
"""
Lists all back-ends (with details, such as URL) that are part of the federation
if this backend acts as a federated backend,
as specified in the openEO Federation Extension.
Returns ``None`` otherwise.
.. versionadded:: 0.38.0
"""
return federation_extension.get_backend_details(data=self.capabilities)