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>
This commit is contained in:
Christian Heimes
2018-04-05 08:35:15 +02:00
parent e279d891fe
commit 395a68d208
2 changed files with 9 additions and 8 deletions

View File

@@ -23,7 +23,6 @@ import base64
import six import six
from ipaclient import csrgen
from ipaclient.frontend import MethodOverride from ipaclient.frontend import MethodOverride
from ipalib import errors from ipalib import errors
from ipalib import x509 from ipalib import x509
@@ -111,6 +110,10 @@ class cert_request(CertRetrieveOverride):
password_file = options.pop('password_file', None) password_file = options.pop('password_file', None)
if csr is 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: if database:
adaptor = csrgen.NSSAdaptor(database, password_file) adaptor = csrgen.NSSAdaptor(database, password_file)
elif private_key: elif private_key:

View File

@@ -16,13 +16,6 @@ from ipalib.plugable import Registry
from ipalib.text import _ from ipalib.text import _
from ipapython import dogtag 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: if six.PY3:
unicode = str unicode = str
@@ -79,6 +72,11 @@ class cert_get_requestdata(Local):
) )
def execute(self, *args, **options): 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: if 'out' in options:
util.check_writable_file(options['out']) util.check_writable_file(options['out'])