aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPaul Kehrer <paul.l.kehrer@gmail.com>2015-08-04 07:57:50 +0100
committerPaul Kehrer <paul.l.kehrer@gmail.com>2015-08-04 07:57:50 +0100
commita30f8b29973761452acff6488007774895595983 (patch)
tree5a45f75de5b8926144fdcd2f12ffba04d7dbfa27 /src
parentb66b67da40345296197227d98a33384d6b15b6ec (diff)
downloadcryptography-a30f8b29973761452acff6488007774895595983.tar.gz
cryptography-a30f8b29973761452acff6488007774895595983.tar.bz2
cryptography-a30f8b29973761452acff6488007774895595983.zip
change approach for pypy performance reasons
Diffstat (limited to 'src')
-rw-r--r--src/cryptography/hazmat/bindings/openssl/binding.py25
1 files changed, 13 insertions, 12 deletions
diff --git a/src/cryptography/hazmat/bindings/openssl/binding.py b/src/cryptography/hazmat/bindings/openssl/binding.py
index f9a6ba0f..e18d89c5 100644
--- a/src/cryptography/hazmat/bindings/openssl/binding.py
+++ b/src/cryptography/hazmat/bindings/openssl/binding.py
@@ -6,6 +6,7 @@ from __future__ import absolute_import, division, print_function
import os
import threading
+import types
from cryptography.hazmat.bindings._openssl import ffi, lib
from cryptography.hazmat.bindings.openssl._conditional import CONDITIONAL_NAMES
@@ -24,18 +25,18 @@ def _osrandom_rand_status():
return 1
-class _ConditionalLibrary(object):
- def __init__(self, lib, conditional_names):
- excluded_names = set()
- for condition, names in conditional_names.items():
- if not getattr(lib, condition):
- excluded_names |= set(names)
+def build_conditional_library(lib, conditional_names):
+ conditional_lib = types.ModuleType("lib")
+ excluded_names = set()
+ for condition, names in conditional_names.items():
+ if not getattr(lib, condition):
+ excluded_names |= set(names)
- for attr in dir(lib):
- if attr in excluded_names:
- continue
- else:
- setattr(self, attr, getattr(lib, attr))
+ for attr in dir(lib):
+ if attr not in excluded_names:
+ setattr(conditional_lib, attr, getattr(lib, attr))
+
+ return conditional_lib
class Binding(object):
@@ -89,7 +90,7 @@ class Binding(object):
def _ensure_ffi_initialized(cls):
with cls._init_lock:
if not cls._lib_loaded:
- cls.lib = _ConditionalLibrary(lib, CONDITIONAL_NAMES)
+ cls.lib = build_conditional_library(lib, CONDITIONAL_NAMES)
cls._lib_loaded = True
cls._register_osrandom_engine()