Skip to content

Commit 31689da

Browse files
authored
feat: add method for getting all instance of specific region (#163)
1 parent 8795dc2 commit 31689da

File tree

2 files changed

+16
-7
lines changed

2 files changed

+16
-7
lines changed

src/firebolt/model/instance_type.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ class InstanceType(FireboltBaseModel):
1919
# optional
2020
is_spot_available: Optional[bool]
2121
cpu_virtual_cores_count: Optional[int]
22-
memory_size_bytes: Optional[str]
23-
storage_size_bytes: Optional[str]
22+
memory_size_bytes: Optional[int]
23+
storage_size_bytes: Optional[int]
2424
price_per_hour_cents: Optional[float]
2525
create_time: Optional[datetime]
2626
last_update_time: Optional[datetime]

src/firebolt/service/instance_type.py

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,23 +42,32 @@ def instance_types_by_name(self) -> Dict[InstanceTypeLookup, InstanceType]:
4242
for i in self.instance_types
4343
}
4444

45-
def cheapest_instance_in_region(self, region: Region) -> Optional[InstanceType]:
46-
# Get only awailable instances in region
45+
def get_instance_types_per_region(self, region: Region) -> List[InstanceType]:
46+
"""List of instance types available on Firebolt in specified region."""
47+
4748
response = self.client.get(
4849
url=INSTANCE_TYPES_URL,
4950
params={"page.first": 5000, "filter.id_region_id_eq": region.key.region_id},
5051
)
51-
instance_types = [
52+
53+
instance_list = [
5254
InstanceType.parse_obj(i["node"]) for i in response.json()["edges"]
5355
]
56+
5457
# Filter out instances without storage
55-
instance_list = [
58+
return [
5659
i
57-
for i in instance_types
60+
for i in instance_list
5861
if i.storage_size_bytes and i.storage_size_bytes != "0"
5962
]
63+
64+
def cheapest_instance_in_region(self, region: Region) -> Optional[InstanceType]:
65+
# Get only available instances in region
66+
instance_list = self.get_instance_types_per_region(region)
67+
6068
if not instance_list:
6169
return None
70+
6271
cheapest = min(
6372
instance_list,
6473
key=lambda x: x.price_per_hour_cents

0 commit comments

Comments
 (0)