aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/python/Twisted/py3/twisted/words/tap.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/words/tap.py
parent523f645a83a0ec97a0332dbc3863bb354c92a328 (diff)
downloadydb-b8cf9e88f4c5c64d9406af533d8948deb050d695.tar.gz
add kikimr_configure
Diffstat (limited to 'contrib/python/Twisted/py3/twisted/words/tap.py')
-rw-r--r--contrib/python/Twisted/py3/twisted/words/tap.py89
1 files changed, 89 insertions, 0 deletions
diff --git a/contrib/python/Twisted/py3/twisted/words/tap.py b/contrib/python/Twisted/py3/twisted/words/tap.py
new file mode 100644
index 0000000000..d83db71b76
--- /dev/null
+++ b/contrib/python/Twisted/py3/twisted/words/tap.py
@@ -0,0 +1,89 @@
+# -*- test-case-name: twisted.words.test.test_tap -*-
+# Copyright (c) Twisted Matrix Laboratories.
+# See LICENSE for details.
+"""
+Shiny new words service maker
+"""
+
+import socket
+import sys
+from typing import List, Optional, Sequence
+
+from twisted import plugin
+from twisted.application import strports
+from twisted.application.service import MultiService
+from twisted.cred import checkers, credentials, portal, strcred
+from twisted.python import usage
+from twisted.words import iwords, service
+
+
+class Options(usage.Options, strcred.AuthOptionMixin):
+ supportedInterfaces = [credentials.IUsernamePassword]
+ optParameters: List[Sequence[Optional[str]]] = [
+ (
+ "hostname",
+ None,
+ socket.gethostname(),
+ "Name of this server; purely an informative",
+ )
+ ]
+
+ compData = usage.Completions(multiUse=["group"])
+
+ interfacePlugins = {}
+ plg = None
+ for plg in plugin.getPlugins(iwords.IProtocolPlugin):
+ assert plg.name not in interfacePlugins
+ interfacePlugins[plg.name] = plg
+ optParameters.append(
+ (
+ plg.name + "-port",
+ None,
+ None,
+ "strports description of the port to bind for the "
+ + plg.name
+ + " server",
+ )
+ )
+ del plg
+
+ def __init__(self, *a, **kw):
+ usage.Options.__init__(self, *a, **kw)
+ self["groups"] = []
+
+ def opt_group(self, name):
+ """Specify a group which should exist"""
+ self["groups"].append(name.decode(sys.stdin.encoding))
+
+ def opt_passwd(self, filename):
+ """
+ Name of a passwd-style file. (This is for
+ backwards-compatibility only; you should use the --auth
+ command instead.)
+ """
+ self.addChecker(checkers.FilePasswordDB(filename))
+
+
+def makeService(config):
+ credCheckers = config.get("credCheckers", [])
+ wordsRealm = service.InMemoryWordsRealm(config["hostname"])
+ wordsPortal = portal.Portal(wordsRealm, credCheckers)
+
+ msvc = MultiService()
+
+ # XXX Attribute lookup on config is kind of bad - hrm.
+ for plgName in config.interfacePlugins:
+ port = config.get(plgName + "-port")
+ if port is not None:
+ factory = config.interfacePlugins[plgName].getFactory(
+ wordsRealm, wordsPortal
+ )
+ svc = strports.service(port, factory)
+ svc.setServiceParent(msvc)
+
+ # This is bogus. createGroup is async. makeService must be
+ # allowed to return a Deferred or some crap.
+ for g in config["groups"]:
+ wordsRealm.createGroup(g)
+
+ return msvc