summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAarni Koskela <akx@iki.fi>2022-05-24 15:43:57 +0200
committerGitHub <noreply@github.com>2022-05-24 09:43:57 -0400
commite958ec4141be98c7d04622f5f2cad5e60e765e53 (patch)
tree7c8bb90b726cdf397d943b7711ccde099ba85a9a
parent12c3378ab9a46fae416a7bb5549e3f123a11d22a (diff)
downloadpython-markdown-e958ec4141be98c7d04622f5f2cad5e60e765e53.tar.gz
Only enumerate extension entry points when required
-rw-r--r--docs/change_log/release-3.4.md2
-rw-r--r--markdown/core.py2
-rw-r--r--markdown/util.py20
3 files changed, 14 insertions, 10 deletions
diff --git a/docs/change_log/release-3.4.md b/docs/change_log/release-3.4.md
index 7a30de5..7abdf5d 100644
--- a/docs/change_log/release-3.4.md
+++ b/docs/change_log/release-3.4.md
@@ -66,3 +66,5 @@ The following new features have been included in the 3.4 release:
## Bug fixes
The following bug fixes are included in the 3.4 release:
+
+* Extension entry-points are only loaded if needed (#1216).
diff --git a/markdown/core.py b/markdown/core.py
index d8c8196..3ed674a 100644
--- a/markdown/core.py
+++ b/markdown/core.py
@@ -150,7 +150,7 @@ class Markdown:
"""
configs = dict(configs)
- entry_points = [ep for ep in util.INSTALLED_EXTENSIONS if ep.name == ext_name]
+ entry_points = [ep for ep in util.get_installed_extensions() if ep.name == ext_name]
if entry_points:
ext = entry_points[0].load()
return ext(**configs)
diff --git a/markdown/util.py b/markdown/util.py
index 4c690c0..a6a32bf 100644
--- a/markdown/util.py
+++ b/markdown/util.py
@@ -24,17 +24,11 @@ import sys
import warnings
import xml.etree.ElementTree
from collections import namedtuple
-from functools import wraps
+from functools import wraps, lru_cache
from itertools import count
from .pep562 import Pep562
-if sys.version_info >= (3, 10):
- from importlib import metadata
-else:
- # <PY310 use backport
- import importlib_metadata as metadata
-
PY37 = (3, 7) <= sys.version_info
@@ -84,8 +78,6 @@ Constants you probably do not need to change
-----------------------------------------------------------------------------
"""
-# Only load extension entry_points once.
-INSTALLED_EXTENSIONS = metadata.entry_points(group='markdown.extensions')
RTL_BIDI_RANGES = (
('\u0590', '\u07FF'),
# Hebrew (0590-05FF), Arabic (0600-06FF),
@@ -101,6 +93,16 @@ AUXILIARY GLOBAL FUNCTIONS
"""
+@lru_cache(maxsize=None)
+def get_installed_extensions():
+ if sys.version_info >= (3, 10):
+ from importlib import metadata
+ else: # <PY310 use backport
+ import importlib_metadata as metadata
+ # Only load extension entry_points once.
+ return metadata.entry_points(group='markdown.extensions')
+
+
def deprecated(message, stacklevel=2):
"""
Raise a DeprecationWarning when wrapped function/method is called.