diff options
| author | Douglas Bagnall <douglas.bagnall@catalyst.net.nz> | 2022-08-12 16:38:59 +1200 |
|---|---|---|
| committer | Douglas Bagnall <dbagnall@samba.org> | 2022-09-06 21:12:36 +0000 |
| commit | 26b86bc57e85280a9fc9aba26a49a16859c91b78 (patch) | |
| tree | ba4c9e335c9824cab00ffd1db886292a7949ddfa /python | |
| parent | c824ad8dcb9222a75c7bdf756f605b840fb68a00 (diff) | |
| download | samba-26b86bc57e85280a9fc9aba26a49a16859c91b78.tar.gz samba-26b86bc57e85280a9fc9aba26a49a16859c91b78.tar.bz2 samba-26b86bc57e85280a9fc9aba26a49a16859c91b78.zip | |
samba-tool dns: add a wrapper for better error messages
This will help turn simple common errors into CommandError messages.
At this stage, no messages are intercepted.
Signed-off-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
Diffstat (limited to 'python')
| -rw-r--r-- | python/samba/netcmd/dns.py | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/python/samba/netcmd/dns.py b/python/samba/netcmd/dns.py index 7c4d3f9bc6a..f3a5915b17e 100644 --- a/python/samba/netcmd/dns.py +++ b/python/samba/netcmd/dns.py @@ -56,6 +56,44 @@ def dns_connect(server, lp, creds): return dns_conn +class DnsConnWrapper: + """A wrapper around a dnsserver.dnsserver connection that makes it + harder not to report friendly messages. + """ + + default_messages = { + } + + def __init__(self, server, lp, creds): + self.dns_conn = dns_connect(server, lp, creds) + + def __getattr__(self, name): + attr = getattr(self.dns_conn, name) + if name not in { + "DnssrvComplexOperation2", + "DnssrvEnumRecords2", + "DnssrvOperation2", + "DnssrvQuery2", + "DnssrvUpdateRecord2"}: + return attr + + def f(*args, messages={}): + try: + return attr(*args) + except WERRORError as e: + werr, errstr = e.args + if werr in messages: + if werr is None: + # None overrides a default message, leaving the bare exception + raise + raise CommandError(f"{messages[werr]} [{errstr}]", e) + if werr in self.default_messages: + raise CommandError(f"{self.default_messages[werr]} [{errstr}]", e) + raise + + return f + + def bool_string(flag): if flag == 0: ret = 'FALSE' |
