Repository: napari/napari

Issue:
Notfications (and ErrorNotification) don't include all attributes in REPR
## 🐛 Bug

There are sporadic failures in CI with notification manager, though those are hard to debug do to incomplete repr:

```
  >           assert len(notification_manager.records) == 2
  E           assert 1 == 2
  E            +  where 1 = len([<ErrorNotification blocked=False handled=False native=None source=None sources=[] type=error>])
  E            +    where [<ErrorNotification blocked=False handled=False native=None source=None sources=[] type=error>] = <napari.utils.notifications.NotificationManager object at 0x1276015e0>.records
```

In particular the error messages are missing.

This is due to the `Event` superclass only including properties:


https://github.com/napari/napari/blob/609fd9f4cc54832c752d3691d7f16e15fbf86517/napari/utils/events/event.py#L180-L183 

## To Reproduce

Steps to reproduce the behavior:

```python
from napari.utils.notifications import ErrorNotification
ErrorNotification("I'm not in repr")
```
```
<ErrorNotification blocked=False handled=False native=None source=None sources=[] type=error>
```

Additionally, the formatting should likely use `!r` in case one of the properly is a string so that it's properly quoted, 
above should for example be `type="error"` and not `type=error`.


Discussion:

Resolving patch:
diff --git a/napari/utils/events/event.py b/napari/utils/events/event.py
--- a/napari/utils/events/event.py
+++ b/napari/utils/events/event.py
@@ -183,7 +183,7 @@ def __repr__(self) -> str:
                     continue
                 attr = getattr(self, name)
 
-                attrs.append(f"{name}={attr}")
+                attrs.append(f"{name}={attr!r}")
             return "<{} {}>".format(self.__class__.__name__, " ".join(attrs))
         finally:
             _event_repr_depth -= 1
diff --git a/napari/utils/notifications.py b/napari/utils/notifications.py
--- a/napari/utils/notifications.py
+++ b/napari/utils/notifications.py
@@ -83,12 +83,20 @@ def __init__(
     ):
         self.severity = NotificationSeverity(severity)
         super().__init__(type=str(self.severity).lower(), **kwargs)
-        self.message = message
+        self._message = message
         self.actions = actions
 
         # let's store when the object was created;
         self.date = datetime.now()
 
+    @property
+    def message(self):
+        return self._message
+
+    @message.setter
+    def message(self, value):
+        self._message = value
+
     @classmethod
     def from_exception(cls, exc: BaseException, **kwargs) -> Notification:
         return ErrorNotification(exc, **kwargs)


Test patch:
diff --git a/napari/utils/_tests/test_notification_manager.py b/napari/utils/_tests/test_notification_manager.py
--- a/napari/utils/_tests/test_notification_manager.py
+++ b/napari/utils/_tests/test_notification_manager.py
@@ -28,6 +28,12 @@ class PurposefulException(Exception):
     pass
 
 
+def test_notification_repr_has_message():
+    assert "='this is the message'" in repr(
+        Notification("this is the message")
+    )
+
+
 def test_notification_manager_no_gui():
     """
     Direct test of the notification manager.