diff -r 97908bb79e92 -r 617290a049f0 src/eric7/PipInterface/pipdeptree.py --- a/src/eric7/PipInterface/pipdeptree.py Thu May 11 10:28:18 2023 +0200 +++ b/src/eric7/PipInterface/pipdeptree.py Sat May 13 11:35:51 2023 +0200 @@ -35,6 +35,7 @@ # import argparse +import fnmatch import inspect import json import os @@ -56,8 +57,9 @@ from pip import FrozenRequirement -__version__ = '2.5.2' # eric-ide modification: from version.py - +__version__ = '2.7.1' +__version_tuple__ = (2, 7, 1) +# eric-ide modification: from version.py flatten = chain.from_iterable @@ -390,14 +392,14 @@ m = {} seen = set() for node in self._obj.keys(): - if node.key in exclude: + if any(fnmatch.fnmatch(node.key, e) for e in exclude): continue - if include is None or node.key in include: + if include is None or any(fnmatch.fnmatch(node.key, i) for i in include): stack.append(node) while True: if len(stack) > 0: n = stack.pop() - cldn = [c for c in self._obj[n] if c.key not in exclude] + cldn = [c for c in self._obj[n] if not any(fnmatch.fnmatch(c.key, e) for e in exclude)] m[n] = cldn seen.add(n.key) for c in cldn: @@ -645,19 +647,31 @@ nodes: set[str] = set() edges: set[str] = set() - for pkg, deps in tree.items(): - pkg_label = f"{pkg.project_name}\\n{pkg.version}" - pkg_key = mermaid_id(pkg.key) - nodes.add(f'{pkg_key}["{pkg_label}"]') - for dep in deps: - edge_label = dep.version_spec or "any" - dep_key = mermaid_id(dep.key) - if dep.is_missing: - dep_label = f"{dep.project_name}\\n(missing)" - nodes.add(f'{dep_key}["{dep_label}"]:::missing') - edges.add(f"{pkg_key} -.-> {dep_key}") - else: - edges.add(f'{pkg_key} -- "{edge_label}" --> {dep_key}') + if isinstance(tree, ReversedPackageDAG): + for package, reverse_dependencies in tree.items(): + package_label = "\\n".join( + (package.project_name, "(missing)" if package.is_missing else package.installed_version) + ) + package_key = mermaid_id(package.key) + nodes.add(f'{package_key}["{package_label}"]') + for reverse_dependency in reverse_dependencies: + edge_label = reverse_dependency.req.version_spec or "any" + reverse_dependency_key = mermaid_id(reverse_dependency.key) + edges.add(f'{package_key} -- "{edge_label}" --> {reverse_dependency_key}') + else: + for package, dependencies in tree.items(): + package_label = "\\n".join((package.project_name, package.version)) + package_key = mermaid_id(package.key) + nodes.add(f'{package_key}["{package_label}"]') + for dependency in dependencies: + edge_label = dependency.version_spec or "any" + dependency_key = mermaid_id(dependency.key) + if dependency.is_missing: + dependency_label = f"{dependency.project_name}\\n(missing)" + nodes.add(f'{dependency_key}["{dependency_label}"]:::missing') + edges.add(f"{package_key} -.-> {dependency_key}") + else: + edges.add(f'{package_key} -- "{edge_label}" --> {dependency_key}') # Produce the Mermaid Markdown. indent = " " * 4 @@ -872,12 +886,20 @@ parser.add_argument( "-p", "--packages", - help="Comma separated list of select packages to show " "in the output. If set, --all will be ignored.", + help=( + "Comma separated list of select packages to show in the output. " + "Wildcards are supported, like 'somepackage.*'. " + "If set, --all will be ignored." + ), ) parser.add_argument( "-e", "--exclude", - help="Comma separated list of select packages to exclude " "from the output. If set, --all will be ignored.", + help=( + "Comma separated list of select packages to exclude from the output. " + "Wildcards are supported, like 'somepackage.*'. " + "If set, --all will be ignored." + ), metavar="PACKAGES", ) parser.add_argument(