src/eric7/PipInterface/pipdeptree.py

branch
eric7
changeset 10026
617290a049f0
parent 9849
99782ca569ed
child 10119
64147a7e6393
--- 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(

eric ide

mercurial