Import AITURK IDE 1.0.0-beta.1 from Hermes 63279301; preserve MIT license
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
"""Seam for the server.py @method handler split (mechanical move).
|
||||
|
||||
server.py's ~130 JSON-RPC handlers close over its module globals
|
||||
(``_sessions``, ``_ok``, ``_err``, config helpers, ...). To move them
|
||||
out of the 19K-line module without rewriting a single handler body,
|
||||
each ``methods_*`` module defines its handlers under a local
|
||||
:class:`HandlerRegistry` and server.py calls :meth:`HandlerRegistry.install`
|
||||
at the end of its own import, once every global the handlers close over
|
||||
exists. ``install()`` rebinds each handler's ``__globals__`` to
|
||||
server.py's namespace with ``types.FunctionType``, so handler bodies
|
||||
stay byte-identical and ``global X`` statements inside handlers keep
|
||||
mutating server.py state exactly as before the split.
|
||||
|
||||
No import cycle: ``methods_*`` modules never import server at module
|
||||
level — server imports them and passes itself to ``register()``.
|
||||
"""
|
||||
|
||||
import types
|
||||
|
||||
|
||||
class HandlerRegistry:
|
||||
"""Deferred @method registrar used by the methods_* split modules."""
|
||||
|
||||
def __init__(self) -> None:
|
||||
self._pending: list[tuple[str, types.FunctionType]] = []
|
||||
|
||||
def method(self, name: str):
|
||||
"""Drop-in for server.py's ``@method`` decorator (defers registration)."""
|
||||
|
||||
def dec(fn):
|
||||
self._pending.append((name, fn))
|
||||
return fn
|
||||
|
||||
return dec
|
||||
|
||||
def profile_scoped(self, fn):
|
||||
"""Drop-in for server.py's ``@_profile_scoped`` (applied at install)."""
|
||||
fn._hermes_profile_scoped = True
|
||||
return fn
|
||||
|
||||
def install(self, server) -> None:
|
||||
"""Rebind pending handlers onto ``server``'s globals and register them."""
|
||||
g = vars(server)
|
||||
for name, fn in self._pending:
|
||||
real = types.FunctionType(
|
||||
fn.__code__, g, fn.__name__, fn.__defaults__, fn.__closure__
|
||||
)
|
||||
real.__kwdefaults__ = fn.__kwdefaults__
|
||||
real.__doc__ = fn.__doc__
|
||||
real.__dict__.update(fn.__dict__)
|
||||
if getattr(fn, "_hermes_profile_scoped", False):
|
||||
real = server._profile_scoped(real)
|
||||
server._methods[name] = real
|
||||
Reference in New Issue
Block a user