Hi Sheldon, thanks for sending this patch, but I think Aline is
refactoring model.py,
splitting such as what was done for 'control'.
Rodrigo Trujillo
On 01/13/2014 09:12 AM, shaohef(a)linux.vnet.ibm.com wrote:
From: ShaoHe Feng <shaohef(a)linux.vnet.ibm.com>
This patch cleans up pep8 style issue in model.py
Signed-off-by: ShaoHe Feng <shaohef(a)linux.vnet.ibm.com>
---
src/kimchi/model.py | 127 +++++++++++++++++++++++++++++-----------------------
1 file changed, 72 insertions(+), 55 deletions(-)
diff --git a/src/kimchi/model.py b/src/kimchi/model.py
index 4b7df7e..9d0dad3 100644
--- a/src/kimchi/model.py
+++ b/src/kimchi/model.py
@@ -18,16 +18,14 @@
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
import cherrypy
import copy
import disks
import fnmatch
-import functools
import glob
import ipaddr
-import json
import libvirt
import logging
import os
@@ -43,17 +41,10 @@ import uuid
from cherrypy.process.plugins import BackgroundTask
-from cherrypy.process.plugins import SimplePlugin
from collections import defaultdict
from xml.etree import ElementTree
-try:
- from collections import OrderedDict
-except ImportError:
- from ordereddict import OrderedDict
-
-
from kimchi import config
from kimchi import netinfo
from kimchi import network as knetwork
@@ -70,7 +61,7 @@ from kimchi.isoinfo import IsoImage
from kimchi.objectstore import ObjectStore
from kimchi.scan import Scanner
from kimchi.screenshot import VMScreenshot
-from kimchi.utils import get_enabled_plugins, is_digit, kimchi_log
+from kimchi.utils import get_enabled_plugins, kimchi_log
from kimchi.vmtemplate import VMTemplate
@@ -90,12 +81,15 @@ def _uri_to_name(collection, uri):
raise InvalidParameter(uri)
return m.group(1)
+
def template_name_from_uri(uri):
return _uri_to_name('templates', uri)
+
def pool_name_from_uri(uri):
return _uri_to_name('storagepools', uri)
+
def get_vm_name(vm_name, t_name, name_list):
if vm_name:
return vm_name
@@ -105,6 +99,7 @@ def get_vm_name(vm_name, t_name, name_list):
return vm_name
raise OperationFailed("Unable to choose a VM name")
+
class Model(object):
dom_state_map = {0: 'nostate',
1: 'running',
@@ -152,9 +147,10 @@ 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},
- {'cmd': 'supportconfig -h',
'fn':None},
- {'cmd': 'linuxexplorers --help',
'fn':None})
+ self.report_tools = ({'cmd': 'sosreport --help',
+ 'fn': self._sosreport_generate},
+ {'cmd': 'supportconfig -h', 'fn':
None},
+ {'cmd': 'linuxexplorers --help',
'fn': None})
self.distros = self._get_distros()
if 'qemu:///' in self.libvirt_uri:
@@ -183,7 +179,8 @@ class Model(object):
net = conn.networkDefineXML(xml)
except libvirt.libvirtError, e:
cherrypy.log.error(
- "Fatal: Cannot create default network because of %s, exit
kimchid" % e.message,
+ "Fatal: Cannot create default network because of %s, "
+ "exit kimchid" % e.message,
severity=logging.ERROR)
sys.exit(1)
@@ -192,7 +189,8 @@ class Model(object):
net.create()
except libvirt.libvirtError, e:
cherrypy.log.error(
- "Fatal: Cannot activate default network because of %s, exit
kimchid" % e.message,
+ "Fatal: Cannot activate default network because of %s, "
+ "exit kimchid" % e.message,
severity=logging.ERROR)
sys.exit(1)
@@ -208,7 +206,8 @@ class Model(object):
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,
+ "Fatal: Cannot create default pool because of %s, "
+ "exit kimchid" % e.message,
severity=logging.ERROR)
sys.exit(1)
@@ -280,7 +279,7 @@ class Model(object):
distro, version, codename = platform.linux_distribution()
res['os_distro'] = distro
res['os_version'] = version
- res['os_codename'] = unicode(codename,"utf-8")
+ res['os_codename'] = unicode(codename, "utf-8")
return res
@@ -320,7 +319,7 @@ class Model(object):
max_net_io = round(max(currentMaxNetRate, int(rate)), 1)
self.stats[vm_uuid].update({'net_io': rate, 'max_net_io':
max_net_io,
- 'netRxKB': netRxKB, 'netTxKB':
netTxKB})
+ 'netRxKB': netRxKB, 'netTxKB':
netTxKB})
def _get_disk_io_rate(self, vm_uuid, dom, seconds):
prevDiskRdKB = self.stats[vm_uuid].get('diskRdKB', 0)
@@ -346,8 +345,10 @@ class Model(object):
rate = rd_stats + wr_stats
max_disk_io = round(max(currentMaxDiskRate, int(rate)), 1)
- self.stats[vm_uuid].update({'disk_io': rate, 'max_disk_io':
max_disk_io,
- 'diskRdKB': diskRdKB, 'diskWrKB':
diskWrKB})
+ self.stats[vm_uuid].update({'disk_io': rate,
+ 'max_disk_io': max_disk_io,
+ 'diskRdKB': diskRdKB,
+ 'diskWrKB': diskWrKB})
def debugreport_lookup(self, name):
path = config.get_debugreports_path()
@@ -392,7 +393,7 @@ class Model(object):
return name_lists
- def _update_host_stats(self):
+ def _update_host_stats(self):
preTimeStamp = self.host_stats['timestamp']
timestamp = time.time()
# FIXME when we upgrade psutil, we can get uptime by psutil.uptime
@@ -474,12 +475,14 @@ 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()
@@ -598,7 +601,7 @@ class Model(object):
def vm_connect(self, name):
graphics, port = self._vm_get_graphics(name)
- if graphics == "vnc" and port != None:
+ if graphics == "vnc" and port is not None:
vnc.add_proxy_token(name, port)
else:
raise OperationFailed("Only able to connect to running vm's vnc
"
@@ -621,7 +624,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)
@@ -632,11 +636,12 @@ 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 = False if len(self.libvirt_stream_protocols) == 0 \
+ else True
xml = t.to_vm_xml(name, vm_uuid, libvirt_stream, self.qemu_stream_dns)
try:
- dom = conn.defineXML(xml.encode('utf-8'))
+ conn.defineXML(xml.encode('utf-8'))
except libvirt.libvirtError as e:
for v in vol_list:
vol = conn.storageVolLookupByPath(v['path'])
@@ -704,7 +709,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:
@@ -925,7 +931,7 @@ class Model(object):
return '-'.join(('kimchi', interface, vlan_id))
def _is_vlan_tagged_bridge(self, bridge):
- return bridge.startswith('kimchi-')
+ return bridge.startswith('kimchi-')
def _create_vlan_tagged_bridge(self, interface, vlan_id):
br_name = self._get_vlan_tagged_bridge_name(interface, vlan_id)
@@ -960,7 +966,7 @@ class Model(object):
id = self.next_taskid
self.next_taskid = self.next_taskid + 1
- task = AsyncTask(id, target_uri, fn, self.objstore, opaque)
+ AsyncTask(id, target_uri, fn, self.objstore, opaque)
return id
@@ -981,7 +987,6 @@ class Model(object):
except:
raise
-
def _get_vm(self, name):
conn = self.conn.get()
try:
@@ -1027,7 +1032,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=[])
@@ -1040,10 +1046,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'])
+ params['path'] = scan_params['pool_path'] = \
+ self.scanner.scan_dir_prepare(params['name'])
task_id = self.add_task('', self.scanner.start_scan, scan_params)
# Record scanning-task/storagepool mapping for future querying
with self.objstore as session:
@@ -1068,7 +1075,7 @@ class Model(object):
if name in self.storagepools_get_list():
raise InvalidOperation(
- "The name %s has been used by a pool" % name)
+ "The name %s has been used by a pool" % name)
try:
if task_id:
@@ -1178,7 +1185,7 @@ class Model(object):
pool = self._get_storagepool(name)
if pool.isActive():
raise InvalidOperation(
- "Unable to delete the active storagepool %s" % name)
+ "Unable to delete the active storagepool %s" % name)
try:
pool.undefine()
except libvirt.libvirtError as e:
@@ -1204,7 +1211,7 @@ class Model(object):
raise
def storagevolumes_create(self, pool, params):
- info = self.storagepool_lookup(pool)
+ self.storagepool_lookup(pool)
try:
name = params['name']
xml = _get_volume_xml(**params)
@@ -1239,7 +1246,8 @@ class Model(object):
except IsoFormatError:
bootable = False
res.update(
- dict(os_distro=os_distro, os_version=os_version, path=path,
bootable=bootable))
+ dict(os_distro=os_distro, os_version=os_version,
+ path=path, bootable=bootable))
return res
@@ -1269,7 +1277,8 @@ class Model(object):
pool = self._get_storagepool(pool)
if not pool.isActive():
raise InvalidOperation(
- "Unable to list volumes in inactive storagepool %s" %
pool.name())
+ "Unable to list volumes in inactive storagepool "
+ "%s" % pool.name())
try:
self._pool_refresh(pool)
return pool.listVolumes()
@@ -1280,7 +1289,8 @@ class Model(object):
pool = self._get_storagepool(pool)
if not pool.isActive():
raise InvalidOperation(
- "Unable to list volumes in inactive storagepool %s" %
pool.name())
+ "Unable to list volumes in inactive storagepool "
+ "%s" % pool.name())
try:
return pool.storageVolLookupByName(name)
except libvirt.libvirtError as e:
@@ -1301,7 +1311,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 < 0:
raise OperationFailed('Command terminated with signal')
elif retcode > 0:
@@ -1346,7 +1357,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:
@@ -1364,7 +1376,7 @@ class Model(object):
def _get_distros(self):
distroloader = DistroLoader()
- return distroloader.get()
+ return distroloader.get()
def distros_get_list(self):
return self.distros.keys()
@@ -1436,9 +1448,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
@@ -1449,9 +1463,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()
@@ -1485,7 +1501,7 @@ class LibvirtVMScreenshot(VMScreenshot):
dom = conn.lookupByUUIDString(self.vm_uuid)
vm_name = dom.name()
stream = conn.newStream(0)
- mimetype = dom.screenshot(stream, 0, 0)
+ dom.screenshot(stream, 0, 0)
stream.recvAll(handler, fd)
except libvirt.libvirtError:
try:
@@ -1734,8 +1750,8 @@ class LibvirtConnection(object):
def get_wrappable_objects(self):
"""
When a wrapped function returns an instance of another libvirt object,
- we also want to wrap that object so we can catch errors that happen when
- calling its methods.
+ we also want to wrap that object so we can catch errors that happen
+ when calling its methods.
"""
objs = []
for name in ('virDomain', 'virDomainSnapshot',
'virInterface',
@@ -1791,7 +1807,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)
@@ -1808,8 +1825,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