Renaming Connection
This commit is contained in:
@@ -38,7 +38,14 @@ log = logging.getLogger('kapow')
|
|||||||
CONNECTIONS = {}
|
CONNECTIONS = {}
|
||||||
|
|
||||||
|
|
||||||
class ConnectionHandler:
|
class Connection:
|
||||||
|
"""
|
||||||
|
Manages the lifecycle of a kapow connection.
|
||||||
|
|
||||||
|
Behaves like a memory for the "fields" available in HTTP
|
||||||
|
connections.
|
||||||
|
|
||||||
|
"""
|
||||||
def __init__(self, request):
|
def __init__(self, request):
|
||||||
self._stream = None
|
self._stream = None
|
||||||
self._body = io.BytesIO()
|
self._body = io.BytesIO()
|
||||||
@@ -49,6 +56,7 @@ class ConnectionHandler:
|
|||||||
self.request = request
|
self.request = request
|
||||||
|
|
||||||
async def get(self, key):
|
async def get(self, key):
|
||||||
|
"""Get the content of the field `key`."""
|
||||||
res = urlparse(key)
|
res = urlparse(key)
|
||||||
|
|
||||||
def nrd(n):
|
def nrd(n):
|
||||||
@@ -91,6 +99,7 @@ class ConnectionHandler:
|
|||||||
raise ValueError('Unknown path')
|
raise ValueError('Unknown path')
|
||||||
|
|
||||||
async def set(self, key, content):
|
async def set(self, key, content):
|
||||||
|
"""Set the field `key` with the value in `content`."""
|
||||||
res = urlparse(key)
|
res = urlparse(key)
|
||||||
|
|
||||||
def nrd(n):
|
def nrd(n):
|
||||||
@@ -122,10 +131,12 @@ class ConnectionHandler:
|
|||||||
else:
|
else:
|
||||||
raise ValueError(f'Unknown path {res.path!r}')
|
raise ValueError(f'Unknown path {res.path!r}')
|
||||||
|
|
||||||
async def append(self, key, value):
|
async def append(self, key, content):
|
||||||
|
"""Append to field `key` the value in `content`."""
|
||||||
raise NotImplementedError()
|
raise NotImplementedError()
|
||||||
|
|
||||||
async def build_response(self):
|
async def build_response(self):
|
||||||
|
"""Return the appropriate aiohttp.web.*Response."""
|
||||||
if self._stream is None:
|
if self._stream is None:
|
||||||
response = web.Response(body=self._body.getvalue(),
|
response = web.Response(body=self._body.getvalue(),
|
||||||
status=self._status,
|
status=self._status,
|
||||||
@@ -138,7 +149,7 @@ class ConnectionHandler:
|
|||||||
return self._stream
|
return self._stream
|
||||||
|
|
||||||
|
|
||||||
async def get_resource(request):
|
async def get_field(request):
|
||||||
id = request.match_info["id"]
|
id = request.match_info["id"]
|
||||||
resource = request.match_info["resource"]
|
resource = request.match_info["resource"]
|
||||||
|
|
||||||
@@ -165,7 +176,7 @@ async def get_resource(request):
|
|||||||
return response
|
return response
|
||||||
|
|
||||||
|
|
||||||
async def set_resource(request):
|
async def set_field(request):
|
||||||
id = request.match_info["id"]
|
id = request.match_info["id"]
|
||||||
resource = request.match_info["resource"]
|
resource = request.match_info["resource"]
|
||||||
|
|
||||||
@@ -185,7 +196,7 @@ async def set_resource(request):
|
|||||||
return response
|
return response
|
||||||
|
|
||||||
|
|
||||||
async def append_resource(request):
|
async def append_field(request):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
@@ -197,7 +208,7 @@ async def append_resource(request):
|
|||||||
def handle_route(entrypoint, command):
|
def handle_route(entrypoint, command):
|
||||||
async def _handle(request):
|
async def _handle(request):
|
||||||
id = "CONN_" + str(uuid4()).replace('-', '_')
|
id = "CONN_" + str(uuid4()).replace('-', '_')
|
||||||
connection = CONNECTIONS[id] = ConnectionHandler(request)
|
connection = CONNECTIONS[id] = Connection(request)
|
||||||
|
|
||||||
executable, *params = shlex.split(entrypoint)
|
executable, *params = shlex.split(entrypoint)
|
||||||
args = ' '.join([executable] + [shlex.quote(token) for token in params] + [shlex.quote(command)])
|
args = ' '.join([executable] + [shlex.quote(token) for token in params] + [shlex.quote(command)])
|
||||||
@@ -288,9 +299,9 @@ def main():
|
|||||||
web.get('/kapow/routes', get_routes),
|
web.get('/kapow/routes', get_routes),
|
||||||
web.post('/kapow/routes', create_route),
|
web.post('/kapow/routes', create_route),
|
||||||
web.delete('/kapow/routes/{id}', delete_route),
|
web.delete('/kapow/routes/{id}', delete_route),
|
||||||
web.get('/kapow/connections/{id}/{resource:.*}', get_resource),
|
web.get('/kapow/connections/{id}/{resource:.*}', get_field),
|
||||||
# web.post('/kapow/connections/{id}/{resource:.*}', append_resource),
|
# web.post('/kapow/connections/{id}/{resource:.*}', append_resource),
|
||||||
web.put('/kapow/connections/{id}/{resource:.*}', set_resource),
|
web.put('/kapow/connections/{id}/{resource:.*}', set_field),
|
||||||
])
|
])
|
||||||
app.on_startup.append(start_background_tasks)
|
app.on_startup.append(start_background_tasks)
|
||||||
web.run_app(app)
|
web.run_app(app)
|
||||||
|
|||||||
Reference in New Issue
Block a user