On 04/29/2014 10:53 PM, chenhanxiao@xxxxxxxxxxxxxx wrote: > > >> -----Original Message----- >> From: Cole Robinson [mailto:crobinso@xxxxxxxxxx] >> Sent: Tuesday, April 29, 2014 10:52 PM >> To: Chen, Hanxiao/陈 晗霄; virt-tools-list@xxxxxxxxxx >> Subject: Re: [virt-manager PATCH] create: fix a TypeError issue >> when detecting OS info >> >> On 04/26/2014 02:49 AM, Chen Hanxiao wrote: >>> How to reproduce: >>> 1) New VM -> Use ISO image >>> 2) Choose a WINDOWS IMG >>> >>> Then debug log shows: >>> Traceback (most recent call last): >>> File "/home/virt-manager/virtManager/create.py", line 1218, in >> change_os_version >>> if os_type_model[idx][0] == type_row[0]: >>> File "/usr/lib64/python2.7/site-packages/gi/overrides/Gtk.py", line 1064, in >> __getitem__ >>> return self.model.get_value(self.iter, key) >>> TypeError: unknown type (null) >>> >>> Signed-off-by: Chen Hanxiao <chenhanxiao@xxxxxxxxxxxxxx> >> >> Hmm, I can't reproduce, but maybe I'm doing something differently. Are you >> selecting a windows ISO? >> > Yes , WinXP ISO, a little old though :) > > And I did more tests: > Other Windows ISO(win98, win2000), we can’t get its OS and version, > but no TypeError thrown. > Win7 works fine. > > Fedora 20, RHEL 7, Ubuntu 13 works fine too. > >> What is the list selection in the UI when this triggers? > > OS: Windows > Version: Unknown > >> >> If this isn't a bug we can fix elsewhere, then we should at least move the >> TypeError check to _selected_os_row so other users benefit as well. >> >> - Cole > > I did a test with code like: > def _selected_os_row(self): > - return uiutil.get_list_selection( > + row = uiutil.get_list_selection( > self.widget("install-os-type"), None) > + if row: > + try: > + row[0] > + except TypeError: > + return None > + return row > + else: > + return None > > > We still got error message: > [Wed, 30 Apr 2014 10:41:37 virt-manager 876] DEBUG (cli:182) Uncaught exception: > Traceback (most recent call last): > File "/home/virt-manager/virtManager/create.py", line 1225, in change_os_version > if os_type_model[idx][0] == type_row[0]: > File "/usr/lib64/python2.7/site-packages/gi/overrides/Gtk.py", line 1064, in __getitem__ > return self.model.get_value(self.iter, key) > TypeError: unknown type (null) > > Traceback (most recent call last): > File "/home/virt-manager/virtManager/create.py", line 1225, in change_os_version > if os_type_model[idx][0] == type_row[0]: > File "/usr/lib64/python2.7/site-packages/gi/overrides/Gtk.py", line 1064, in __getitem__ > return self.model.get_value(self.iter, key) > TypeError: unknown type (null) > > With my patch, it works fine though..... > Currently, only change_os_version need check self._selected_os_row()[0]. > Here's the fix: diff --git a/virtManager/create.py b/virtManager/create.py index 1e359f9..c2e0ee7 100644 --- a/virtManager/create.py +++ b/virtManager/create.py @@ -1206,6 +1206,7 @@ class vmmCreate(vmmGObjectUI): type_row = self._selected_os_row() if not type_row: return + old_type = type_row[0] self.show_all_os = True self.populate_os_type_model() @@ -1213,7 +1214,7 @@ class vmmCreate(vmmGObjectUI): os_type_list = self.widget("install-os-type") os_type_model = os_type_list.get_model() for idx in range(len(os_type_model)): - if os_type_model[idx][0] == type_row[0]: + if os_type_model[idx][0] == old_type: os_type_list.set_active(idx) break populate_os_type_model will free type_row, so pull out the data ahead of time. I've pushed that now - Cole _______________________________________________ virt-tools-list mailing list virt-tools-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/virt-tools-list