Skip to content

Commit

Permalink
Merge pull request #331 from linode/proj/dc-specific-pricing
Browse files Browse the repository at this point in the history
project: DC-Specific Pricing
  • Loading branch information
lgarber-akamai committed Oct 2, 2023
2 parents 9915f6d + a9915d4 commit 9b0d360
Show file tree
Hide file tree
Showing 8 changed files with 174 additions and 11 deletions.
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ release: build
twine upload dist/*

@PHONEY: install
install: clean
install: clean requirements
python3 -m pip install .

@PHONEY: requirements
Expand Down
1 change: 1 addition & 0 deletions linode_api4/objects/linode.py
Original file line number Diff line number Diff line change
Expand Up @@ -232,6 +232,7 @@ class Type(Base):
"label": Property(),
"network_out": Property(),
"price": Property(),
"region_prices": Property(),
"addons": Property(),
"memory": Property(),
"transfer": Property(),
Expand Down
14 changes: 14 additions & 0 deletions test/fixtures/account_transfer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"quota": 471,
"used": 737373,
"billable": 0,

"region_transfers": [
{
"id": "ap-west",
"used": 1,
"quota": 5010,
"billable": 0
}
]
}
114 changes: 105 additions & 9 deletions test/fixtures/linode_types.json
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
{
"results": 4,
"pages": 1,
"page": 1,
"data": [
"results": 4,
"pages": 1,
"page": 1,
"data": [
{
"disk": 20480,
"memory": 1024,
Expand All @@ -12,7 +12,19 @@
"price": {
"hourly": 0.003,
"monthly": 2
}
},
"region_prices": [
{
"id": "ap-west",
"hourly": 0.02,
"monthly": 20
},
{
"id": "ap-northeast",
"hourly": 0.02,
"monthly": 20
}
]
}
},
"class": "nanode",
Expand All @@ -25,6 +37,18 @@
"hourly": 0.0075,
"monthly": 5
},
"region_prices": [
{
"id": "us-east",
"hourly": 0.02,
"monthly": 20
},
{
"id": "ap-northeast",
"hourly": 0.02,
"monthly": 20
}
],
"successor": null
},
{
Expand All @@ -36,7 +60,19 @@
"price": {
"hourly": 0.008,
"monthly": 5
}
},
"region_prices": [
{
"id": "ap-west",
"hourly": 0.02,
"monthly": 20
},
{
"id": "ap-northeast",
"hourly": 0.02,
"monthly": 20
}
]
}
},
"class": "highmem",
Expand All @@ -49,6 +85,18 @@
"hourly": 0.09,
"monthly": 60
},
"region_prices": [
{
"id": "us-east",
"hourly": 0.02,
"monthly": 20
},
{
"id": "ap-northeast",
"hourly": 0.02,
"monthly": 20
}
],
"successor": null
},
{
Expand All @@ -60,7 +108,19 @@
"price": {
"hourly": 0.004,
"monthly": 2.5
}
},
"region_prices": [
{
"id": "ap-west",
"hourly": 0.02,
"monthly": 20
},
{
"id": "ap-northeast",
"hourly": 0.02,
"monthly": 20
}
]
}
},
"class": "standard",
Expand All @@ -73,6 +133,18 @@
"hourly": 0.015,
"monthly": 10
},
"region_prices": [
{
"id": "us-east",
"hourly": 0.02,
"monthly": 20
},
{
"id": "ap-northeast",
"hourly": 0.02,
"monthly": 20
}
],
"successor": null
},
{
Expand All @@ -84,7 +156,19 @@
"price": {
"hourly": 0.008,
"monthly": 5
}
},
"region_prices": [
{
"id": "ap-west",
"hourly": 0.02,
"monthly": 20
},
{
"id": "ap-northeast",
"hourly": 0.02,
"monthly": 20
}
]
}
},
"class": "gpu",
Expand All @@ -97,7 +181,19 @@
"hourly": 0.03,
"monthly": 20
},
"region_prices": [
{
"id": "us-east",
"hourly": 0.02,
"monthly": 20
},
{
"id": "ap-northeast",
"hourly": 0.02,
"monthly": 20
}
],
"successor": null
}
]
}
}
19 changes: 18 additions & 1 deletion test/integration/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,24 @@
from linode_api4.linode_client import LinodeClient

ENV_TOKEN_NAME = "LINODE_TOKEN"
ENV_API_URL_NAME = "LINODE_API_URL"
ENV_API_CA_NAME = "LINODE_API_CA"
RUN_LONG_TESTS = "RUN_LONG_TESTS"


def get_token():
return os.environ.get(ENV_TOKEN_NAME, None)


def get_api_url():
return os.environ.get(ENV_API_URL_NAME, "https://api.linode.com/v4beta")


def get_api_ca_file():
result = os.environ.get(ENV_API_CA_NAME, None)
return result if result != "" else None


def run_long_tests():
return os.environ.get(RUN_LONG_TESTS, None)

Expand Down Expand Up @@ -71,7 +82,13 @@ def ssh_key_gen():
@pytest.fixture(scope="session")
def get_client():
token = get_token()
client = LinodeClient(token)
api_url = get_api_url()
api_ca_file = get_api_ca_file()
client = LinodeClient(
token,
base_url=api_url,
ca_path=api_ca_file,
)
return client


Expand Down
16 changes: 16 additions & 0 deletions test/integration/models/test_linode.py
Original file line number Diff line number Diff line change
Expand Up @@ -398,6 +398,22 @@ def test_get_linode_types(get_client):
assert "g6-nanode-1" in ids


def test_get_linode_types_overrides(get_client):
types = get_client.linode.types()

target_types = [
v
for v in types
if len(v.region_prices) > 0 and v.region_prices[0].hourly > 0
]

assert len(target_types) > 0

for linode_type in target_types:
assert linode_type.region_prices[0].hourly >= 0
assert linode_type.region_prices[0].monthly >= 0


def test_get_linode_type_by_id(get_client):
pytest.skip(
"Might need Type to match how other object models are behaving e.g. client.load(Type, 123)"
Expand Down
16 changes: 16 additions & 0 deletions test/unit/linode_client_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -476,6 +476,22 @@ def test_join_beta_program(self):
)
self.assertEqual(m.call_url, join_beta_url)

def test_account_transfer(self):
"""
Tests that payments can be retrieved
"""
transfer = self.client.account.transfer()

self.assertEqual(transfer.quota, 471)
self.assertEqual(transfer.used, 737373)
self.assertEqual(transfer.billable, 0)

self.assertEqual(len(transfer.region_transfers), 1)
self.assertEqual(transfer.region_transfers[0].id, "ap-west")
self.assertEqual(transfer.region_transfers[0].used, 1)
self.assertEqual(transfer.region_transfers[0].quota, 5010)
self.assertEqual(transfer.region_transfers[0].billable, 0)


class BetaProgramGroupTest(ClientBaseCase):
"""
Expand Down
3 changes: 3 additions & 0 deletions test/unit/objects/linode_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -533,6 +533,8 @@ def test_get_types(self):
self.assertIsNotNone(t.type_class)
self.assertIsNotNone(t.gpus)
self.assertIsNone(t.successor)
self.assertIsNotNone(t.region_prices)
self.assertIsNotNone(t.addons.backups.region_prices)

def test_get_type_by_id(self):
"""
Expand All @@ -546,6 +548,7 @@ def test_get_type_by_id(self):
self.assertEqual(t.label, "Linode 1024")
self.assertEqual(t.disk, 20480)
self.assertEqual(t.type_class, "nanode")
self.assertEqual(t.region_prices[0].id, "us-east")

def test_get_type_gpu(self):
"""
Expand Down

0 comments on commit 9b0d360

Please sign in to comment.