summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--passlib/apps.py2
-rw-r--r--passlib/context.py6
-rw-r--r--passlib/tests/test_utils.py2
-rw-r--r--passlib/tests/utils.py5
-rw-r--r--passlib/utils/__init__.py10
-rw-r--r--passlib/utils/compat.py25
6 files changed, 29 insertions, 21 deletions
diff --git a/passlib/apps.py b/passlib/apps.py
index 02e9f8b..ecdb834 100644
--- a/passlib/apps.py
+++ b/passlib/apps.py
@@ -9,7 +9,7 @@ from itertools import chain
#libs
from passlib import hash
from passlib.context import LazyCryptContext
-from passlib.utils import sys_bits
+from passlib.utils.compat import sys_bits
#pkg
#local
__all__ = [
diff --git a/passlib/context.py b/passlib/context.py
index 96e9661..e944480 100644
--- a/passlib/context.py
+++ b/passlib/context.py
@@ -3,10 +3,10 @@
#imports
#=========================================================
from __future__ import with_statement
-from passlib.utils import py32_lang
+from passlib.utils.compat import PY3, PY_MIN_32
#core
from cStringIO import StringIO
-if py32_lang:
+if PY_MIN_32:
#Py3.2 removed old ConfigParser, put SafeConfigParser in it's place
from ConfigParser import ConfigParser as SafeConfigParser
else:
@@ -223,7 +223,7 @@ class CryptPolicy(object):
def _from_stream(cls, stream, section, filename=None):
"helper for from_string / from_path"
p = SafeConfigParser()
- if py32_lang:
+ if PY_MIN_32:
# Py3.2 deprecated readfp
p.read_file(stream, filename or "<???>")
else:
diff --git a/passlib/tests/test_utils.py b/passlib/tests/test_utils.py
index 753ee69..c851943 100644
--- a/passlib/tests/test_utils.py
+++ b/passlib/tests/test_utils.py
@@ -13,7 +13,7 @@ import warnings
#module
from passlib.context import CryptContext
from passlib import utils
-from passlib.utils import h64, des, Undef, sys_bits, bytes, b, \
+from passlib.utils import h64, des, Undef, bytes, b, \
native_str, to_bytes, to_unicode, to_native_str, to_hash_str, \
is_same_codec, is_ascii_safe, safe_os_crypt, md4 as md4_mod
from passlib.tests.utils import TestCase, Params as ak, \
diff --git a/passlib/tests/utils.py b/passlib/tests/utils.py
index 06aea3c..ae43f61 100644
--- a/passlib/tests/utils.py
+++ b/passlib/tests/utils.py
@@ -37,7 +37,7 @@ from passlib import registry, utils
from passlib.utils import classproperty, handlers as uh, \
has_rounds_info, has_salt_info, MissingBackendError, \
rounds_cost_values, b, bytes, native_str, NoneType
-from passlib.utils.compat import iteritems, irange, callable, sb_types
+from passlib.utils.compat import iteritems, irange, callable, sb_types, exc_err
#local
__all__ = [
#util funcs
@@ -218,7 +218,8 @@ class TestCase(unittest.TestCase):
msg = kwds.pop("__msg__", None)
try:
result = func(*args, **kwds)
- except Exception, err:
+ except Exception:
+ err = exc_err() # NOTE: done to avoid 2/3 exception-syntax issue
if isinstance(err, type):
return True
##import traceback, sys
diff --git a/passlib/utils/__init__.py b/passlib/utils/__init__.py
index 72ec62f..40a53b9 100644
--- a/passlib/utils/__init__.py
+++ b/passlib/utils/__init__.py
@@ -17,7 +17,7 @@ import time
from warnings import warn
#site
#pkg
-from passlib.utils.compat import irange, b, PY3
+from passlib.utils.compat import irange, b, PY3, sys_bits
#local
__all__ = [
#decorators
@@ -52,8 +52,6 @@ __all__ = [
#constants
'pypy_vm', 'jython_vm',
- 'py32_lang', 'py3k_lang',
- 'sys_bits',
'unix_crypt_schemes',
]
@@ -64,12 +62,6 @@ __all__ = [
#: detect what we're running on
pypy_vm = hasattr(sys, "pypy_version_info")
jython_vm = sys.platform.startswith('java')
-py3k_lang = sys.version_info >= (3,0)
-py32_lang = sys.version_info >= (3,2)
-
-#: number of bits in system architecture
-sys_bits = int(logb(sys.maxint,2)+1.5)
-assert sys_bits in (32,64), "unexpected sys_bits value: %r" % (sys_bits,)
#: list of names of hashes found in unix crypt implementations...
unix_crypt_schemes = [
diff --git a/passlib/utils/compat.py b/passlib/utils/compat.py
index c98f8d4..d57262e 100644
--- a/passlib/utils/compat.py
+++ b/passlib/utils/compat.py
@@ -2,10 +2,10 @@
#=============================================================================
# figure out what version we're running
#=============================================================================
-from sys import version as pyver
-PY3 = pyver >= (3,0)
-PY_MAX_25 = pyver < (2,6) # py 2.5 or earlier
-PY_MIN_32 = pyver >= (3,2) # py 3.2 or later
+import sys
+PY3 = sys.version >= (3,0)
+PY_MAX_25 = sys.version < (2,6) # py 2.5 or earlier
+PY_MIN_32 = sys.version >= (3,2) # py 3.2 or later
#=============================================================================
# the default exported vars
@@ -18,13 +18,24 @@ __all__ = [
]
#=============================================================================
+# host/vm configuration info
+#=============================================================================
+from math import log as logb
+if PY3:
+ sys_bits = int(logb(sys.maxsize,2)+1.5)
+else:
+ sys_bits = int(logb(sys.maxint,2)+1.5)
+del logb
+assert sys_bits in (32,64), "unexpected system bitsize: %r" % (sys_bits,)
+
+#=============================================================================
# typing
#=============================================================================
def is_mapping(obj):
# non-exhaustive check, enough to distinguish from lists, etc
return hasattr(obj, "items")
-if (3,0) <= pyver < (3,2):
+if (3,0) <= sys.version < (3,2):
# callable isn't dead, it's just resting
from collections import Callable
def callable(obj):
@@ -102,6 +113,10 @@ else:
#=============================================================================
# introspection
#=============================================================================
+def exc_err():
+ "return current error object (to avoid try/except syntax change)"
+ return sys.exc_info()[1]
+
if PY3:
def get_method_function(method):
return method.__func__