Skip to content

Commit 7e5159e

Browse files
author
Sychevskyi Henadii
committed
No module named 'pkg_resources'
1 parent 02dc540 commit 7e5159e

3 files changed

Lines changed: 108 additions & 6 deletions

File tree

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
# coding: utf-8
2+
"""
3+
Discover mkdocs entry points without pkg_resources (stdlib importlib.metadata).
4+
5+
Used when setuptools is not installed and ``import pkg_resources`` fails.
6+
"""
7+
from __future__ import unicode_literals
8+
9+
import sys
10+
11+
from importlib.metadata import distribution, entry_points, distributions
12+
13+
14+
def _dist_key_from_dist(dist):
15+
name = dist.metadata.get('Name', '') or getattr(dist, 'name', '') or ''
16+
part = name.split(';')[0].split(',')[0].strip()
17+
first = part.split()[0] if part else ''
18+
if first:
19+
return first.lower().replace('-', '_')
20+
return getattr(dist, 'name', 'unknown').lower().replace('-', '_')
21+
22+
23+
def _dist_key_for_ep(ep):
24+
for dist in distributions():
25+
try:
26+
des = dist.entry_points
27+
except Exception:
28+
continue
29+
for cand in des:
30+
if cand.name == ep.name and cand.group == ep.group and cand.value == ep.value:
31+
return _dist_key_from_dist(dist)
32+
return 'unknown'
33+
34+
35+
class _CompatDist(object):
36+
__slots__ = ('key',)
37+
38+
def __init__(self, key):
39+
self.key = key
40+
41+
42+
class _CompatEP(object):
43+
__slots__ = ('_ep', 'name', 'dist')
44+
45+
def __init__(self, ep, dist_key):
46+
self._ep = ep
47+
self.name = ep.name
48+
self.dist = _CompatDist(dist_key)
49+
50+
def load(self):
51+
return self._ep.load()
52+
53+
54+
def get_entry_map(dist=None, group=None):
55+
"""Subset of pkg_resources.get_entry_map(dist=..., group=...)."""
56+
if dist is None or group is None:
57+
raise TypeError('dist and group are required')
58+
d = distribution(dist)
59+
dk = _dist_key_from_dist(d)
60+
out = {}
61+
for ep in d.entry_points:
62+
if ep.group == group:
63+
out[ep.name] = _CompatEP(ep, dk)
64+
return out
65+
66+
67+
def _entry_points_in_group(group):
68+
if sys.version_info >= (3, 10):
69+
return entry_points(group=group)
70+
eps = entry_points()
71+
if hasattr(eps, 'select'):
72+
return eps.select(group=group)
73+
try:
74+
return eps[group]
75+
except (KeyError, TypeError):
76+
return []
77+
78+
79+
def iter_entry_points(group=None):
80+
"""Subset of pkg_resources.iter_entry_points(group=...)."""
81+
if group is None:
82+
raise TypeError('group is required')
83+
for ep in _entry_points_in_group(group):
84+
yield _CompatEP(ep, _dist_key_for_ep(ep))

3rdparty/mkdocs/mkdocs/plugins.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,10 @@
77

88
from __future__ import unicode_literals
99

10-
import pkg_resources
10+
try:
11+
import pkg_resources
12+
except ImportError:
13+
pkg_resources = None
1114
import logging
1215
from collections import OrderedDict
1316

@@ -27,7 +30,12 @@
2730
def get_plugins():
2831
""" Return a dict of all installed Plugins by name. """
2932

30-
plugins = pkg_resources.iter_entry_points(group='mkdocs.plugins')
33+
if pkg_resources is not None:
34+
plugins = pkg_resources.iter_entry_points(group='mkdocs.plugins')
35+
else:
36+
from mkdocs.entrypoints_compat import iter_entry_points
37+
38+
plugins = iter_entry_points(group='mkdocs.plugins')
3139

3240
return dict((plugin.name, plugin) for plugin in plugins)
3341

3rdparty/mkdocs/mkdocs/utils/__init__.py

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,10 @@
1111

1212
import logging
1313
import os
14-
import pkg_resources
14+
try:
15+
import pkg_resources
16+
except ImportError:
17+
pkg_resources = None
1518
import shutil
1619
import re
1720
import sys
@@ -376,10 +379,17 @@ def get_theme_dir(name):
376379
def get_themes():
377380
""" Return a dict of all installed themes as (name, entry point) pairs. """
378381

379-
themes = {}
380-
builtins = pkg_resources.get_entry_map(dist='mkdocs', group='mkdocs.themes')
382+
if pkg_resources is not None:
383+
builtins = pkg_resources.get_entry_map(dist='mkdocs', group='mkdocs.themes')
384+
ep_iter = pkg_resources.iter_entry_points(group='mkdocs.themes')
385+
else:
386+
from mkdocs.entrypoints_compat import get_entry_map, iter_entry_points
381387

382-
for theme in pkg_resources.iter_entry_points(group='mkdocs.themes'):
388+
builtins = get_entry_map(dist='mkdocs', group='mkdocs.themes')
389+
ep_iter = iter_entry_points(group='mkdocs.themes')
390+
391+
themes = {}
392+
for theme in ep_iter:
383393

384394
if theme.name in builtins and theme.dist.key != 'mkdocs':
385395
raise exceptions.ConfigurationError(

0 commit comments

Comments
 (0)