summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Heimes <cheimes@redhat.com>2018-04-05 08:35:15 +0200
committerChristian Heimes <cheimes@redhat.com>2018-04-10 07:58:52 +0200
commit395a68d20887d0ac010e480e68b225d6dfeff726 (patch)
tree53b84f4051adc0f1b6e2582b98b772d0f279e556
parente279d891fe63043bfa6226c59525036670a464f6 (diff)
downloadfreeipa-395a68d20887d0ac010e480e68b225d6dfeff726.tar.gz
freeipa-395a68d20887d0ac010e480e68b225d6dfeff726.tar.xz
freeipa-395a68d20887d0ac010e480e68b225d6dfeff726.zip
Defer import of ipaclient.csrgen
The modules ipaclient.csrgen and ipaclient.csrgen_ffi are expensive to load, but rarely used. On demand loading speeds up ipa CLI by about 200ms. Fixes: https://pagure.io/freeipa/issue/7484 Signed-off-by: Christian Heimes <cheimes@redhat.com> Reviewed-By: Fraser Tweedale <ftweedal@redhat.com>
-rw-r--r--ipaclient/plugins/cert.py5
-rw-r--r--ipaclient/plugins/csrgen.py12
2 files changed, 9 insertions, 8 deletions
diff --git a/ipaclient/plugins/cert.py b/ipaclient/plugins/cert.py
index 50549cf59..edc132dfa 100644
--- a/ipaclient/plugins/cert.py
+++ b/ipaclient/plugins/cert.py
@@ -23,7 +23,6 @@ import base64
import six
-from ipaclient import csrgen
from ipaclient.frontend import MethodOverride
from ipalib import errors
from ipalib import x509
@@ -111,6 +110,10 @@ class cert_request(CertRetrieveOverride):
password_file = options.pop('password_file', None)
if csr is None:
+ # Deferred import, ipaclient.csrgen is expensive to load.
+ # see https://pagure.io/freeipa/issue/7484
+ from ipaclient import csrgen
+
if database:
adaptor = csrgen.NSSAdaptor(database, password_file)
elif private_key:
diff --git a/ipaclient/plugins/csrgen.py b/ipaclient/plugins/csrgen.py
index 01c75f4bc..5aad63605 100644
--- a/ipaclient/plugins/csrgen.py
+++ b/ipaclient/plugins/csrgen.py
@@ -16,13 +16,6 @@ from ipalib.plugable import Registry
from ipalib.text import _
from ipapython import dogtag
-try:
- import jinja2 # pylint: disable=unused-import
-except ImportError:
- raise errors.SkipPluginModule(reason=_("jinja2 is not installed."))
-else:
- from ipaclient import csrgen
- from ipaclient import csrgen_ffi
if six.PY3:
unicode = str
@@ -79,6 +72,11 @@ class cert_get_requestdata(Local):
)
def execute(self, *args, **options):
+ # Deferred import, ipaclient.csrgen is expensive to load.
+ # see https://pagure.io/freeipa/issue/7484
+ from ipaclient import csrgen
+ from ipaclient import csrgen_ffi
+
if 'out' in options:
util.check_writable_file(options['out'])