Skip to content

Commit

Permalink
Fix #563 api.server accepts http_config.uri_map (#564)
Browse files Browse the repository at this point in the history
- rename pykern_ attrs to pykern_api_ for consistency
  • Loading branch information
robnagler authored Feb 7, 2025
1 parent a1ec745 commit 176bbf9
Showing 1 changed file with 19 additions and 13 deletions.
32 changes: 19 additions & 13 deletions pykern/api/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -108,11 +108,12 @@ def _api_map():
rv[a.name] = a
return rv

h = http_config.copy()
h = http_config.copy().pksetdefault(uri_map=[])
self.loop = loop
self.api_map = _api_map()
self.attr_classes = attr_classes
h.uri_map = ((h.api_uri, _ServerHandler, PKDict(server=self)),)
h.uri_map = h.uri_map[:]
h.uri_map.append((h.api_uri, _ServerHandler, PKDict(server=self)))
self.api_uri = h.pkdel("api_uri")
h.log_function = self._log_end
self._ws_id = 0
Expand All @@ -124,7 +125,7 @@ def handle_get(self, handler):
def handle_open(self, handler):
try:
self._ws_id += 1
handler.pykern_context.ws_id = self._ws_id
handler.pykern_api_context.ws_id = self._ws_id
return _ServerConnection(self, handler, ws_id=self._ws_id)
except Exception as e:
pkdlog("exception={} stack={}", e, pkdexc())
Expand All @@ -140,7 +141,7 @@ def _add(key, value):

f = ""
a = []
if x := getattr(handler, "pykern_context", None):
if x := getattr(handler, "pykern_api_context", None):
_add("error", x.pkdel("error"))
_add("ws_id", x.get("ws_id"))
if fmt:
Expand All @@ -149,7 +150,10 @@ def _add(key, value):
self.loop.http_log(handler, which, f, a)

def _log_end(self, handler, *args, **kwargs):
self._log(handler, "ws-end")
if isinstance(handler, _ServerHandler):
self._log(handler, "ws-end")
else:
self.loop.http_log(handler)


class _ServerConnection:
Expand Down Expand Up @@ -221,36 +225,38 @@ def log(self, which, call=None, fmt="", args=None):
class _ServerHandler(tornado.websocket.WebSocketHandler):
def initialize(self, server):
# Since part of a global space, need to prefix
self.pykern_server = server
self.pykern_context = PKDict()
self.pykern_connection = None
self.pykern_api_server = server
self.pykern_api_context = PKDict()
self.pykern_api_connection = None

async def get(self, *args, **kwargs):
try:
self.pykern_server.handle_get(self)
self.pykern_api_server.handle_get(self)
return await super().get(*args, **kwargs)
except Exception as e:
pkdlog("exception={} stack={}", e, pkdexc())

async def on_message(self, msg):
try:
# WebSocketHandler only allows one on_message at a time
pykern.pkasyncio.create_task(self.pykern_connection.handle_on_message(msg))
pykern.pkasyncio.create_task(
self.pykern_api_connection.handle_on_message(msg)
)
except Exception as e:
pkdlog("exception={} stack={}", e, pkdexc())

def on_close(self):
try:
if not (c := self.pykern_connection):
if not (c := self.pykern_api_connection):
return
self.pykern_connection = None
self.pykern_api_connection = None
c.handle_on_close()
except Exception as e:
pkdlog("exception={} stack={}", e, pkdexc())

def open(self):
try:
self.pykern_connection = self.pykern_server.handle_open(self)
self.pykern_api_connection = self.pykern_api_server.handle_open(self)
except Exception as e:
pkdlog("exception={} stack={}", e, pkdexc())

Expand Down

0 comments on commit 176bbf9

Please sign in to comment.