-
Notifications
You must be signed in to change notification settings - Fork 12
Expand file tree
/
Copy path_long_term.py
More file actions
43 lines (31 loc) · 1.34 KB
/
_long_term.py
File metadata and controls
43 lines (31 loc) · 1.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
from dataclasses import dataclass
from dataclasses_json import Undefined, dataclass_json
LONG_TERM_PERIODS_ENDPOINT = '/long-term/periods'
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclass
class LongTermPeriod:
"""A long-term commitment period."""
code: str
name: str
is_enabled: bool
unit_name: str
unit_value: float
discount_percentage: float
class LongTermService:
"""A service for interacting with the long-term periods endpoints."""
def __init__(self, http_client) -> None:
self._http_client = http_client
def get_cluster_periods(self) -> list[LongTermPeriod]:
"""Get available long-term commitment periods for clusters.
:return: list of long-term period objects
:rtype: list[LongTermPeriod]
"""
periods = self._http_client.get(LONG_TERM_PERIODS_ENDPOINT + '/clusters').json()
return [LongTermPeriod.from_dict(p, infer_missing=True) for p in periods]
def get_instance_periods(self) -> list[LongTermPeriod]:
"""Get available long-term commitment periods for instances.
:return: list of long-term period objects
:rtype: list[LongTermPeriod]
"""
periods = self._http_client.get(LONG_TERM_PERIODS_ENDPOINT + '/instances').json()
return [LongTermPeriod.from_dict(p, infer_missing=True) for p in periods]