from sanic import views, response
from merkava.channels import Channel
[docs]class BaseChannelView(views.HTTPMethodView):
[docs] def set_channel(self, request, channel_name):
self.channel = Channel(
channel_name=channel_name,
data_path=request.app.config.get('path', './'),
)
# service.add_task(self.channel.listen())
[docs] def dispatch_request(self, request, *args, **kwargs):
self.set_channel(request, kwargs.get('channel'))
return super().dispatch_request(request, *args, **kwargs)
[docs]class ChannelView(BaseChannelView):
[docs] async def post(self, request, channel, id=None):
# TODO:
# - make the CRUD operations async/await
status, result = self.channel.create(request.json)
return response.json({'result': result}, status=status)
[docs] async def get(self, request, channel, id):
# TODO:
# - make the CRUD operations async/await
status, result = self.channel.retrieve(id)
return response.json(result, status=status)
[docs] async def patch(self, request, channel, id):
# TODO:
# - make the CRUD operations async/await
status, result = self.channel.update(id, request.json)
return response.json(result, status=status)
[docs] async def delete(self, request, channel, id):
# TODO:
# - make the CRUD operations async/await
status, result = self.channel.delete(id)
return response.json(None, status=status)
[docs] async def put(self, request, channel, id):
# TODO:
# - make the CRUD operations async/await
status, result = self.channel.restore(id)
return response.json(result, status=status)
[docs]class RecentChannelView(BaseChannelView):
[docs] async def get(self, request, channel, num=None):
if not num:
num = 5
num = int(num)
result = self.channel.recent(int(num))
return response.json(result)