Path: blob/main/singlestoredb/management/region.py
469 views
#!/usr/bin/env python1"""SingleStoreDB Cluster Management."""2from typing import Dict3from typing import Optional45from .manager import Manager6from .utils import NamedList7from .utils import vars_to_str8910class Region(object):11"""12Cluster region information.1314This object is not directly instantiated. It is used in results15of ``WorkspaceManager`` API calls.1617See Also18--------19:attr:`WorkspaceManager.regions`2021"""2223def __init__(24self, name: str, provider: str, id: Optional[str] = None,25region_name: Optional[str] = None,26) -> None:27"""Use :attr:`WorkspaceManager.regions` instead."""28#: Unique ID of the region29self.id = id3031#: Name of the region32self.name = name3334#: Name of the cloud provider35self.provider = provider3637#: Name of the provider region38self.region_name = region_name3940self._manager: Optional[Manager] = None4142def __str__(self) -> str:43"""Return string representation."""44return vars_to_str(self)4546def __repr__(self) -> str:47"""Return string representation."""48return str(self)4950@classmethod51def from_dict(cls, obj: Dict[str, str], manager: Manager) -> 'Region':52"""53Convert dictionary to a ``Region`` object.5455Parameters56----------57obj : dict58Key-value pairs to retrieve region information from59manager : WorkspaceManager, optional60The WorkspaceManager the Region belongs to6162Returns63-------64:class:`Region`6566"""67id = obj.get('regionID', None)68region_name = obj.get('regionName', None)6970out = cls(71id=id,72name=obj['region'],73provider=obj['provider'],74region_name=region_name,75)76out._manager = manager77return out787980class RegionManager(Manager):81"""82SingleStoreDB region manager.8384This class should be instantiated using :func:`singlestoredb.manage_regions`.8586Parameters87----------88access_token : str, optional89The API key or other access token for the workspace management API90version : str, optional91Version of the API to use92base_url : str, optional93Base URL of the workspace management API9495See Also96--------97:func:`singlestoredb.manage_regions`98"""99100#: Object type101obj_type = 'region'102103def list_regions(self) -> NamedList[Region]:104"""105List all available regions.106107Returns108-------109NamedList[Region]110List of available regions111112Raises113------114ManagementError115If there is an error getting the regions116"""117res = self._get('regions')118return NamedList(119[Region.from_dict(item, self) for item in res.json()],120)121122def list_shared_tier_regions(self) -> NamedList[Region]:123"""124List regions that support shared tier workspaces.125126Returns127-------128NamedList[Region]129List of regions that support shared tier workspaces130131Raises132------133ManagementError134If there is an error getting the regions135"""136res = self._get('regions/sharedtier')137return NamedList(138[Region.from_dict(item, self) for item in res.json()],139)140141142def manage_regions(143access_token: Optional[str] = None,144version: Optional[str] = None,145base_url: Optional[str] = None,146) -> RegionManager:147"""148Retrieve a SingleStoreDB region manager.149150Parameters151----------152access_token : str, optional153The API key or other access token for the workspace management API154version : str, optional155Version of the API to use156base_url : str, optional157Base URL of the workspace management API158159Returns160-------161:class:`RegionManager`162163"""164return RegionManager(165access_token=access_token,166version=version,167base_url=base_url,168)169170171