summaryrefslogtreecommitdiff
path: root/docker/api/buildkit/grpc.py
diff options
context:
space:
mode:
Diffstat (limited to 'docker/api/buildkit/grpc.py')
-rw-r--r--docker/api/buildkit/grpc.py33
1 files changed, 33 insertions, 0 deletions
diff --git a/docker/api/buildkit/grpc.py b/docker/api/buildkit/grpc.py
new file mode 100644
index 0000000..9ee640d
--- /dev/null
+++ b/docker/api/buildkit/grpc.py
@@ -0,0 +1,33 @@
+import grpclib.server
+
+
+class Handler(grpclib.server.Handler):
+ def __init__(self, headers, *args, **kwargs):
+ self.headers = headers
+ super(Handler, self).__init__(*args, **kwargs)
+
+ def accept(self, stream, headers, release_stream):
+ for k, v in self.headers.items():
+ headers.setdefault(k, v)
+
+
+class Server(grpclib.server.Server):
+ headers = {}
+
+ def add_headers(self, h):
+ self.headers.update(h)
+
+ def _protocol_factory(self):
+ self.__gc_step__()
+ handler = Handler(
+ self.headers, self._mapping, self._codec, loop=self._loop
+ )
+ self._handlers.add(handler)
+ return grpclib.server.H2Protocol(
+ handler, self._config, loop=self._loop
+ )
+
+
+class Attachable(object):
+ def register(self, grpc_server):
+ grpc_server._mapping.update(self.__mapping__())