Skip to content
Merged
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
19 changes: 13 additions & 6 deletions ipython2cwl/requirements_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,13 @@
import subprocess
import sys

try:
# Python 3.8+
from importlib import metadata
except ImportError:
# Backport for older Python versions
import importlib_metadata as metadata


class RequirementsManager:
"""
Expand All @@ -20,14 +27,14 @@ def get_all(cls) -> List[str]:
line for line in lines if line and not line.startswith("ipython2cwl")
]
except Exception:
# Fallback to pkg_resources if pip freeze fails
# Fallback to importlib.metadata if pip freeze fails
try:
import pkg_resources

# Get all installed distributions using modern importlib.metadata
distributions = metadata.distributions()
return [
str(package.as_requirement())
for package in pkg_resources.working_set
if package.project_name != "ipython2cwl"
f"{dist.metadata['Name']}=={dist.version}"
for dist in distributions
if dist.metadata['Name'] != "ipython2cwl"
]
except Exception:
return []
3 changes: 3 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,9 @@ addopts = "-ra -q --strict-markers"
testpaths = [
"tests",
]
filterwarnings = [
"ignore:pythonjsonlogger.jsonlogger has been moved to pythonjsonlogger.json:DeprecationWarning",
]

# Coverage configuration
[tool.coverage.run]
Expand Down
34 changes: 27 additions & 7 deletions tests/test_system_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,33 @@
from unittest import TestCase, skipIf

import cwltool.factory
import pkg_resources
try:
# Python 3.8+
from importlib import metadata
except Exception:
# Backport for older Python versions
import importlib_metadata as metadata
import yaml
from cwltool.context import RuntimeContext


# Compatibility helper to load entry points without pkg_resources
def _load_entry_point(dist, group, name):
eps = metadata.entry_points()
try:
# importlib.metadata API (py3.10+)
ep = eps.select(group=group, name=name)
# Convert to tuple to avoid deprecation warning about indexing
ep_tuple = tuple(ep)
except Exception:
# Older importlib_metadata returns a list-like of EntryPoint
ep_tuple = tuple(e for e in eps if getattr(e, 'group', None) == group and e.name == name)

if not ep_tuple:
raise RuntimeError(f"Entry point {name} not found in group {group}")
return ep_tuple[0].load()


class TestConsoleScripts(TestCase):
maxDiff = None
here = os.path.abspath(os.path.dirname(__file__))
Expand All @@ -24,9 +46,8 @@ class TestConsoleScripts(TestCase):
def test_repo2cwl(self):
output_dir = tempfile.mkdtemp()
print(f'output directory:\t{output_dir}')
repo2cwl = pkg_resources.load_entry_point(
'ipython2cwl', 'console_scripts', 'jupyter-repo2cwl'
)
# Load console script entry point using the module-level helper
repo2cwl = _load_entry_point('ipython2cwl', 'console_scripts', 'jupyter-repo2cwl')
self.assertEqual(0, repo2cwl(['-o', output_dir, self.repo_like_dir]))
self.assertListEqual(
['example1.cwl'],
Expand Down Expand Up @@ -64,8 +85,7 @@ def test_repo2cwl(self):

def test_repo2cwl_output_dir_does_not_exists(self):
random_dir_name = str(uuid.uuid4())
repo2cwl = pkg_resources.load_entry_point(
'ipython2cwl', 'console_scripts', 'jupyter-repo2cwl'
)
# Reuse the helper to load the console script
repo2cwl = _load_entry_point('ipython2cwl', 'console_scripts', 'jupyter-repo2cwl')
with self.assertRaises(SystemExit):
repo2cwl(['-o', random_dir_name, self.repo_like_dir])