<html>
  <head>
    <meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <div class="moz-cite-prefix">Hi Crístian,<br>
      <br>
      I like the idea of cleanup,  but for python projects,  we should
      comply with PEP8[1], which limit all lines to a maximum of 79
      characters.
      <meta http-equiv="content-type" content="text/html; charset=UTF-8">
        So after we can all files pep clean,  it will resolve the line
      length problem too. <br>
      <br>
      If you have interest in the pep8 clean,  you could use the command
      line tool pep8 and or vim plugin[2] to check if a python file is
      pep8 clean.  After the cleanup,  we need put it to the list of
      PEP8_WHITELIST in Makefile.am.  It can guarantee the files are
      checked when 'make check-local'  is executed.<br
        class="Apple-interchange-newline">
      <br>
      [1]
      <meta http-equiv="content-type" content="text/html; charset=UTF-8">
      <a
        href="http://www.python.org/dev/peps/pep-0008/#maximum-line-length">http://www.python.org/dev/peps/pep-0008/#maximum-line-length</a>
      <meta http-equiv="content-type" content="text/html; charset=UTF-8">
      <br>
      [2]
      <meta http-equiv="content-type" content="text/html; charset=UTF-8">
      <a
href="https://github.com/kimchi-project/kimchi/wiki/PEP8-Checking-Using-Syntastic">https://github.com/kimchi-project/kimchi/wiki/PEP8-Checking-Using-Syntastic</a><br
        class="Apple-interchange-newline">
      <br>
      <br>
      On 01/22/2014 04:04 AM, Crístian Viana wrote:<br>
    </div>
    <blockquote
      cite="mid:1390334674-7772-1-git-send-email-vianac@linux.vnet.ibm.com"
      type="cite">
      <pre wrap="">In order to make the code more consistent, set a maximum of 80
characters per line in Python files.

Signed-off-by: Crístian Viana <a class="moz-txt-link-rfc2396E" href="mailto:vianac@linux.vnet.ibm.com">&lt;vianac@linux.vnet.ibm.com&gt;</a>
---
 src/kimchi/mockmodel.py   | 24 ++++++++-----
 src/kimchi/model.py       | 88 ++++++++++++++++++++++++++++-------------------
 src/kimchi/objectstore.py |  3 +-
 src/kimchi/osinfo.py      | 18 ++++++----
 src/kimchi/scan.py        |  7 ++--
 src/kimchi/template.py    |  3 +-
 src/kimchi/vmtemplate.py  |  7 ++--
 tests/test_osinfo.py      |  3 +-
 8 files changed, 96 insertions(+), 57 deletions(-)

diff --git a/src/kimchi/mockmodel.py b/src/kimchi/mockmodel.py
index 4ef3fa6..1b345ae 100644
--- a/src/kimchi/mockmodel.py
+++ b/src/kimchi/mockmodel.py
@@ -61,7 +61,8 @@ class MockModel(object):
         self.distros = self._get_distros()
 
     def get_capabilities(self):
-        return {'libvirt_stream_protocols': ['http', 'https', 'ftp', 'ftps', 'tftp'],
+        return {'libvirt_stream_protocols': ['http', 'https', 'ftp', 'ftps',
+                                             'tftp'],
                 'qemu_stream': True,
                 'screenshot': True,
                 'system_report_tool': True}
@@ -208,10 +209,12 @@ class MockModel(object):
         ident = name
 
         new_storagepool = new_t.get(u'storagepool', '')
+        new_name = kimchi.model.pool_name_from_uri(new_storagepool)
         try:
-            self._get_storagepool(kimchi.model.pool_name_from_uri(new_storagepool))
+            self._get_storagepool(new_name)
         except Exception as e:
-            raise InvalidParameter("Storagepool specified is not valid: %s." % e.message)
+            raise InvalidParameter("Storagepool specified is not valid: %s." %
+                                   e.message)
 
         for net_name in params.get(u'networks', []):
             try:
@@ -303,7 +306,8 @@ class MockModel(object):
                 pool.info['autostart'] = False
         except KeyError, item:
             raise MissingParameter(item)
-        if name in self._mock_storagepools or name in (kimchi.model.ISO_POOL_NAME,):
+        if (name in self._mock_storagepools or
+            name in (kimchi.model.ISO_POOL_NAME,)):
             raise InvalidOperation("StoragePool already exists")
         self._mock_storagepools[name] = pool
         return name
@@ -605,9 +609,11 @@ class MockVMTemplate(VMTemplate):
         try:
             pool = self.model._get_storagepool(pool_name)
         except NotFoundError:
-            raise InvalidParameter('Storage specified by template does not exist')
+            raise InvalidParameter('Storage specified by template does '
+                                   'not exist')
         if pool.info['state'] != 'active':
-            raise InvalidParameter('Storage specified by template is not active')
+            raise InvalidParameter('Storage specified by template is '
+                                   'not active')
 
         return pool
 
@@ -634,13 +640,15 @@ class MockVM(object):
         self.networks = template_info['networks']
         self.info = {'state': 'shutoff',
                      'stats': "{'cpu_utilization': 20, 'net_throughput' : 35, \
-                                'net_throughput_peak': 100, 'io_throughput': 45, \
+                                'net_throughput_peak': 100, \
+                                'io_throughput': 45, \
                                 'io_throughput_peak': 100}",
                      'uuid': self.uuid,
                      'memory': template_info['memory'],
                      'cpus': template_info['cpus'],
                      'icon': None,
-                     'graphics': {'type': 'vnc', 'listen': '0.0.0.0', 'port': None}
+                     'graphics': {'type': 'vnc', 'listen': '0.0.0.0',
+                                  'port': None}
                      }
         self.info['graphics'].update(template_info['graphics'])
 
diff --git a/src/kimchi/model.py b/src/kimchi/model.py
index ea528c6..37d98dc 100644
--- a/src/kimchi/model.py
+++ b/src/kimchi/model.py
@@ -64,7 +64,8 @@ from kimchi import xmlutils
 from kimchi.asynctask import AsyncTask
 from kimchi.distroloader import DistroLoader
 from kimchi.exception import InvalidOperation, InvalidParameter, IsoFormatError
-from kimchi.exception import MissingParameter, NotFoundError, OperationFailed, TimeoutExpired
+from kimchi.exception import MissingParameter, NotFoundError, OperationFailed
+from kimchi.exception import TimeoutExpired
 from kimchi.featuretests import FeatureTests
 from kimchi.iscsi import TargetClient
 from kimchi.isoinfo import IsoImage
@@ -155,7 +156,8 @@ class Model(object):
         # Please add new possible debug report command here
         # and implement the report generating function
         # based on the new report command
-        self.report_tools = ({'cmd': 'sosreport --help', 'fn': self._sosreport_generate},
+        self.report_tools = ({'cmd': 'sosreport --help',
+                              'fn': self._sosreport_generate},
                              {'cmd': 'supportconfig -h', 'fn':None},
                              {'cmd': 'linuxexplorers --help', 'fn':None})
 
@@ -185,18 +187,18 @@ class Model(object):
             try:
                 net = conn.networkDefineXML(xml)
             except libvirt.libvirtError, e:
-                cherrypy.log.error(
-                    "Fatal: Cannot create default network because of %s, exit kimchid" % e.message,
-                    severity=logging.ERROR)
+                cherrypy.log.error("Fatal: Cannot create default network "
+                                   "because of %s, exit kimchid" %
+                                   e.message, severity=logging.ERROR)
                 sys.exit(1)
 
         if net.isActive() == 0:
             try:
                 net.create()
             except libvirt.libvirtError, e:
-                cherrypy.log.error(
-                    "Fatal: Cannot activate default network because of %s, exit kimchid" % e.message,
-                    severity=logging.ERROR)
+                cherrypy.log.error("Fatal: Cannot activate default network "
+                                   "because of %s, exit kimchid" %
+                                   e.message, severity=logging.ERROR)
                 sys.exit(1)
 
     def _default_pool_check(self):
@@ -210,9 +212,9 @@ class Model(object):
             pass
         except OperationFailed as e:
             # path used by other pool or other reasons of failure, exit
-            cherrypy.log.error(
-                "Fatal: Cannot create default pool because of %s, exit kimchid" % e.message,
-                severity=logging.ERROR)
+            cherrypy.log.error("Fatal: Cannot create default pool because of "
+                               "%s, exit kimchid" %
+                               e.message, severity=logging.ERROR)
             sys.exit(1)
 
         if self.storagepool_lookup('default')['state'] == 'inactive':
@@ -477,12 +479,15 @@ class Model(object):
 
         for key, val in params.items():
             if key in VM_STATIC_UPDATE_PARAMS:
-                new_xml = xmlutils.xml_item_update(new_xml, VM_STATIC_UPDATE_PARAMS[key], val)
+                new_xml = xmlutils.xml_item_update(new_xml,
+                                                   VM_STATIC_UPDATE_PARAMS[key],
+                                                   val)
 
         try:
             if 'name' in params:
                 if state == 'running':
-                    raise InvalidParameter("vm name can just updated when vm shutoff")
+                    raise InvalidParameter("vm name can just updated when "
+                                           "vm shutoff")
                 else:
                     dom.undefine()
             conn = self.conn.get()
@@ -506,7 +511,8 @@ class Model(object):
         info = dom.info()
         state = Model.dom_state_map[info[0]]
         screenshot = None
-        graphics_type, graphics_listen, graphics_port = self._vm_get_graphics(name)
+        graphics = self._vm_get_graphics(name)
+        graphics_type, graphics_listen, graphics_port = graphics
         graphics_port = graphics_port if state == 'running' else None
         try:
             if state == 'running':
@@ -628,7 +634,8 @@ class Model(object):
         t = self._get_template(t_name, vm_overrides)
 
         if not self.qemu_stream and t.info.get('iso_stream', False):
-            raise InvalidOperation("Remote ISO image is not supported by this server.")
+            raise InvalidOperation("Remote ISO image is not supported by "
+                                   "this server.")
 
         t.validate()
         vol_list = t.fork_vm_storage(vm_uuid)
@@ -639,7 +646,7 @@ class Model(object):
             with self.objstore as session:
                 session.store('vm', vm_uuid, {'icon': icon})
 
-        libvirt_stream = False if len(self.libvirt_stream_protocols) == 0 else True
+        libvirt_stream = len(self.libvirt_stream_protocols) != 0
         graphics = params.get('graphics')
 
         xml = t.to_vm_xml(name, vm_uuid,
@@ -718,7 +725,8 @@ class Model(object):
         try:
             self._get_storagepool(pool_name_from_uri(new_storagepool))
         except Exception as e:
-            raise InvalidParameter("Storagepool specified is not valid: %s." % e.message)
+            raise InvalidParameter("Storagepool specified is not valid: %s." %
+                                   e.message)
 
         for net_name in params.get(u'networks', []):
             try:
@@ -1041,7 +1049,8 @@ class Model(object):
             with self.objstore as session:
                 session.delete('scanning', pool_name)
         except Exception, e:
-            kimchi_log.debug("Exception %s occured when cleaning scan result" % e.message)
+            kimchi_log.debug("Exception %s occured when cleaning scan result" %
+                             e.message)
 
     def _do_deep_scan(self, params):
         scan_params = dict(ignore_list=[])
@@ -1054,10 +1063,11 @@ class Model(object):
                 if res['state'] == 'active':
                     scan_params['ignore_list'].append(res['path'])
             except Exception, e:
-                kimchi_log.debug("Exception %s occured when get ignore path" % e.message)
+                kimchi_log.debug("Exception %s occured when get ignore path" %
+                                 e.message)
 
-        params['path'] = scan_params['pool_path'] = self.scanner.scan_dir_prepare(
-            params['name'])
+        path = self.scanner.scan_dir_prepare(params['name'])
+        params['path'] = scan_params['pool_path'] = path
         task_id = self.add_task('', self.scanner.start_scan, scan_params)
         # Record scanning-task/storagepool mapping for future querying
         with self.objstore as session:
@@ -1252,8 +1262,8 @@ class Model(object):
                 bootable = True
             except IsoFormatError:
                 bootable = False
-            res.update(
-                dict(os_distro=os_distro, os_version=os_version, path=path, bootable=bootable))
+            res.update(dict(os_distro=os_distro, os_version=os_version,
+                            path=path, bootable=bootable))
 
         return res
 
@@ -1315,7 +1325,8 @@ class Model(object):
     def _sosreport_generate(self, cb, name):
         command = 'sosreport --batch --name "%s"' % name
         try:
-            retcode = subprocess.call(command, shell=True, stdout=subprocess.PIPE)
+            retcode = subprocess.call(command, shell=True,
+                                      stdout=subprocess.PIPE)
             if retcode &lt; 0:
                 raise OperationFailed('Command terminated with signal')
             elif retcode &gt; 0:
@@ -1360,7 +1371,8 @@ class Model(object):
         for helper_tool in self.report_tools:
             try:
                 retcode = subprocess.call(helper_tool['cmd'], shell=True,
-                                          stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+                                          stdout=subprocess.PIPE,
+                                          stderr=subprocess.PIPE)
                 if retcode == 0:
                     return helper_tool['fn']
             except Exception, e:
@@ -1450,9 +1462,11 @@ class LibvirtVMTemplate(VMTemplate):
             conn = self.conn.get()
             pool = conn.storagePoolLookupByName(pool_name)
         except libvirt.libvirtError:
-            raise InvalidParameter('Storage specified by template does not exist')
+            raise InvalidParameter('Storage specified by template does '
+                                   'not exist')
         if not pool.isActive():
-            raise InvalidParameter('Storage specified by template is not active')
+            raise InvalidParameter('Storage specified by template is '
+                                   'not active')
 
         return pool
 
@@ -1463,9 +1477,11 @@ class LibvirtVMTemplate(VMTemplate):
                 conn = self.conn.get()
                 network = conn.networkLookupByName(name)
             except libvirt.libvirtError:
-                raise InvalidParameter('Network specified by template does not exist')
+                raise InvalidParameter('Network specified by template does '
+                                       'not exist')
             if not network.isActive():
-                raise InvalidParameter('Network specified by template is not active')
+                raise InvalidParameter('Network specified by template is '
+                                       'not active')
 
     def _get_storage_path(self):
         pool = self._storage_validate()
@@ -1582,7 +1598,8 @@ class NetfsPoolDef(StoragePoolDef):
                 run_command(mount_cmd, 30)
                 rollback.prependDefer(run_command, umount_cmd)
             except TimeoutExpired:
-                raise InvalidParameter("Export path %s may block during nfs mount" % export_path)
+                raise InvalidParameter("Export path %s may block during "
+                                       "nfs mount" % export_path)
 
             with open("/proc/mounts" , "rb") as f:
                 rawMounts = f.read()
@@ -1593,8 +1610,8 @@ class NetfsPoolDef(StoragePoolDef):
                     mounted =  True
 
             if not mounted:
-                raise InvalidParameter(
-                    "Export path %s mount failed during nfs mount" % export_path)
+                raise InvalidParameter("Export path %s mount failed during "
+                                       "nfs mount" % export_path)
 
     @property
     def xml(self):
@@ -1830,7 +1847,8 @@ class LibvirtConnection(object):
                     except libvirt.libvirtError:
                         kimchi_log.error('Unable to connect to libvirt.')
                         if not retries:
-                            kimchi_log.error('Libvirt is not available, exiting.')
+                            kimchi_log.error('Libvirt is not available, '
+                                             'exiting.')
                             cherrypy.engine.stop()
                             raise
                     time.sleep(2)
@@ -1847,8 +1865,8 @@ class LibvirtConnection(object):
                             setattr(cls, name, wrapMethod(method))
 
                 self._connections[conn_id] = conn
-                # In case we're running into troubles with keeping the connections
-                # alive we should place here:
+                # In case we're running into troubles with keeping the
+                # connections alive we should place here:
                 # conn.setKeepAlive(interval=5, count=3)
                 # However the values need to be considered wisely to not affect
                 # hosts which are hosting a lot of virtual machines
diff --git a/src/kimchi/objectstore.py b/src/kimchi/objectstore.py
index 7b567f3..5096ea8 100644
--- a/src/kimchi/objectstore.py
+++ b/src/kimchi/objectstore.py
@@ -107,7 +107,8 @@ class ObjectStore(object):
         try:
             return self._connections[ident]
         except KeyError:
-            self._connections[ident] = sqlite3.connect(self.location, timeout=10)
+            self._connections[ident] = sqlite3.connect(self.location,
+                                                       timeout=10)
             if len(self._connections.keys()) &gt; 10:
                 id, conn = self._connections.popitem(last=False)
                 conn.interrupt()
diff --git a/src/kimchi/osinfo.py b/src/kimchi/osinfo.py
index f92db3d..14df9a6 100644
--- a/src/kimchi/osinfo.py
+++ b/src/kimchi/osinfo.py
@@ -56,18 +56,24 @@ modern_version_bases = {'debian': '6.0', 'ubuntu': '7.10', 'opensuse': '10.3',
 
 isolinks = {
     'debian': {
-        'squeeze': '<a class="moz-txt-link-freetext" href="http://cdimage.debian.org/debian-cd/6.0.7-live/amd64/iso-hybrid/debian-live-6.0.7-amd64-gnome-desktop.iso">http://cdimage.debian.org/debian-cd/6.0.7-live/amd64/iso-hybrid/debian-live-6.0.7-amd64-gnome-desktop.iso</a>',
+        'squeeze': '<a class="moz-txt-link-freetext" href="http://cdimage.debian.org/debian-cd/6.0.7-live/amd64/">http://cdimage.debian.org/debian-cd/6.0.7-live/amd64/</a>'
+                   'iso-hybrid/debian-live-6.0.7-amd64-gnome-desktop.iso',
     },
     'ubuntu': {
-        'raring': '<a class="moz-txt-link-freetext" href="http://ubuntu-releases.cs.umn.edu/13.04/ubuntu-13.04-desktop-amd64.iso">http://ubuntu-releases.cs.umn.edu/13.04/ubuntu-13.04-desktop-amd64.iso</a>',
+        'raring': '<a class="moz-txt-link-freetext" href="http://ubuntu-releases.cs.umn.edu/13.04/">http://ubuntu-releases.cs.umn.edu/13.04/</a>'
+                  'ubuntu-13.04-desktop-amd64.iso',
     },
     'opensuse': {
-        '12.3': '<a class="moz-txt-link-freetext" href="http://suse.mirrors.tds.net/pub/opensuse/distribution/12.3/iso/openSUSE-12.3-DVD-x86_64.iso">http://suse.mirrors.tds.net/pub/opensuse/distribution/12.3/iso/openSUSE-12.3-DVD-x86_64.iso</a>',
+        '12.3': '<a class="moz-txt-link-freetext" href="http://suse.mirrors.tds.net/pub/opensuse/distribution/12.3/">http://suse.mirrors.tds.net/pub/opensuse/distribution/12.3/</a>'
+                'iso/openSUSE-12.3-DVD-x86_64.iso',
     },
     'fedora': {
-        '16': '<a class="moz-txt-link-freetext" href="http://fedora.mirrors.tds.net/pub/fedora/releases/16/Live/x86_64/Fedora-16-x86_64-Live-Desktop.iso">http://fedora.mirrors.tds.net/pub/fedora/releases/16/Live/x86_64/Fedora-16-x86_64-Live-Desktop.iso</a>',
-        '17': '<a class="moz-txt-link-freetext" href="http://fedora.mirrors.tds.net/pub/fedora/releases/17/Live/x86_64/Fedora-17-x86_64-Live-Desktop.iso">http://fedora.mirrors.tds.net/pub/fedora/releases/17/Live/x86_64/Fedora-17-x86_64-Live-Desktop.iso</a>',
-        '18': '<a class="moz-txt-link-freetext" href="http://fedora.mirrors.tds.net/pub/fedora/releases/18/Live/x86_64/Fedora-18-x86_64-Live-Desktop.iso">http://fedora.mirrors.tds.net/pub/fedora/releases/18/Live/x86_64/Fedora-18-x86_64-Live-Desktop.iso</a>',
+        '16': '<a class="moz-txt-link-freetext" href="http://fedora.mirrors.tds.net/pub/fedora/releases/16/Live/">http://fedora.mirrors.tds.net/pub/fedora/releases/16/Live/</a>'
+              'x86_64/Fedora-16-x86_64-Live-Desktop.iso',
+        '17': '<a class="moz-txt-link-freetext" href="http://fedora.mirrors.tds.net/pub/fedora/releases/17/Live/">http://fedora.mirrors.tds.net/pub/fedora/releases/17/Live/</a>'
+              'x86_64/Fedora-17-x86_64-Live-Desktop.iso',
+        '18': '<a class="moz-txt-link-freetext" href="http://fedora.mirrors.tds.net/pub/fedora/releases/18/Live/">http://fedora.mirrors.tds.net/pub/fedora/releases/18/Live/</a>'
+              'x86_64/Fedora-18-x86_64-Live-Desktop.iso',
     },
 }
 
diff --git a/src/kimchi/scan.py b/src/kimchi/scan.py
index e192f01..ca460a0 100644
--- a/src/kimchi/scan.py
+++ b/src/kimchi/scan.py
@@ -59,8 +59,8 @@ class Scanner(object):
                     shutil.rmtree(d)
                     self.clean_cb(transient_pool)
         except OSError as e:
-            kimchi_log.debug(
-                    "Exception %s occured when cleaning stale pool, ignore" % e.message)
+            kimchi_log.debug("Exception %s occured when cleaning stale pool, "
+                             "ignore" % e.message)
 
     def scan_dir_prepare(self, name):
         # clean stale scan storage pools
@@ -77,7 +77,8 @@ class Scanner(object):
                 if (iso_info['distro'], iso_info['version']) == iso_img.probe():
                     return
 
-            iso_path = iso_name + hashlib.md5(iso_info['path']).hexdigest() + '.iso'
+            iso_path = (iso_name + hashlib.md5(iso_info['path']).hexdigest() +
+                       '.iso')
             link_name = os.path.join(params['pool_path'],
                                      os.path.basename(iso_path))
             os.symlink(iso_info['path'], link_name)
diff --git a/src/kimchi/template.py b/src/kimchi/template.py
index 1f19c4a..faa3c72 100644
--- a/src/kimchi/template.py
+++ b/src/kimchi/template.py
@@ -83,7 +83,8 @@ def can_accept_html():
 
 def render(resource, data):
     if can_accept('application/json'):
-        cherrypy.response.headers['Content-Type'] = 'application/json;charset=utf-8'
+        cherrypy.response.headers['Content-Type'] = ('application/json;'
+                                                    'charset=utf-8')
         return json.dumps(data, indent=2,
                           separators=(',', ':'),
                           encoding='iso-8859-1')
diff --git a/src/kimchi/vmtemplate.py b/src/kimchi/vmtemplate.py
index 58147e3..6a3def3 100644
--- a/src/kimchi/vmtemplate.py
+++ b/src/kimchi/vmtemplate.py
@@ -111,9 +111,12 @@ class VMTemplate(object):
         qemu_stream_cmdline = """
             &lt;qemu:commandline&gt;
               &lt;qemu:arg value='-drive'/&gt;
-              &lt;qemu:arg value='file=%(url)s,if=none,id=drive-%(bus)s0-1-0,readonly=on,format=raw'/&gt;
+              &lt;qemu:arg value='file=%(url)s,
+                               if=none,id=drive-%(bus)s0-1-0,readonly=on,
+                               format=raw'/&gt;
               &lt;qemu:arg value='-device'/&gt;
-              &lt;qemu:arg value='%(bus)s-cd,bus=%(bus)s.1,unit=0,drive=drive-%(bus)s0-1-0,id=%(bus)s0-1-0'/&gt;
+              &lt;qemu:arg value='%(bus)s-cd,bus=%(bus)s.1,unit=0,
+                               drive=drive-%(bus)s0-1-0,id=%(bus)s0-1-0'/&gt;
             &lt;/qemu:commandline&gt;
         """
 
diff --git a/tests/test_osinfo.py b/tests/test_osinfo.py
index 0f88a35..28ac89b 100644
--- a/tests/test_osinfo.py
+++ b/tests/test_osinfo.py
@@ -34,7 +34,8 @@ class OSInfoTests(unittest.TestCase):
         self.assertEquals(['default'], entry['networks'])
 
     def test_fedora_lookup(self):
-        cd = '<a class="moz-txt-link-freetext" href="http://fedora.mirrors.tds.net/pub/fedora/releases/17/Live/x86_64/Fedora-17-x86_64-Live-Desktop.iso">http://fedora.mirrors.tds.net/pub/fedora/releases/17/Live/x86_64/Fedora-17-x86_64-Live-Desktop.iso</a>'
+        cd = '<a class="moz-txt-link-freetext" href="http://fedora.mirrors.tds.net/pub/fedora/releases/17/Live/x86_64/">http://fedora.mirrors.tds.net/pub/fedora/releases/17/Live/x86_64/</a>'
+             'Fedora-17-x86_64-Live-Desktop.iso'
         entry = lookup('fedora', '17')
         self.assertEquals(10, entry['disks'][0]['size'])
         self.assertEquals(cd, entry['cdrom'])
</pre>
    </blockquote>
    <br>
  </body>
</html>