Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 34 additions & 1 deletion linode_api4/objects/monitor.py
Original file line number Diff line number Diff line change
Expand Up @@ -428,6 +428,38 @@ class ChannelContent(JSONObject):
# Other channel types like 'webhook', 'slack' could be added here as Optional fields.


@dataclass
class EmailDetails(JSONObject):
"""
Represents email-specific details for an alert channel.
"""
usernames: Optional[List[str]] = None
recipient_type: Optional[str] = None


@dataclass
class ChannelDetails(JSONObject):
"""
Represents the details block for an AlertChannel, which varies by channel type.
"""
email: Optional[EmailDetails] = None


@dataclass
class AlertsReference(JSONObject):
"""
Represents a reference to alerts associated with an alert channel.

Copy link

Copilot AI Feb 13, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There is a trailing whitespace after the opening docstring quotes. This should be removed to maintain consistent documentation formatting.

Suggested change

Copilot uses AI. Check for mistakes.
Fields:
- url: str - API URL to fetch the alerts for this channel
- type: str - Type identifier (e.g., 'alerts-definitions')
- alert_count: int - Number of alerts associated with this channel
"""
url: str = ""
_type: str = field(default="", metadata={"json_key": "type"})
alert_count: int = 0


class AlertChannel(Base):
"""
Represents an alert channel used to deliver notifications when alerts
Expand All @@ -450,7 +482,8 @@ class AlertChannel(Base):
"label": Property(),
"type": Property(),
"channel_type": Property(),
"alerts": Property(mutable=False, json_object=Alerts),
"details": Property(mutable=False, json_object=ChannelDetails),
"alerts": Property(mutable=False, json_object=AlertsReference),
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: can you align the naming in python-sdk and linodego? It will be helpful for future maintenance. I remember in linodego you name the struct as AlertInfo but here is object class is AlertsReference. Can you just pick one naming and use it in both repo?

"content": Property(mutable=False, json_object=ChannelContent),
"created": Property(is_datetime=True),
"updated": Property(is_datetime=True),
Expand Down
2 changes: 1 addition & 1 deletion test/integration/models/monitor/test_monitor.py
Original file line number Diff line number Diff line change
Expand Up @@ -227,7 +227,7 @@ def wait_for_alert_ready(alert_id, service_type: str):
interval = initial_timeout
alert = client.load(AlertDefinition, alert_id, service_type)
while (
getattr(alert, "status", None) == "in progress"
getattr(alert, "status", None) == "provisioning"
Copy link

Copilot AI Feb 13, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The status value has been changed from "in progress" to "provisioning". This change aligns with the PR description indicating an API structure change. However, consider whether an enum for status values should be introduced to avoid hard-coded strings. This would make the code more maintainable and prevent typos.

Copilot uses AI. Check for mistakes.
and (time.time() - start) < timeout
):
time.sleep(interval)
Expand Down
Loading