diff options
author | Andy Grover <andy@groveronline.com> | 2015-05-25 12:21:45 -0700 |
---|---|---|
committer | Andy Grover <andy@groveronline.com> | 2015-05-25 12:21:45 -0700 |
commit | d66c7a9184c55ec72d7d963191cefc769f7b6dff (patch) | |
tree | 6070afff1fa9e7f701965f2f88bdb9d7b5a1d14e | |
parent | c6a77cfda93e5f3f1a90a0c7cecdc725f9a8e7e5 (diff) | |
parent | ed0e145ea3b71c5a78d766bc83316e9550195c37 (diff) | |
download | rtslib-fb-d66c7a9184c55ec72d7d963191cefc769f7b6dff.tar.gz |
Merge pull request #62 from haypo/py3
Using the "six" library, allow the same code to work on Python 2 and 3, instead of requiring 2to3.
-rw-r--r-- | rtslib/__init__.py | 18 | ||||
-rw-r--r-- | rtslib/fabric.py | 19 | ||||
-rw-r--r-- | rtslib/node.py | 2 | ||||
-rw-r--r-- | rtslib/root.py | 12 | ||||
-rw-r--r-- | rtslib/target.py | 31 | ||||
-rw-r--r-- | rtslib/tcm.py | 22 | ||||
-rw-r--r-- | rtslib/utils.py | 11 | ||||
-rwxr-xr-x | setup.py | 6 |
8 files changed, 66 insertions, 55 deletions
diff --git a/rtslib/__init__.py b/rtslib/__init__.py index 56a8062..c4b3cb6 100644 --- a/rtslib/__init__.py +++ b/rtslib/__init__.py @@ -21,17 +21,17 @@ if __name__ == "rtslib": warn("'rtslib' package name for rtslib-fb is deprecated, please" + " instead import 'rtslib_fb'", UserWarning, stacklevel=2) -from root import RTSRoot -from utils import RTSLibError, RTSLibBrokenLink, RTSLibNotInCFS +from .root import RTSRoot +from .utils import RTSLibError, RTSLibBrokenLink, RTSLibNotInCFS -from target import LUN, MappedLUN -from target import NodeACL, NetworkPortal, TPG, Target -from target import NodeACLGroup, MappedLUNGroup -from fabric import FabricModule +from .target import LUN, MappedLUN +from .target import NodeACL, NetworkPortal, TPG, Target +from .target import NodeACLGroup, MappedLUNGroup +from .fabric import FabricModule -from tcm import FileIOStorageObject, BlockStorageObject -from tcm import PSCSIStorageObject, RDMCPStorageObject, UserBackedStorageObject -from tcm import StorageObjectFactory +from .tcm import FileIOStorageObject, BlockStorageObject +from .tcm import PSCSIStorageObject, RDMCPStorageObject, UserBackedStorageObject +from .tcm import StorageObjectFactory __version__ = 'GIT_VERSION' __author__ = "Jerome Martin <jxm@risingtidesystems.com>" diff --git a/rtslib/fabric.py b/rtslib/fabric.py index 7eec479..b2100da 100644 --- a/rtslib/fabric.py +++ b/rtslib/fabric.py @@ -107,15 +107,16 @@ Example: self._path = "%s/%s" % (self.configfs_dir, "my_cfs_dir") ''' -import os +from functools import partial from glob import iglob as glob +import os +import six -from node import CFSNode -from utils import fread, fwrite, generate_wwn, normalize_wwn, colonize -from utils import RTSLibError, modprobe, ignored -from target import Target -from utils import _get_auth_attr, _set_auth_attr -from functools import partial +from .node import CFSNode +from .utils import fread, fwrite, generate_wwn, normalize_wwn, colonize +from .utils import RTSLibError, modprobe, ignored +from .target import Target +from .utils import _get_auth_attr, _set_auth_attr version_attributes = {"lio_version", "version"} discovery_auth_attributes = {"discovery_auth"} @@ -297,7 +298,7 @@ class _BaseFabricModule(CFSNode): ''' Setup fabricmodule with settings from fm dict. ''' - for name, value in fm.iteritems(): + for name, value in six.iteritems(fm): if name != 'name': try: setattr(self, name, value) @@ -458,5 +459,5 @@ class FabricModule(object): @classmethod def all(cls): - for mod in fabric_modules.itervalues(): + for mod in six.itervalues(fabric_modules): yield mod() diff --git a/rtslib/node.py b/rtslib/node.py index 3b56486..c319a5b 100644 --- a/rtslib/node.py +++ b/rtslib/node.py @@ -20,7 +20,7 @@ under the License. import os import stat -from utils import fread, fwrite, RTSLibError, RTSLibNotInCFS +from .utils import fread, fwrite, RTSLibError, RTSLibNotInCFS class CFSNode(object): diff --git a/rtslib/root.py b/rtslib/root.py index 0a4d918..2c720bb 100644 --- a/rtslib/root.py +++ b/rtslib/root.py @@ -23,12 +23,12 @@ import os import stat import json -from node import CFSNode -from target import Target -from fabric import FabricModule -from tcm import so_mapping, StorageObject -from utils import RTSLibError, RTSLibBrokenLink, modprobe, mount_configfs -from utils import dict_remove, set_attributes +from .node import CFSNode +from .target import Target +from .fabric import FabricModule +from .tcm import so_mapping, StorageObject +from .utils import RTSLibError, RTSLibBrokenLink, modprobe, mount_configfs +from .utils import dict_remove, set_attributes default_save_file = "/etc/target/saveconfig.json" diff --git a/rtslib/target.py b/rtslib/target.py index 2787c42..dfe5d7b 100644 --- a/rtslib/target.py +++ b/rtslib/target.py @@ -21,16 +21,19 @@ under the License. import re import os from glob import iglob as glob +from functools import partial +from os.path import isdir +from six.moves import range import uuid -from node import CFSNode -from os.path import isdir -from utils import RTSLibError, RTSLibBrokenLink -from utils import fread, fwrite, normalize_wwn, generate_wwn -from utils import dict_remove, set_attributes, set_parameters, ignored -from utils import _get_auth_attr, _set_auth_attr -import tcm -from functools import partial +from .node import CFSNode +from .utils import RTSLibError, RTSLibBrokenLink +from .utils import fread, fwrite, normalize_wwn, generate_wwn +from .utils import dict_remove, set_attributes, set_parameters, ignored +from .utils import _get_auth_attr, _set_auth_attr +from . import tcm + +import six auth_params = ('userid', 'password', 'mutual_userid', 'mutual_password') @@ -172,7 +175,7 @@ class TPG(CFSNode): if tag is None: tags = [tpg.tag for tpg in parent_target.tpgs] - for index in xrange(1048576): + for index in range(1048576): if index not in tags and index > 0: tag = index break @@ -434,7 +437,7 @@ class TPG(CFSNode): tpg_obj.enable = tpg.get('enable', True) dict_remove(tpg, ('luns', 'portals', 'node_acls', 'tag', 'attributes', 'parameters', 'enable')) - for name, value in tpg.iteritems(): + for name, value in six.iteritems(tpg): if value: try: setattr(tpg_obj, name, value) @@ -503,7 +506,7 @@ class LUN(CFSNode): if lun is None: luns = [l.lun for l in self.parent_tpg.luns] - for index in xrange(self.MAX_LUN+1): + for index in range(self.MAX_LUN+1): if index not in luns: lun = index break @@ -958,7 +961,7 @@ class NodeACL(CFSNode): MappedLUN.setup(tpg_obj, acl_obj, mlun, err_func) dict_remove(acl, ('attributes', 'mapped_luns', 'node_wwn')) - for name, value in acl.iteritems(): + for name, value in six.iteritems(acl): if value: try: setattr(acl_obj, name, value) @@ -1198,7 +1201,7 @@ class Group(object): def _get_first_member(self): try: - return self._mem_func(self).next() + return next(self._mem_func(self)) except StopIteration: raise IndexError("Group is empty") @@ -1304,7 +1307,7 @@ class NodeACLGroup(Group): # if joining a group, take its config try: - model = self._node_acls.next() + model = next(self._node_acls) except StopIteration: pass else: diff --git a/rtslib/tcm.py b/rtslib/tcm.py index 8bdbb5c..ac6ba30 100644 --- a/rtslib/tcm.py +++ b/rtslib/tcm.py @@ -23,12 +23,13 @@ import stat import re import glob import resource +from six.moves import range -from node import CFSNode -from utils import fread, fwrite, RTSLibError, generate_wwn -from utils import convert_scsi_path_to_hctl, convert_scsi_hctl_to_path -from utils import is_dev_in_use, get_blockdev_type -from utils import get_size_for_blk_dev, get_size_for_disk_name +from .node import CFSNode +from .utils import fread, fwrite, RTSLibError, generate_wwn +from .utils import convert_scsi_path_to_hctl, convert_scsi_hctl_to_path +from .utils import is_dev_in_use, get_blockdev_type +from .utils import get_size_for_blk_dev, get_size_for_disk_name class StorageObject(CFSNode): @@ -185,9 +186,9 @@ class StorageObject(CFSNode): listdir = os.listdir realpath = os.path.realpath path = self.path - from root import RTSRoot - from target import LUN, TPG, Target - from fabric import target_names_excludes + from .root import RTSRoot + from .target import LUN, TPG, Target + from .fabric import target_names_excludes for base, fm in ((fm.path, fm) for fm in RTSRoot().fabric_modules if fm.exists): for tgt_dir in listdir(base): @@ -899,8 +900,9 @@ class _Backstore(CFSNode): (self._plugin, name)) else: # Allocate new index value - for index in xrange(1048576): - if index not in bs_cache.values(): + indexes = set(bs_cache.values()) + for index in range(1048576): + if index not in indexes: self._index = index bs_cache[self._lookup_key] = self._index break diff --git a/rtslib/utils.py b/rtslib/utils.py index b392cd5..5531e8f 100644 --- a/rtslib/utils.py +++ b/rtslib/utils.py @@ -18,12 +18,13 @@ License for the specific language governing permissions and limitations under the License. ''' -import re import os -import stat -import uuid +import re +import six import socket +import stat import subprocess +import uuid from contextlib import contextmanager class RTSLibError(Exception): @@ -455,14 +456,14 @@ def _set_auth_attr(self, value, attribute, ignore=False): raise def set_attributes(obj, attr_dict, err_func): - for name, value in attr_dict.iteritems(): + for name, value in six.iteritems(attr_dict): try: obj.set_attribute(name, value) except RTSLibError as e: err_func(str(e)) def set_parameters(obj, param_dict, err_func): - for name, value in param_dict.iteritems(): + for name, value in six.iteritems(param_dict): try: obj.set_parameter(name, value) except RTSLibError as e: @@ -28,5 +28,9 @@ setup ( url = 'http://github.com/agrover/rtslib-fb', packages = ['rtslib_fb', 'rtslib'], scripts = ['scripts/targetctl'], - use_2to3 = True, + "classifiers": [ + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "License :: OSI Approved :: Apache Software License", + ], ) |