Skip to content

Commit 8ed9190

Browse files
authored
Merge pull request #572 from linode/dev
Release v5.33.1
2 parents d3e5927 + de7cde1 commit 8ed9190

File tree

13 files changed

+166
-42
lines changed

13 files changed

+166
-42
lines changed

.github/workflows/e2e-test.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,7 @@ jobs:
232232
steps:
233233
- name: Notify Slack
234234
id: main_message
235-
uses: slackapi/[email protected].0
235+
uses: slackapi/[email protected].1
236236
with:
237237
method: chat.postMessage
238238
token: ${{ secrets.SLACK_BOT_TOKEN }}
@@ -264,7 +264,7 @@ jobs:
264264
265265
- name: Test summary thread
266266
if: success()
267-
uses: slackapi/[email protected].0
267+
uses: slackapi/[email protected].1
268268
with:
269269
method: chat.postMessage
270270
token: ${{ secrets.SLACK_BOT_TOKEN }}

.github/workflows/nightly-smoke-tests.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ jobs:
4545

4646
- name: Notify Slack
4747
if: always() && github.repository == 'linode/linode_api4-python'
48-
uses: slackapi/[email protected].0
48+
uses: slackapi/[email protected].1
4949
with:
5050
method: chat.postMessage
5151
token: ${{ secrets.SLACK_BOT_TOKEN }}

.github/workflows/release-notify-slack.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ jobs:
1111
steps:
1212
- name: Notify Slack - Main Message
1313
id: main_message
14-
uses: slackapi/[email protected].0
14+
uses: slackapi/[email protected].1
1515
with:
1616
method: chat.postMessage
1717
token: ${{ secrets.SLACK_BOT_TOKEN }}

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ lint: build
5858
# TEST_CASE: Optional, specify a test case (e.g. 'test_image_replication')
5959
# TEST_ARGS: Optional, additional arguments for pytest (e.g. '-v' for verbose mode)
6060

61-
TEST_COMMAND = $(if $(TEST_SUITE),$(if $(filter $(TEST_SUITE),linode_client login_client),$(TEST_SUITE),models/$(TEST_SUITE)))
61+
TEST_COMMAND = $(if $(TEST_SUITE),$(if $(filter $(TEST_SUITE),linode_client login_client filters),$(TEST_SUITE),models/$(TEST_SUITE)))
6262

6363
.PHONY: test-int
6464
test-int:

linode_api4/groups/monitor.py

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -62,32 +62,28 @@ def dashboards(
6262
)
6363

6464
def services(
65-
self, *filters, service_type: Optional[str] = None
66-
) -> list[MonitorService]:
65+
self,
66+
*filters,
67+
) -> PaginatedList:
6768
"""
6869
Lists services supported by ACLP.
6970
supported_services = client.monitor.services()
70-
service_details = client.monitor.services(service_type="dbaas")
71+
service_details = client.monitor.load(MonitorService, "dbaas")
7172
7273
.. note:: This endpoint is in beta. This will only function if base_url is set to `https://api.linode.com/v4beta`.
7374
7475
API Documentation: https://techdocs.akamai.com/linode-api/reference/get-monitor-services
7576
API Documentation: https://techdocs.akamai.com/linode-api/reference/get-monitor-services-for-service-type
7677
77-
:param service_type: The service type to get details for.
78-
:type service_type: Optional[str]
7978
:param filters: Any number of filters to apply to this query.
8079
See :doc:`Filtering Collections</linode_api4/objects/filtering>`
8180
for more details on filtering.
8281
83-
:returns: Lists monitor services by a given service_type
82+
:returns: Lists monitor services
8483
:rtype: PaginatedList of the Services
8584
"""
86-
endpoint = (
87-
f"/monitor/services/{service_type}"
88-
if service_type
89-
else "/monitor/services"
90-
)
85+
endpoint = "/monitor/services"
86+
9187
return self.client._get_and_filter(
9288
MonitorService,
9389
*filters,

linode_api4/objects/monitor.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -157,16 +157,19 @@ class MonitorDashboard(Base):
157157
}
158158

159159

160-
@dataclass
161-
class MonitorService(JSONObject):
160+
class MonitorService(Base):
162161
"""
163162
Represents a single service type.
164163
API Documentation: https://techdocs.akamai.com/linode-api/reference/get-monitor-services
165164
166165
"""
167166

168-
service_type: ServiceType = ""
169-
label: str = ""
167+
api_endpoint = "/monitor/services/{service_type}"
168+
id_attribute = "service_type"
169+
properties = {
170+
"service_type": Property(ServiceType),
171+
"label": Property(),
172+
}
170173

171174

172175
@dataclass
Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
11
{
2-
"data": [
3-
{
4-
"label": "Databases",
5-
"service_type": "dbaas"
6-
}
7-
],
8-
"page": 1,
9-
"pages": 1,
10-
"results": 1
11-
}
2+
"service_type": "dbaas",
3+
"label": "Databases",
4+
"alert": {
5+
"polling_interval_seconds": [
6+
300
7+
],
8+
"evaluation_period_seconds": [
9+
300
10+
],
11+
"scope": [
12+
"entity"
13+
]
14+
}
15+
}

test/integration/filters/fixtures.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
from test.integration.conftest import get_region
2+
from test.integration.helpers import get_test_label
3+
4+
import pytest
5+
6+
7+
@pytest.fixture(scope="package")
8+
def domain_instance(test_linode_client):
9+
client = test_linode_client
10+
11+
domain_addr = get_test_label(5) + "-example.com"
12+
soa_email = "[email protected]"
13+
14+
domain = client.domain_create(domain=domain_addr, soa_email=soa_email)
15+
16+
yield domain
17+
18+
domain.delete()
19+
20+
21+
@pytest.fixture(scope="package")
22+
def lke_cluster_instance(test_linode_client):
23+
node_type = test_linode_client.linode.types()[1] # g6-standard-1
24+
version = test_linode_client.lke.versions()[0]
25+
26+
region = get_region(
27+
test_linode_client, {"Kubernetes", "LA Disk Encryption"}
28+
)
29+
30+
node_pools = test_linode_client.lke.node_pool(node_type, 3)
31+
label = get_test_label() + "_cluster"
32+
33+
cluster = test_linode_client.lke.cluster_create(
34+
region, label, node_pools, version
35+
)
36+
37+
yield cluster
38+
39+
cluster.delete()
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
from test.integration.filters.fixtures import ( # noqa: F401
2+
domain_instance,
3+
lke_cluster_instance,
4+
)
5+
6+
from linode_api4.objects import (
7+
DatabaseEngine,
8+
DatabaseType,
9+
Domain,
10+
Firewall,
11+
Image,
12+
LKECluster,
13+
Type,
14+
)
15+
16+
17+
def test_database_type_model_filter(test_linode_client):
18+
client = test_linode_client
19+
20+
db_disk = client.database.types()[0].disk
21+
22+
filtered_db_type = client.database.types(DatabaseType.disk == db_disk)
23+
24+
assert db_disk == filtered_db_type[0].disk
25+
26+
27+
def test_database_engine_model_filter(test_linode_client):
28+
client = test_linode_client
29+
30+
engine = "mysql"
31+
32+
filtered_db_engine = client.database.engines(
33+
DatabaseEngine.engine == engine
34+
)
35+
36+
assert len(client.database.engines()) > len(filtered_db_engine)
37+
38+
39+
def test_domain_model_filter(test_linode_client, domain_instance):
40+
client = test_linode_client
41+
42+
filtered_domain = client.domains(Domain.domain == domain_instance.domain)
43+
44+
assert domain_instance.id == filtered_domain[0].id
45+
46+
47+
def test_image_model_filter(test_linode_client):
48+
client = test_linode_client
49+
50+
filtered_images = client.images(Image.label.contains("Debian"))
51+
52+
assert len(client.images()) > len(filtered_images)
53+
54+
55+
def test_linode_type_model_filter(test_linode_client):
56+
client = test_linode_client
57+
58+
filtered_types = client.linode.types(Type.label.contains("Linode"))
59+
60+
assert len(filtered_types) > 0
61+
assert "Linode" in filtered_types[0].label
62+
63+
64+
def test_lke_cluster_model_filter(test_linode_client, lke_cluster_instance):
65+
client = test_linode_client
66+
67+
filtered_cluster = client.lke.clusters(
68+
LKECluster.label.contains(lke_cluster_instance.label)
69+
)
70+
71+
assert filtered_cluster[0].id == lke_cluster_instance.id
72+
73+
74+
def test_networking_firewall_model_filter(
75+
test_linode_client, e2e_test_firewall
76+
):
77+
client = test_linode_client
78+
79+
filtered_firewall = client.networking.firewalls(
80+
Firewall.label.contains(e2e_test_firewall.label)
81+
)
82+
83+
assert len(filtered_firewall) > 0
84+
assert e2e_test_firewall.label in filtered_firewall[0].label

test/integration/models/account/test_account.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import time
22
from datetime import datetime
33
from test.integration.conftest import get_region
4-
from test.integration.helpers import get_test_label
4+
from test.integration.helpers import get_test_label, retry_sending_request
55

66
import pytest
77

@@ -37,7 +37,7 @@ def test_get_account(test_linode_client):
3737

3838
def test_get_login(test_linode_client):
3939
client = test_linode_client
40-
login = client.load(Login(client, "", {}), "")
40+
login = retry_sending_request(3, client.load, Login(client, "", {}), "")
4141

4242
updated_time = int(time.mktime(getattr(login, "_last_updated").timetuple()))
4343

0 commit comments

Comments
 (0)