Skip to content

Commit 8bf3b19

Browse files
authored
new: Support getting account availability info (#354)
* add account availbility * update id to dc * replace dc with region
1 parent fdcc03f commit 8bf3b19

File tree

6 files changed

+114
-0
lines changed

6 files changed

+114
-0
lines changed

linode_api4/groups/account.py

+13
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from linode_api4.groups import Group
55
from linode_api4.objects import (
66
Account,
7+
AccountAvailability,
78
AccountBetaProgram,
89
AccountSettings,
910
BetaProgram,
@@ -483,3 +484,15 @@ def join_beta_program(self, beta: Union[str, BetaProgram]):
483484
)
484485

485486
return True
487+
488+
def availabilities(self, *filters):
489+
"""
490+
Returns a list of all available regions and the resources which are NOT available
491+
to the account.
492+
493+
API doc: TBD
494+
495+
:returns: a list of region availability information.
496+
:rtype: PaginatedList of AccountAvailability
497+
"""
498+
return self.client._get_and_filter(AccountAvailability, *filters)

linode_api4/objects/account.py

+16
Original file line numberDiff line numberDiff line change
@@ -654,3 +654,19 @@ class AccountBetaProgram(Base):
654654
"ended": Property(is_datetime=True),
655655
"enrolled": Property(is_datetime=True),
656656
}
657+
658+
659+
class AccountAvailability(Base):
660+
"""
661+
The resources information in a region which are NOT available to an account.
662+
663+
API doc: TBD
664+
"""
665+
666+
api_endpoint = "/account/availability/{region}"
667+
id_attribute = "region"
668+
669+
properties = {
670+
"region": Property(identifier=True),
671+
"unavailable": Property(),
672+
}
+51
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
{
2+
"data": [
3+
{
4+
"region": "ap-west",
5+
"unavailable": []
6+
},
7+
{
8+
"region": "ca-central",
9+
"unavailable": []
10+
},
11+
{
12+
"region": "ap-southeast",
13+
"unavailable": []
14+
},
15+
{
16+
"region": "us-central",
17+
"unavailable": []
18+
},
19+
{
20+
"region": "us-west",
21+
"unavailable": []
22+
},
23+
{
24+
"region": "us-southeast",
25+
"unavailable": []
26+
},
27+
{
28+
"region": "us-east",
29+
"unavailable": []
30+
},
31+
{
32+
"region": "eu-west",
33+
"unavailable": []
34+
},
35+
{
36+
"region": "ap-south",
37+
"unavailable": []
38+
},
39+
{
40+
"region": "eu-central",
41+
"unavailable": []
42+
},
43+
{
44+
"region": "ap-northeast",
45+
"unavailable": []
46+
}
47+
],
48+
"page": 1,
49+
"pages": 1,
50+
"results": 11
51+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"region": "us-east",
3+
"unavailable": []
4+
}

test/unit/linode_client_test.py

+12
Original file line numberDiff line numberDiff line change
@@ -492,6 +492,18 @@ def test_account_transfer(self):
492492
self.assertEqual(transfer.region_transfers[0].quota, 5010)
493493
self.assertEqual(transfer.region_transfers[0].billable, 0)
494494

495+
def test_account_availabilities(self):
496+
"""
497+
Tests that account availabilities can be retrieved
498+
"""
499+
availabilities = self.client.account.availabilities()
500+
501+
self.assertEqual(len(availabilities), 11)
502+
availability = availabilities[0]
503+
504+
self.assertEqual(availability.region, "ap-west")
505+
self.assertEqual(availability.unavailable, [])
506+
495507

496508
class BetaProgramGroupTest(ClientBaseCase):
497509
"""

test/unit/objects/account_test.py

+18
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
from linode_api4.objects import (
55
Account,
6+
AccountAvailability,
67
AccountBetaProgram,
78
AccountSettings,
89
Database,
@@ -260,3 +261,20 @@ def test_account_beta_program_api_get(self):
260261
self.assertEqual(beta.ended, datetime(2018, 1, 2, 3, 4, 5))
261262

262263
self.assertEqual(m.call_url, account_beta_url)
264+
265+
266+
class AccountAvailabilityTest(ClientBaseCase):
267+
"""
268+
Test methods of the AccountAvailability
269+
"""
270+
271+
def test_account_availability_api_get(self):
272+
region_id = "us-east"
273+
account_availability_url = "/account/availability/{}".format(region_id)
274+
275+
with self.mock_get(account_availability_url) as m:
276+
availability = AccountAvailability(self.client, region_id)
277+
self.assertEqual(availability.region, region_id)
278+
self.assertEqual(availability.unavailable, [])
279+
280+
self.assertEqual(m.call_url, account_availability_url)

0 commit comments

Comments
 (0)