diff --git a/singlestoredb/management/cluster.py b/singlestoredb/management/cluster.py index 35428abd9..8fa6ae2c1 100644 --- a/singlestoredb/management/cluster.py +++ b/singlestoredb/management/cluster.py @@ -390,7 +390,7 @@ def create_cluster( :class:`Cluster` """ - if isinstance(region, Region): + if isinstance(region, Region) and region.id: region = region.id res = self._post( 'clusters', json=dict( diff --git a/singlestoredb/management/region.py b/singlestoredb/management/region.py index 546070e4b..7bc39a7ec 100644 --- a/singlestoredb/management/region.py +++ b/singlestoredb/management/region.py @@ -21,7 +21,10 @@ class Region(object): """ - def __init__(self, id: str, name: str, provider: str): + def __init__( + self, name: str, provider: str, id: Optional[str] = None, + region_name: Optional[str] = None, + ) -> None: """Use :attr:`WorkspaceManager.regions` instead.""" #: Unique ID of the region self.id = id @@ -32,6 +35,9 @@ def __init__(self, id: str, name: str, provider: str): #: Name of the cloud provider self.provider = provider + #: Name of the provider region + self.region_name = region_name + self._manager: Optional[Manager] = None def __str__(self) -> str: @@ -59,10 +65,14 @@ def from_dict(cls, obj: Dict[str, str], manager: Manager) -> 'Region': :class:`Region` """ + id = obj.get('regionID', None) + region_name = obj.get('regionName', None) + out = cls( - id=obj['regionID'], + id=id, name=obj['region'], provider=obj['provider'], + region_name=region_name, ) out._manager = manager return out diff --git a/singlestoredb/management/workspace.py b/singlestoredb/management/workspace.py index 3b6777bb8..adc66b209 100644 --- a/singlestoredb/management/workspace.py +++ b/singlestoredb/management/workspace.py @@ -1074,7 +1074,7 @@ def from_dict( try: region = [x for x in manager.regions if x.id == obj['regionID']][0] except IndexError: - region = Region(obj.get('regionID', ''), '', '') + region = Region('', '', obj.get('regionID', '')) out = cls( name=obj['name'], id=obj['workspaceGroupID'], @@ -1715,7 +1715,7 @@ def create_workspace_group( :class:`WorkspaceGroup` """ - if isinstance(region, Region): + if isinstance(region, Region) and region.id: region = region.id res = self._post( 'workspaceGroups', json=dict( diff --git a/singlestoredb/tests/test_management.py b/singlestoredb/tests/test_management.py index a2dc2d94f..6ea2a1289 100755 --- a/singlestoredb/tests/test_management.py +++ b/singlestoredb/tests/test_management.py @@ -1528,14 +1528,6 @@ def test_list_regions(self): providers = {x.provider for x in regions} assert 'Azure' in providers or 'GCP' in providers or 'AWS' in providers - # Verify region can be accessed by name or ID - region_by_name = regions[region.name] - region_by_id = regions[region.id] - assert region_by_name == region_by_id - assert region_by_name.id == region.id - assert region_by_name.name == region.name - assert region_by_name.provider == region.provider - def test_list_shared_tier_regions(self): """Test listing shared tier regions.""" regions = self.manager.list_shared_tier_regions() @@ -1547,22 +1539,14 @@ def test_list_shared_tier_regions(self): if regions: region = regions[0] assert isinstance(region, Region) - assert hasattr(region, 'id') assert hasattr(region, 'name') assert hasattr(region, 'provider') + assert hasattr(region, 'region_name') # Verify provider values providers = {x.provider for x in regions} assert any(p in providers for p in ['Azure', 'GCP', 'AWS']) - # Verify region can be accessed by name or ID - region_by_name = regions[region.name] - region_by_id = regions[region.id] - assert region_by_name == region_by_id - assert region_by_name.id == region.id - assert region_by_name.name == region.name - assert region_by_name.provider == region.provider - def test_str_repr(self): """Test string representation of regions.""" regions = self.manager.list_regions()