Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion singlestoredb/management/cluster.py
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down
14 changes: 12 additions & 2 deletions singlestoredb/management/region.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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:
Expand Down Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions singlestoredb/management/workspace.py
Original file line number Diff line number Diff line change
Expand Up @@ -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', '<unknown>'), '<unknown>', '<unknown>')
region = Region('<unknown>', '<unknown>', obj.get('regionID', '<unknown>'))
out = cls(
name=obj['name'],
id=obj['workspaceGroupID'],
Expand Down Expand Up @@ -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(
Expand Down
18 changes: 1 addition & 17 deletions singlestoredb/tests/test_management.py
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand All @@ -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()
Expand Down