Coverage for netbox/events.py: 69%
32 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-10 18:35 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-10 18:35 +0000
1from dataclasses import dataclass
3from netbox.registry import registry
4from utilities.choices import Choice
6EVENT_TYPE_KIND_INFO = 'info'
7EVENT_TYPE_KIND_SUCCESS = 'success'
8EVENT_TYPE_KIND_WARNING = 'warning'
9EVENT_TYPE_KIND_DANGER = 'danger'
11__all__ = (
12 'EVENT_TYPE_KIND_DANGER',
13 'EVENT_TYPE_KIND_INFO',
14 'EVENT_TYPE_KIND_SUCCESS',
15 'EVENT_TYPE_KIND_WARNING',
16 'EventType',
17 'get_event_text',
18 'get_event_type',
19 'get_event_type_choices',
20)
23def get_event_type(name):
24 return registry['event_types'].get(name)
27def get_event_text(name):
28 if event := registry['event_types'].get(name):
29 return event.text
30 return ''
33def get_event_type_choices():
34 return [
35 Choice(event.name, event.text) for event in registry['event_types'].values()
36 ]
39@dataclass
40class EventType:
41 """
42 A type of event which can occur in NetBox. Event rules can be defined to automatically
43 perform some action in response to an event.
45 Args:
46 name: The unique name under which the event is registered.
47 text: The human-friendly event name. This should support translation.
48 kind: The event's classification (info, success, warning, or danger). The default type is info.
49 destructive: Indicates that the associated object was destroyed as a result of the event (default: False).
50 """
51 name: str
52 text: str
53 kind: str = EVENT_TYPE_KIND_INFO
54 destructive: bool = False
56 def __str__(self):
57 return self.text
59 def register(self):
60 if self.name in registry['event_types']: 60 ↛ 61line 60 didn't jump to line 61 because the condition on line 60 was never true
61 raise Exception(f"An event type named {self.name} has already been registered!")
62 registry['event_types'][self.name] = self
64 @property
65 def color(self):
66 return {
67 EVENT_TYPE_KIND_INFO: 'blue',
68 EVENT_TYPE_KIND_SUCCESS: 'green',
69 EVENT_TYPE_KIND_WARNING: 'orange',
70 EVENT_TYPE_KIND_DANGER: 'red',
71 }.get(self.kind)
73 @property
74 def icon(self):
75 return {
76 EVENT_TYPE_KIND_INFO: 'mdi mdi-information',
77 EVENT_TYPE_KIND_SUCCESS: 'mdi mdi-check-circle',
78 EVENT_TYPE_KIND_WARNING: 'mdi mdi-alert-box',
79 EVENT_TYPE_KIND_DANGER: 'mdi mdi-alert-octagon',
80 }.get(self.kind)