Source code for virtualbox.library_ext.guest
"""
Add helper code to the default IGuest class.
"""
import time
import os
import virtualbox
from virtualbox import library
# Define some default params for create session
[docs]class IGuest(library.IGuest):
__doc__ = library.IGuest.__doc__
[docs] def create_session(self, user, password, domain='', session_name='pyvbox',
timeout_ms=0):
session = super(IGuest, self).create_session(user, password, domain,
session_name)
for i in range(50):
if session.status == library.GuestSessionStatus.started:
break
time.sleep(0.1)
else:
if len(password) == 0:
raise SystemError('GuestSession failed to start. Could be because '
'of using an empty password.')
raise SystemError("GuestSession failed to start")
if timeout_ms != 0:
# There is probably a better way to to this?
if 'win' in self.os_type_id.lower():
test_file = 'C:\\Windows\\System32\\calc.exe'
else:
test_file = '/bin/sh'
while True:
try:
session.file_exists(test_file)
except library.VBoxError:
time.sleep(0.5)
timeout_ms -= 500
if timeout_ms <= 0:
raise
continue
break
return session
create_session.__doc__ = library.IGuest.create_session.__doc__
# Update guest additions helper
[docs] def update_guest_additions(self, source=None, arguments=None, flags=None):
if arguments is None:
arguments = []
if flags is None:
flags = [library.AdditionsUpdateFlag.none]
if source is None:
manager = virtualbox.Manager()
source = os.path.join(manager.bin_path, "VBoxGuestAdditions.iso")
if not os.path.exists(source):
raise IOError("ISO path '%s' not found" % source)
return super(IGuest, self).update_guest_additions(source,
arguments,
flags)
update_guest_additions.__doc__ = library.IGuest.update_guest_additions.__doc__