CP-6167: Fix a bug reported by pylint

There is no variable 'uuid' in scope.

Signed-off-by: Zheng Li <zheng.li@eu.citrix.com>
CP-6167: Fix some bad practice reported by pylint

We conditionally assign a variable with either an object or a string.
Though this might not cause problems at runtime if we can guarantee
that we'll always branch by inspecting the runtime value, it is a
dangerous practice nonetheless.

Pylint complained with the following error: "Instance of 'str' has no
'xenapi' member".

Signed-off-by: Zheng Li <zheng.li@eu.citrix.com>
CP-6167: Fix an issue reported by pylint

Inside util module, we do not need to reference SMlog as util.SMlog.

Though this is not strictly a bug.

Signed-off-by: Zheng Li <zheng.li@eu.citrix.com>
CP-6167: Work around an issue pylint isn't clever to understand

This is not a bug, it's because pylint can't figure out magics
like runtime types based dispatching with isinstance etc. and
will issue an E1103 error.

We don't want to disable E1103 all together, as this could shadow
some real issues later on, so we work around the issue here. We'd
better refactor our code to implement the same functionality
differently.

Another way to work around this is to annotate the specific
occurrence in the source code with the pylint ignore tag.

Signed-off-by: Zheng Li <zheng.li@eu.citrix.com>
CP-6167: Fix an issue reported by pylint

Abstract class VDI referenced undefined property self.path. We
rely on subclasses to always instantiate this property but there
is no guarantee. Better to use Abstract Base Class module when we
move to Python 2.6.

With this change, the unusual instantiation order in ISOVDI class
was exposed (as it caused us some trouble). we resorted the order
to normal and solved the issue.

Signed-off-by: Zheng Li <zheng.li@eu.citrix.com>
CP-6167: Work around a pylint bug

This is a known bug that pylint misunderstands the return types
of 'stdout'/'stderr' of 'subprocess.Popen.communicate' as lists
(instead of strings). This is because these variables were initially
used as lists inside the function and only being converted to strings
at the end.

The python 3.x lib code doesn't cause this confusion for pylint.
Here we introduce this work around for the time being.

Usually the proper way to workaround pylint limitation is to add
pylint ignore tag around a piece of probmatic code, but in this
circumstance, it would demand us to tag all the callers (lots of)
rather than a single callee here.

[1] http://www.logilab.org/ticket/46273

Signed-off-by: Zheng Li <zheng.li@eu.citrix.com>
CP-6167: Fix an issue reported by pylint

The 'stat' module was imported but not used. Moreover, later on in
this source file, we define a function with the same name 'stat',
so that the imported module is then shadowed.

Signed-off-by: Zheng Li <zheng.li@eu.citrix.com>
CP-6167: Fix a bug reported by pylint

There was no MAX_TIMEOUT defined in scope, but the 'attach' method
referenes it later on.

It's probably better fixed by doing some code restruction, but here
we stick to the simple fix for now.

Signed-off-by: Zheng Li <zheng.li@eu.citrix.com>
CP-6167: Fix an issue reported by pylint

The original code overwrite the 'add'/'remove' functions with
internal ones. This is considered as a bad practice as definitions
could be shadowed accidentally. Rename them to _add/_remove.

Signed-off-by: Zheng Li <zheng.li@eu.citrix.com>
CP-6167: Fix an issue reported by pylint

Abstract class FcntlLockBase referenced undefined property
self.LOCK_TYPE. We rely on subclasses to always instantiate this
property but there is no guarantee. Better to use Abstract Base
Class module when we move to Python 2.6.

Signed-off-by: Zheng Li <zheng.li@eu.citrix.com>
CP-6167: Fix an issue reported by pylint

Abstract class MetadataHandler referenced undefined property
self.VDI_INFO_SIZE_IN_SECTORS and method self.spaceAvailableForVdis.
We rely on subclasses to always instantiate the property and
method but there is no guarantee. Better to use Abstract Base Class
module when we move to Python 2.6.

Signed-off-by: Zheng Li <zheng.li@eu.citrix.com>
CP-6167: Fix a bug reported by pylint

The 'diff' variable is referenced in the else clause but was not
defined anywhere.

Signed-off-by: Zheng Li <zheng.li@eu.citrix.com>
CP-6167: Fix a bug reported by pylint

from_tapdisk is a classmethod, it doesn't have access to 'self'.

Signed-off-by: Zheng Li <zheng.li@eu.citrix.com>
CP-6167: Fix a bug reported by pylint

The function xapi_vfs_stats uses util.SMException, but util module
is not in scope.

We add a local import (instead of a global one), to follow the
same convention we saw in this file (probably for the purpose of
avoiding name collision?).

Signed-off-by: Zheng Li <zheng.li@eu.citrix.com>
CP-6167: Fix a bug reported by pylint

The function _fast_find_tapdisks references errno.ENOENT, but the
errno module is not in scope.

We add a local import (instead of a global one), to follow the same
convention we saw on many other instances in this module.

Signed-off-by: Zheng Li <zheng.li@eu.citrix.com>
CP-6167: Fix a bug reported by pylint

Functions in the time module were referenced (e.g. time.sleep),
but the module was not in scope.

Signed-off-by: Zheng Li <zheng.li@eu.citrix.com>
CP-6167: Fix a bug reported by pylint

Undefined variable "blockdevice" was referenced in the code. It
should be "self.blockdevice".

Signed-off-by: Zheng Li <zheng.li@eu.citrix.com>
CP-6167: Fix a bug reported by pylint

LVHDVDI class doesn't have a 'ty' property, it should probably be 'type.'

Signed-off-by: Zheng Li <zheng.li@eu.citrix.com>
CP-6167: Fix a bug reported by pylint

Undefined variables sr_ref and host_ref. They should be self.sr_ref and
self.host_ref.

Signed-off-by: Zheng Li <zheng.li@eu.citrix.com>
CP-6167: Work around an issue pylint isn't clever to understand

This is not a bug, it's because pylint can't figure out magics
like runtime types based dispatching with isinstance etc. and
will issue an E1103 error.

We don't want to disable E1103 all together, as this could shadow
some real issues later on, so we work around the issue here. We'd
better refactor our code to implement the same functionality
differently.

Another way to work around this is to annotate the specific
occurrence in the source code with the pylint ignore tag.

Signed-off-by: Zheng Li <zheng.li@eu.citrix.com>