|
20 | 20 | from .spec.td import ThingDescription |
21 | 21 | from .decorators import tag |
22 | 22 | from .sockets import Sockets |
| 23 | +from .event import Event |
23 | 24 |
|
24 | 25 | from .view.builder import property_of, action_from |
25 | 26 |
|
@@ -55,6 +56,8 @@ def __init__( |
55 | 56 |
|
56 | 57 | self.extensions = {} |
57 | 58 |
|
| 59 | + self.events = {} |
| 60 | + |
58 | 61 | self.views = [] |
59 | 62 | self._property_views = {} |
60 | 63 | self._action_views = {} |
@@ -163,6 +166,9 @@ def init_app(self, app): |
163 | 166 | self.sockets = Sockets(app) |
164 | 167 | self._create_base_sockets() |
165 | 168 |
|
| 169 | + # Create base events |
| 170 | + self.add_event("logging") |
| 171 | + |
166 | 172 | def _create_base_routes(self): |
167 | 173 | # Add root representation |
168 | 174 | self.add_view(RootView, "/", endpoint="root") |
@@ -319,6 +325,28 @@ def _register_view(self, app, view, *urls, endpoint=None, **kwargs): |
319 | 325 | self.thing_description.property(flask_rules, view) |
320 | 326 | self._property_views[view.endpoint] = view |
321 | 327 |
|
| 328 | + # Event stuff |
| 329 | + def add_event(self, name, schema=None): |
| 330 | + # TODO: Handle schema |
| 331 | + # TODO: Add view for event, returning list of Event.events |
| 332 | + self.events[name] = Event(name, schema=schema) |
| 333 | + self.thing_description.event(self.events[name]) |
| 334 | + |
| 335 | + def emit(self, event_type: str, data: dict): |
| 336 | + """ |
| 337 | + Find a matching event type if one exists, and emit some data to it |
| 338 | + """ |
| 339 | + event_object = self.events[event_type] |
| 340 | + self.message(event_object, data) |
| 341 | + |
| 342 | + def message(self, event: Event, data: dict): |
| 343 | + """ |
| 344 | + Emit an event object to all subscribers |
| 345 | + """ |
| 346 | + event_response = event.emit(data) |
| 347 | + for sub in self.subscribers: |
| 348 | + sub.emit(event_response) |
| 349 | + |
322 | 350 | # Utilities |
323 | 351 |
|
324 | 352 | def url_for(self, view, **values): |
|
0 commit comments