Skip to content

Commit c88d8ed

Browse files
authored
Merge pull request #362 from linode/proj/dc-get-well
Merge proj/dc-get-well into main
2 parents d5ae5f5 + 8bf3b19 commit c88d8ed

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
@@ -656,3 +656,19 @@ class AccountBetaProgram(Base):
656656
"ended": Property(is_datetime=True),
657657
"enrolled": Property(is_datetime=True),
658658
}
659+
660+
661+
class AccountAvailability(Base):
662+
"""
663+
The resources information in a region which are NOT available to an account.
664+
665+
API doc: TBD
666+
"""
667+
668+
api_endpoint = "/account/availability/{region}"
669+
id_attribute = "region"
670+
671+
properties = {
672+
"region": Property(identifier=True),
673+
"unavailable": Property(),
674+
}
+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
@@ -514,6 +514,18 @@ def test_account_transfer(self):
514514
self.assertEqual(transfer.region_transfers[0].quota, 5010)
515515
self.assertEqual(transfer.region_transfers[0].billable, 0)
516516

517+
def test_account_availabilities(self):
518+
"""
519+
Tests that account availabilities can be retrieved
520+
"""
521+
availabilities = self.client.account.availabilities()
522+
523+
self.assertEqual(len(availabilities), 11)
524+
availability = availabilities[0]
525+
526+
self.assertEqual(availability.region, "ap-west")
527+
self.assertEqual(availability.unavailable, [])
528+
517529

518530
class BetaProgramGroupTest(ClientBaseCase):
519531
"""

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)