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):
|
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 (VMs) collection
|
||||||
domains = None
|
domains = None
|
||||||
@ -427,6 +432,26 @@ class QubesBase(qubesadmin.base.PropertyHolder):
|
|||||||
|
|
||||||
return dst_vm
|
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,
|
def run_service(self, dest, service, filter_esc=False, user=None,
|
||||||
localcmd=None, wait=True, **kwargs):
|
localcmd=None, wait=True, **kwargs):
|
||||||
'''Run qrexec service in a given destination
|
'''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
|
:param str localcmd: Command to connect stdin/stdout to
|
||||||
:rtype: subprocess.Popen
|
:rtype: subprocess.Popen
|
||||||
'''
|
'''
|
||||||
raise NotImplementedError
|
raise NotImplementedError(
|
||||||
|
'run_service not implemented in QubesBase class; use specialized '
|
||||||
|
'class: qubesadmin.Qubes()')
|
||||||
|
|
||||||
|
|
||||||
class QubesLocal(QubesBase):
|
class QubesLocal(QubesBase):
|
||||||
|
Loading…
Reference in New Issue
Block a user