[Kimchi-devel] [PATCH 5/6] isoinfo: Move _probe_iso() to IsoImage()

Aline Manera alinefm at linux.vnet.ibm.com
Mon Jan 6 14:21:35 UTC 2014


On 01/06/2014 02:55 AM, Sheldon wrote:
> Just a minor comment below
>
> On 01/04/2014 03:18 AM, Aline Manera wrote:
>> From: Aline Manera <alinefm at br.ibm.com>
>>
>> That way all operations related to IsoImage() object will be in this 
>> class.
>>
>> Signed-off-by: Aline Manera <alinefm at br.ibm.com>
>> ---
>>   src/kimchi/isoinfo.py    |   57 
>> +++++++++++++++++++---------------------------
>>   src/kimchi/model.py      |    5 ++--
>>   src/kimchi/scan.py       |    5 ++--
>>   src/kimchi/vmtemplate.py |    4 +++-
>>   4 files changed, 33 insertions(+), 38 deletions(-)
>>
>> diff --git a/src/kimchi/isoinfo.py b/src/kimchi/isoinfo.py
>> index 83e4b95..46e0cf3 100644
>> --- a/src/kimchi/isoinfo.py
>> +++ b/src/kimchi/isoinfo.py
>> @@ -154,6 +154,26 @@ class IsoImage(object):
>>
>>           raise IsoFormatError('ISO %s does not exist' % self.path)
>>
>> +    def probe(self):
>> +        if not self.bootable:
>> +            raise IsoFormatError("ISO %s not bootable" % self.path)
>> +
>> +        matcher = Matcher(self.volume_id)
>> +
>> +        for d, v, regex in iso_dir:
>> +            if matcher.search(regex):
>> +                distro = d
>> +                if hasattr(v, '__call__'):
>> +                    version = v(matcher)
>> +                else:
>> +                    version = v
>> +                return (distro, version)
>> +
>> +        kimchi_log.debug("probe_iso: Unable to identify ISO %s with 
>> Volume ID: %s"
>> +                     % (self.path, self.volume_id))
> log prefers comma.
> seems you copy it from the below code. :-)

yeap. I will fix it next version

>> +
>> +        return ('unknown', 'unknown')
>> +
>>       def _unpack(self, s, data):
>>           return s.unpack(data[:s.size])
>>
>> @@ -259,33 +279,6 @@ class Matcher(object):
>>           return self.lastmatch.group(num)
>>
>>
>> -def _probe_iso(fname, remote = None):
>> -    try:
>> -        iso = IsoImage(fname, remote)
>> -    except Exception, e:
>> -        kimchi_log.warning("probe_iso: Error processing ISO image: 
>> %s\n%s" %
>> -                           (fname, e))
>> -        raise IsoFormatError(e)
>> -
>> -    if not iso.bootable:
>> -        raise IsoFormatError("ISO %s not bootable" % fname)
>> -
>> -    matcher = Matcher(iso.volume_id)
>> -
>> -    for d, v, regex in iso_dir:
>> -        if matcher.search(regex):
>> -            distro = d
>> -            if hasattr(v, '__call__'):
>> -                version = v(matcher)
>> -            else:
>> -                version = v
>> -            return (distro, version)
>> -
>> -    kimchi_log.debug("probe_iso: Unable to identify ISO %s with 
>> Volume ID: %s"
>> -                     % (fname, iso.volume_id))
>> -    return ('unknown', 'unknown')
>> -
>> -
>>   def probe_iso(status_helper, params):
>>       loc = params['path'].encode("utf-8")
>>       updater = params['updater']
>> @@ -311,22 +304,20 @@ def probe_iso(status_helper, params):
>>                       continue
>>                   iso = os.path.join(root, name)
>>                   try:
>> -                    ret = _probe_iso(iso, False)
>> +                    iso_img = IsoImage(iso)
>> +                    ret = iso_img.probe()
>>                       update_result(iso, ret)
>>                   except:
>>                       continue
>>       else:
>> -        ret = _probe_iso(loc)
>> +        iso_img = IsoImage(loc)
>> +        ret = iso_img.probe()
>>           update_result(loc, ret)
>>
>>       if status_helper != None:
>>           status_helper('', True)
>>
>>
>> -def probe_one(iso):
>> -    return _probe_iso(iso)
>> -
>> -
>>   if __name__ == '__main__':
>>       iso_list = []
>>       def updater(iso_info):
>> diff --git a/src/kimchi/model.py b/src/kimchi/model.py
>> index f48f3d3..7115583 100644
>> --- a/src/kimchi/model.py
>> +++ b/src/kimchi/model.py
>> @@ -55,7 +55,6 @@ except ImportError:
>>
>>
>>   from kimchi import config
>> -from kimchi import isoinfo
>>   from kimchi import netinfo
>>   from kimchi import network as knetwork
>>   from kimchi import vnc
>> @@ -66,6 +65,7 @@ from kimchi.exception import InvalidOperation, 
>> InvalidParameter, IsoFormatError
>>   from kimchi.exception import MissingParameter, NotFoundError, 
>> OperationFailed
>>   from kimchi.featuretests import FeatureTests
>>   from kimchi.iscsi import TargetClient
>> +from kimchi.isoinfo import IsoImage
>>   from kimchi.networkxml import to_network_xml
>>   from kimchi.objectstore import ObjectStore
>>   from kimchi.scan import Scanner
>> @@ -1182,7 +1182,8 @@ class Model(object):
>>                   path = os.path.join(os.path.dirname(path), 
>> os.readlink(path))
>>               os_distro = os_version = 'unknown'
>>               try:
>> -                os_distro, os_version = isoinfo.probe_one(path)
>> +                iso_img = IsoImage(path)
>> +                os_distro, os_version = iso_img.probe()
>>                   bootable = True
>>               except IsoFormatError:
>>                   bootable = False
>> diff --git a/src/kimchi/scan.py b/src/kimchi/scan.py
>> index 27be1da..e192f01 100644
>> --- a/src/kimchi/scan.py
>> +++ b/src/kimchi/scan.py
>> @@ -29,7 +29,7 @@ import tempfile
>>   import time
>>
>>
>> -from kimchi.isoinfo import probe_iso, probe_one
>> +from kimchi.isoinfo import IsoImage, probe_iso
>>   from kimchi.utils import kimchi_log
>>
>>
>> @@ -73,7 +73,8 @@ class Scanner(object):
>>
>>               duplicates = "%s/%s*" % (params['pool_path'], iso_name)
>>               for f in glob.glob(duplicates):
>> -                if (iso_info['distro'], iso_info['version']) == 
>> probe_one(f):
>> +                iso_img = IsoImage(f)
>> +                if (iso_info['distro'], iso_info['version']) == 
>> iso_img.probe():
>>                       return
>>
>>               iso_path = iso_name + 
>> hashlib.md5(iso_info['path']).hexdigest() + '.iso'
>> diff --git a/src/kimchi/vmtemplate.py b/src/kimchi/vmtemplate.py
>> index 1720384..69af6ec 100644
>> --- a/src/kimchi/vmtemplate.py
>> +++ b/src/kimchi/vmtemplate.py
>> @@ -30,6 +30,7 @@ import urlparse
>>   from kimchi import isoinfo
>>   from kimchi import osinfo
>>   from kimchi.exception import InvalidParameter, IsoFormatError
>> +from kimchi.isoinfo import IsoImage
>>
>>
>>   QEMU_NAMESPACE = 
>> "xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'"
>> @@ -63,7 +64,8 @@ class VMTemplate(object):
>>                   self.info.update({'iso_stream': True})
>>
>>               try:
>> -                iso_distro, iso_version = isoinfo.probe_one(iso)
>> +                iso_img = IsoImage(iso)
>> +                iso_distro, iso_version = iso_img.probe()
>>               except IsoFormatError, e:
>>                   raise InvalidParameter(e)
>>
>
>




More information about the Kimchi-devel mailing list