Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
singlestore-labs
GitHub Repository: singlestore-labs/singlestoredb-python
Path: blob/main/singlestoredb/management/region.py
469 views
1
#!/usr/bin/env python
2
"""SingleStoreDB Cluster Management."""
3
from typing import Dict
4
from typing import Optional
5
6
from .manager import Manager
7
from .utils import NamedList
8
from .utils import vars_to_str
9
10
11
class Region(object):
12
"""
13
Cluster region information.
14
15
This object is not directly instantiated. It is used in results
16
of ``WorkspaceManager`` API calls.
17
18
See Also
19
--------
20
:attr:`WorkspaceManager.regions`
21
22
"""
23
24
def __init__(
25
self, name: str, provider: str, id: Optional[str] = None,
26
region_name: Optional[str] = None,
27
) -> None:
28
"""Use :attr:`WorkspaceManager.regions` instead."""
29
#: Unique ID of the region
30
self.id = id
31
32
#: Name of the region
33
self.name = name
34
35
#: Name of the cloud provider
36
self.provider = provider
37
38
#: Name of the provider region
39
self.region_name = region_name
40
41
self._manager: Optional[Manager] = None
42
43
def __str__(self) -> str:
44
"""Return string representation."""
45
return vars_to_str(self)
46
47
def __repr__(self) -> str:
48
"""Return string representation."""
49
return str(self)
50
51
@classmethod
52
def from_dict(cls, obj: Dict[str, str], manager: Manager) -> 'Region':
53
"""
54
Convert dictionary to a ``Region`` object.
55
56
Parameters
57
----------
58
obj : dict
59
Key-value pairs to retrieve region information from
60
manager : WorkspaceManager, optional
61
The WorkspaceManager the Region belongs to
62
63
Returns
64
-------
65
:class:`Region`
66
67
"""
68
id = obj.get('regionID', None)
69
region_name = obj.get('regionName', None)
70
71
out = cls(
72
id=id,
73
name=obj['region'],
74
provider=obj['provider'],
75
region_name=region_name,
76
)
77
out._manager = manager
78
return out
79
80
81
class RegionManager(Manager):
82
"""
83
SingleStoreDB region manager.
84
85
This class should be instantiated using :func:`singlestoredb.manage_regions`.
86
87
Parameters
88
----------
89
access_token : str, optional
90
The API key or other access token for the workspace management API
91
version : str, optional
92
Version of the API to use
93
base_url : str, optional
94
Base URL of the workspace management API
95
96
See Also
97
--------
98
:func:`singlestoredb.manage_regions`
99
"""
100
101
#: Object type
102
obj_type = 'region'
103
104
def list_regions(self) -> NamedList[Region]:
105
"""
106
List all available regions.
107
108
Returns
109
-------
110
NamedList[Region]
111
List of available regions
112
113
Raises
114
------
115
ManagementError
116
If there is an error getting the regions
117
"""
118
res = self._get('regions')
119
return NamedList(
120
[Region.from_dict(item, self) for item in res.json()],
121
)
122
123
def list_shared_tier_regions(self) -> NamedList[Region]:
124
"""
125
List regions that support shared tier workspaces.
126
127
Returns
128
-------
129
NamedList[Region]
130
List of regions that support shared tier workspaces
131
132
Raises
133
------
134
ManagementError
135
If there is an error getting the regions
136
"""
137
res = self._get('regions/sharedtier')
138
return NamedList(
139
[Region.from_dict(item, self) for item in res.json()],
140
)
141
142
143
def manage_regions(
144
access_token: Optional[str] = None,
145
version: Optional[str] = None,
146
base_url: Optional[str] = None,
147
) -> RegionManager:
148
"""
149
Retrieve a SingleStoreDB region manager.
150
151
Parameters
152
----------
153
access_token : str, optional
154
The API key or other access token for the workspace management API
155
version : str, optional
156
Version of the API to use
157
base_url : str, optional
158
Base URL of the workspace management API
159
160
Returns
161
-------
162
:class:`RegionManager`
163
164
"""
165
return RegionManager(
166
access_token=access_token,
167
version=version,
168
base_url=base_url,
169
)
170
171