aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/python/Twisted/py3/twisted/trial/_dist/workertrial.py
diff options
context:
space:
mode:
authorshmel1k <shmel1k@ydb.tech>2023-11-26 18:16:14 +0300
committershmel1k <shmel1k@ydb.tech>2023-11-26 18:43:30 +0300
commitb8cf9e88f4c5c64d9406af533d8948deb050d695 (patch)
tree218eb61fb3c3b96ec08b4d8cdfef383104a87d63 /contrib/python/Twisted/py3/twisted/trial/_dist/workertrial.py
parent523f645a83a0ec97a0332dbc3863bb354c92a328 (diff)
downloadydb-b8cf9e88f4c5c64d9406af533d8948deb050d695.tar.gz
add kikimr_configure
Diffstat (limited to 'contrib/python/Twisted/py3/twisted/trial/_dist/workertrial.py')
-rw-r--r--contrib/python/Twisted/py3/twisted/trial/_dist/workertrial.py93
1 files changed, 93 insertions, 0 deletions
diff --git a/contrib/python/Twisted/py3/twisted/trial/_dist/workertrial.py b/contrib/python/Twisted/py3/twisted/trial/_dist/workertrial.py
new file mode 100644
index 0000000000..847dbc51a6
--- /dev/null
+++ b/contrib/python/Twisted/py3/twisted/trial/_dist/workertrial.py
@@ -0,0 +1,93 @@
+# -*- test-case-name: twisted.trial._dist.test.test_workertrial -*-
+#
+# Copyright (c) Twisted Matrix Laboratories.
+# See LICENSE for details.
+
+"""
+Implementation of C{AMP} worker commands, and main executable entry point for
+the workers.
+
+@since: 12.3
+"""
+
+import errno
+import os
+import sys
+
+from twisted.internet.protocol import FileWrapper
+from twisted.python.log import startLoggingWithObserver, textFromEventDict
+from twisted.trial._dist import _WORKER_AMP_STDIN, _WORKER_AMP_STDOUT
+from twisted.trial._dist.options import WorkerOptions
+
+
+class WorkerLogObserver:
+ """
+ A log observer that forward its output to a C{AMP} protocol.
+ """
+
+ def __init__(self, protocol):
+ """
+ @param protocol: a connected C{AMP} protocol instance.
+ @type protocol: C{AMP}
+ """
+ self.protocol = protocol
+
+ def emit(self, eventDict):
+ """
+ Produce a log output.
+ """
+ from twisted.trial._dist import managercommands
+
+ text = textFromEventDict(eventDict)
+ if text is None:
+ return
+ self.protocol.callRemote(managercommands.TestWrite, out=text)
+
+
+def main(_fdopen=os.fdopen):
+ """
+ Main function to be run if __name__ == "__main__".
+
+ @param _fdopen: If specified, the function to use in place of C{os.fdopen}.
+ @type _fdopen: C{callable}
+ """
+ config = WorkerOptions()
+ config.parseOptions()
+
+ from twisted.trial._dist.worker import WorkerProtocol
+
+ workerProtocol = WorkerProtocol(config["force-gc"])
+
+ protocolIn = _fdopen(_WORKER_AMP_STDIN, "rb")
+ protocolOut = _fdopen(_WORKER_AMP_STDOUT, "wb")
+ workerProtocol.makeConnection(FileWrapper(protocolOut))
+
+ observer = WorkerLogObserver(workerProtocol)
+ startLoggingWithObserver(observer.emit, False)
+
+ while True:
+ try:
+ r = protocolIn.read(1)
+ except OSError as e:
+ if e.args[0] == errno.EINTR:
+ continue
+ else:
+ raise
+ if r == b"":
+ break
+ else:
+ workerProtocol.dataReceived(r)
+ protocolOut.flush()
+ sys.stdout.flush()
+ sys.stderr.flush()
+
+ if config.tracer:
+ sys.settrace(None)
+ results = config.tracer.results()
+ results.write_results(
+ show_missing=True, summary=False, coverdir=config.coverdir().path
+ )
+
+
+if __name__ == "__main__":
+ main()