Coverage for netbox/events.py: 69%

32 statements  

« prev     ^ index     » next       coverage.py v7.15.2, created at 2026-10-10 18:35 +0000

1from dataclasses import dataclass 

2 

3from netbox.registry import registry 

4from utilities.choices import Choice 

5 

6EVENT_TYPE_KIND_INFO = 'info' 

7EVENT_TYPE_KIND_SUCCESS = 'success' 

8EVENT_TYPE_KIND_WARNING = 'warning' 

9EVENT_TYPE_KIND_DANGER = 'danger' 

10 

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) 

21 

22 

23def get_event_type(name): 

24 return registry['event_types'].get(name) 

25 

26 

27def get_event_text(name): 

28 if event := registry['event_types'].get(name): 

29 return event.text 

30 return '' 

31 

32 

33def get_event_type_choices(): 

34 return [ 

35 Choice(event.name, event.text) for event in registry['event_types'].values() 

36 ] 

37 

38 

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. 

44 

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 

55 

56 def __str__(self): 

57 return self.text 

58 

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 

63 

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) 

72 

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)