def test_get_metadata_and_deserialize(self): dummy_event = DummyEvent().init({"prop_1": 1, "prop_2": "hello"}) dummy_event.source("you") dummy_event.target("me!") raw_dict = dummy_event.get_metadata() deserialized = Event.deserialize(raw_dict) self.assertEqual(dummy_event, deserialized)
async def trigger_event(request): """ :param request: :return: """ from msa.core.event import Event new_event = Event.deserialize(request.payload) get_supervisor().fire_event(new_event) return {"text": f"Event {new_event} sucessfully triggered."}
async def get_events(self): """ Fetches any events that have not been dispersed to clients. :async: :return: List[msa.core.event.Event] """ response = await self.client.get("/signals/events") if not response: return if response.status != "success": raise Exception(response.raw) # load disburse event disburse_event = Event.deserialize(response.json) # load sent events deserialized_events = [] for raw_event in disburse_event.data["events"]: new_event = Event.deserialize(raw_event) deserialized_events.append(new_event) return deserialized_events
async def connect(self): async with aiohttp.ClientSession() as session: self.client_session = session async with session.ws_connect(self.base_url) as ws: self.ws = ws self.loop.create_task(self.interact()) async def prop(): await self.propagate(self.propagate_queue) self.loop.create_task(prop()) async for msg in ws: if msg.type == aiohttp.WSMsgType.TEXT: data = json.loads(msg.data) if data["type"] == "response": response = ApiResponse(data["payload"]) elif data["type"] == "event_propagate": new_event = Event.deserialize(data["payload"]) new_event.network_propagate = False if ( new_event.propagate_target == self.client_id or new_event.propagate_target == "all" ): self.propagate_queue.put_nowait(new_event) continue elif data["type"] == "empty_response": pass elif data["type"] == "notify_id": self.client_id = data["payload"]["id"] continue elif data["type"] == "error": raise Exception(f"Bad request:\n{data['message']}") else: raise Exception("Bad payload response:", data) self.queue.put_nowait(response)
def test_deserialize_event_type_does_not_exist(self): with self.assertRaises(Exception): Event.deserialize( {"event_type": "__this_event_type_does_not_exist"})
def test_deserialize_no_event_type(self): with self.assertRaises(Exception): Event.deserialize({})