Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 25 additions & 2 deletions ccm
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ import os
import sys
import warnings

import pkg_resources
from six import print_

from ccmlib import common
Expand All @@ -29,6 +28,14 @@ from ccmlib.cmds.common import get_command
from ccmlib.remote import (PARAMIKO_IS_AVAILABLE, execute_ccm_remotely,
get_remote_options, get_remote_usage)

try: # Python 3.8+
from importlib.metadata import entry_points
except ImportError: # pragma: no cover - fallback for older Pythons
try:
from importlib_metadata import entry_points # type: ignore
except ImportError:
entry_points = None


def print_subcommand_usage(kind):
for cmd_name in (cluster_cmds if kind.lower() == 'cluster' else node_cmds).commands():
Expand Down Expand Up @@ -58,7 +65,23 @@ def print_global_usage():
exit(1)


for entry_point in pkg_resources.iter_entry_points(group='ccm_extension'):
def _iter_ccm_extension_entry_points():
if entry_points is None:
warnings.warn("importlib.metadata not available; skipping ccm_extension entry points")
return []

eps = entry_points()

if hasattr(eps, 'select'): # modern importlib.metadata
return eps.select(group='ccm_extension')

if isinstance(eps, dict): # older importlib_metadata returns dict
return eps.get('ccm_extension', [])

return [ep for ep in eps if getattr(ep, 'group', None) == 'ccm_extension']


for entry_point in _iter_ccm_extension_entry_points():
entry_point.load()()

common.check_win_requirements()
Expand Down
2 changes: 1 addition & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,4 @@ pyYaml<5.4; python_version < '3'
pyYaml; python_version >= '3'
six >=1.4.1
psutil

importlib_metadata>=0.23; python_version < '3.8'