aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Kehrer <paul.l.kehrer@gmail.com>2014-03-16 13:12:18 -0430
committerPaul Kehrer <paul.l.kehrer@gmail.com>2014-03-16 13:12:18 -0430
commit563896ff3544c99c13596f46897e16c0b58fc9ab (patch)
treea1c05dbf8c35713a7752278b664f6a63d0854451
parente171c5fcf47263d4aee35c555844e4c4d7aec5f0 (diff)
parent01de3ef02b63f158b7f3718472b0f13036c584c8 (diff)
downloadcryptography-563896ff3544c99c13596f46897e16c0b58fc9ab.tar.gz
cryptography-563896ff3544c99c13596f46897e16c0b58fc9ab.tar.bz2
cryptography-563896ff3544c99c13596f46897e16c0b58fc9ab.zip
Merge pull request #812 from public/circular-fix
Fix circular imports with available_backends()
-rw-r--r--cryptography/hazmat/backends/__init__.py33
-rw-r--r--tests/conftest.py4
2 files changed, 28 insertions, 9 deletions
diff --git a/cryptography/hazmat/backends/__init__.py b/cryptography/hazmat/backends/__init__.py
index 59d1bc6c..ae78822c 100644
--- a/cryptography/hazmat/backends/__init__.py
+++ b/cryptography/hazmat/backends/__init__.py
@@ -13,23 +13,42 @@
from __future__ import absolute_import, division, print_function
-from cryptography.hazmat.backends import openssl
from cryptography.hazmat.backends.multibackend import MultiBackend
from cryptography.hazmat.bindings.commoncrypto.binding import (
Binding as CommonCryptoBinding
)
+from cryptography.hazmat.bindings.openssl.binding import (
+ Binding as OpenSSLBinding
+)
+
+
+_available_backends_list = None
+
-_ALL_BACKENDS = []
+def _available_backends():
+ global _available_backends_list
-if CommonCryptoBinding.is_available():
- from cryptography.hazmat.backends import commoncrypto
- _ALL_BACKENDS.append(commoncrypto.backend)
+ if _available_backends_list is None:
+ _available_backends_list = []
-_ALL_BACKENDS.append(openssl.backend)
+ if CommonCryptoBinding.is_available():
+ from cryptography.hazmat.backends import commoncrypto
+ _available_backends_list.append(commoncrypto.backend)
+ if OpenSSLBinding.is_available():
+ from cryptography.hazmat.backends import openssl
+ _available_backends_list.append(openssl.backend)
-_default_backend = MultiBackend(_ALL_BACKENDS)
+ return _available_backends_list
+
+
+_default_backend = None
def default_backend():
+ global _default_backend
+
+ if _default_backend is None:
+ _default_backend = MultiBackend(_available_backends())
+
return _default_backend
diff --git a/tests/conftest.py b/tests/conftest.py
index 0069f2c0..36183f46 100644
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -15,7 +15,7 @@ from __future__ import absolute_import, division, print_function
import pytest
-from cryptography.hazmat.backends import _ALL_BACKENDS
+from cryptography.hazmat.backends import _available_backends
from cryptography.hazmat.backends.interfaces import (
HMACBackend, CipherBackend, HashBackend, PBKDF2HMACBackend, RSABackend
)
@@ -25,7 +25,7 @@ from .utils import check_for_iface, check_backend_support, select_backends
def pytest_generate_tests(metafunc):
names = metafunc.config.getoption("--backend")
- selected_backends = select_backends(names, _ALL_BACKENDS)
+ selected_backends = select_backends(names, _available_backends())
if "backend" in metafunc.fixturenames:
metafunc.parametrize("backend", selected_backends)