Class PyProjectHelper

java.lang.Object
org.openrewrite.python.internal.PyProjectHelper

public class PyProjectHelper extends Object
Shared utilities for Python dependency recipes operating on pyproject.toml files.
  • Constructor Details

    • PyProjectHelper

      public PyProjectHelper()
  • Method Details

    • extractPackageName

      public static @Nullable String extractPackageName(String pep508Spec)
      Extract the package name from a PEP 508 dependency spec string. The name is the first token before any version specifier, extras, or marker.
    • correspondingPyprojectPath

      public static String correspondingPyprojectPath(String uvLockPath)
      Derive the pyproject.toml path that corresponds to a uv.lock path.
    • reparseToml

      public static org.openrewrite.toml.tree.Toml.Document reparseToml(org.openrewrite.toml.tree.Toml.Document original, String newContent)
      Reparse a TOML document from new content while preserving the original document's identity (id) and markers.
    • regenerateLockAndRefreshMarker

      public static org.openrewrite.toml.tree.Toml.Document regenerateLockAndRefreshMarker(org.openrewrite.toml.tree.Toml.Document updated, Map<String,String> updatedLockFiles)
      After modifying a pyproject.toml document, regenerate the uv.lock file and refresh the PythonResolutionResult marker. Returns the updated document.
      Parameters:
      updated - the modified pyproject.toml document
      updatedLockFiles - map to store regenerated lock content keyed by pyproject path
      Returns:
      the document with refreshed marker (and possibly a warning markup)
    • isInsideProjectDependencies

      public static boolean isInsideProjectDependencies(org.openrewrite.Cursor cursor)
      Check whether a cursor path represents a position inside the [project].dependencies array in a pyproject.toml.
    • isInsideDependencyArray

      public static boolean isInsideDependencyArray(org.openrewrite.Cursor cursor, @Nullable String scope, @Nullable String groupName)
      Check whether a cursor path represents a position inside a dependency array for the given scope and optional group name.

      Scope values use TOML dotted-key path syntax:

      • null or "project.dependencies"[project].dependencies
      • "build-system.requires"[build-system].requires
      • "project.optional-dependencies"[project.optional-dependencies].<groupName>
      • "dependency-groups"[dependency-groups].<groupName>
      • "tool.uv.constraint-dependencies"[tool.uv].constraint-dependencies
      • "tool.uv.override-dependencies"[tool.uv].override-dependencies
    • findDependencyInScope

      public static @Nullable PythonResolutionResult.Dependency findDependencyInScope(PythonResolutionResult marker, String packageName, @Nullable String scope, @Nullable String groupName)
      Find a dependency in the specified scope of the marker.
      Parameters:
      marker - the resolution result marker
      packageName - the package name to find
      scope - the scope to search (null means project.dependencies)
      groupName - the group name (required for optional-dependencies and dependency-groups)
      Returns:
      the dependency, or null if not found
    • isInsidePdmOverridesTable

      public static boolean isInsidePdmOverridesTable(org.openrewrite.Cursor cursor)
      Check whether a cursor path represents a position inside the [tool.pdm.overrides] table in a pyproject.toml.