Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 28 additions & 11 deletions main.py
Original file line number Diff line number Diff line change
Expand Up @@ -99,11 +99,23 @@ class PropWidget(urwid.PopUpLauncher):

def __init__(self, prop, value):
self.prop = prop
self.value = None
self._value = value
self.item = urwid.AttrMap(urwid.Text('placeholder'), 'body', 'focus')
self.update_value(value)
self.__super.__init__(self.item)

@property
def value(self):
vbox_prop = VBox.PROPERTIES[self.prop]
prop_value_regex = vbox_prop['format'].replace('{}', '(.*)')
m = re.search(prop_value_regex, self._value)
if m: return m.group(1)
return 'Missing'

@value.setter
def value(self, new_value):
pass

def selectable(self):
return True

Expand All @@ -124,7 +136,8 @@ def get_pop_up_parameters(self):

def update_value(self, new_value):
self.value = new_value
self.item.original_widget.set_text(' %15s: %s' % (self.prop, self.value))
self.item.original_widget.set_text(' %15s: %s' % (self.prop, \
self._value))

class UsbScreen(Screen):

Expand Down Expand Up @@ -199,12 +212,18 @@ def toggle_verbosity(self):
class VBox(object):
command = 'VBoxManage'

PROPERTIES = [
'Guest OS',
'Number of CPUs',
'Memory size',
'VRAM size',
]
def property(extract=None, prop_type=str):
return {
'format': extract,
'type': prop_type,
}

PROPERTIES = {
'Guest OS': property('{}', str),
'Number of CPUs': property('{}', str),
'Memory size': property('{}MB', int),
'VRAM size': property('{}MB', str),
}

USB_PARSER = [
('UUID', '([a-zA-Z0-9-]+)'),
Expand All @@ -231,12 +250,10 @@ def vms(self):
def properties(self, name):
out = self._cmd('showvminfo ' + name)

# Create a copy of the properties list so we can modify it.
property_names = list(self.PROPERTIES)
props = {}

for line in out.splitlines():
for prop_name in property_names:
for prop_name in self.PROPERTIES.keys():
if line.startswith(prop_name):
m = re.search(r'%s:\s+(.+)' % prop_name, line)
if m: props[prop_name] = m.group(1)
Expand Down