import asyncio
from osm_common.msgbase import MsgBase, MsgException
from time import sleep
+from http import HTTPStatus
__author__ = "Alfonso Tierno <alfonso.tiernosepulveda@telefonica.com>"
except MsgException:
raise
except Exception as e: # TODO refine
- raise MsgException(str(e))
+ raise MsgException(str(e), http_code=HTTPStatus.INTERNAL_SERVER_ERROR)
def disconnect(self):
for f in self.files_read.values():
yaml.safe_dump({key: msg}, self.files_write[topic], default_flow_style=True, width=20000)
self.files_write[topic].flush()
except Exception as e: # TODO refine
- raise MsgException(str(e))
+ raise MsgException(str(e), HTTPStatus.INTERNAL_SERVER_ERROR)
def read(self, topic, blocks=True):
"""
return None
sleep(2)
except Exception as e: # TODO refine
- raise MsgException(str(e))
+ raise MsgException(str(e), HTTPStatus.INTERNAL_SERVER_ERROR)
- async def aioread(self, topic, loop):
+ async def aioread(self, topic, loop=None, callback=None, aiocallback=None, **kwargs):
"""
Asyncio read from one or several topics. It blocks
:param topic: can be str: single topic; or str list: several topics
while True:
msg = self.read(topic, blocks=False)
if msg:
- return msg
+ if callback:
+ callback(*msg, **kwargs)
+ elif aiocallback:
+ await aiocallback(*msg, **kwargs)
+ else:
+ return msg
await asyncio.sleep(2, loop=loop)
except MsgException:
raise
except Exception as e: # TODO refine
- raise MsgException(str(e))
+ raise MsgException(str(e), HTTPStatus.INTERNAL_SERVER_ERROR)
async def aiowrite(self, topic, key, msg, loop=None):
"""