Clarify QubesBase(), Qubes() and QubesLocal/QubesRemote usage
Add note in QubesBase docstring it shouldn't be used directly. Additionally add base qubesd_call and run_service methods raising NotImplementedError with helpful message. Lack of qubesd_call in QubesBase leads to infinite recursion, because one in PropertyHolder calls itself then. Fixes QubesOS/qubes-issues#4568
This commit is contained in:
parent
0b47df2b54
commit
86fe230092
@ -128,7 +128,12 @@ class VMCollection(object):
|
||||
|
||||
|
||||
class QubesBase(qubesadmin.base.PropertyHolder):
|
||||
'''Main Qubes application'''
|
||||
'''Main Qubes application.
|
||||
|
||||
This is a base abstract class, don't use it directly. Use specialized
|
||||
class in py:class:`qubesadmin.Qubes` instead, which points at
|
||||
:py:class:`QubesLocal` or :py:class:`QubesRemote`.
|
||||
'''
|
||||
|
||||
#: domains (VMs) collection
|
||||
domains = None
|
||||
@ -427,6 +432,26 @@ class QubesBase(qubesadmin.base.PropertyHolder):
|
||||
|
||||
return dst_vm
|
||||
|
||||
def qubesd_call(self, dest, method, arg=None, payload=None,
|
||||
payload_stream=None):
|
||||
'''
|
||||
Execute Admin API method.
|
||||
|
||||
Only one of `payload` and `payload_stream` can be specified.
|
||||
|
||||
:param dest: Destination VM name
|
||||
:param method: Full API method name ('admin...')
|
||||
:param arg: Method argument (if any)
|
||||
:param payload: Payload send to the method
|
||||
:param payload_stream: file-like object to read payload from
|
||||
:return: Data returned by qubesd (string)
|
||||
|
||||
.. warning:: *payload_stream* will get closed by this function
|
||||
'''
|
||||
raise NotImplementedError(
|
||||
'qubesd_call not implemented in QubesBase class; use specialized '
|
||||
'class: qubesadmin.Qubes()')
|
||||
|
||||
def run_service(self, dest, service, filter_esc=False, user=None,
|
||||
localcmd=None, wait=True, **kwargs):
|
||||
'''Run qrexec service in a given destination
|
||||
@ -442,7 +467,9 @@ class QubesBase(qubesadmin.base.PropertyHolder):
|
||||
:param str localcmd: Command to connect stdin/stdout to
|
||||
:rtype: subprocess.Popen
|
||||
'''
|
||||
raise NotImplementedError
|
||||
raise NotImplementedError(
|
||||
'run_service not implemented in QubesBase class; use specialized '
|
||||
'class: qubesadmin.Qubes()')
|
||||
|
||||
|
||||
class QubesLocal(QubesBase):
|
||||
|
Loading…
Reference in New Issue
Block a user