Rope

Rope ist eine Python-Refactoring-Bibliothek.

Installation

Rope kann einfach installiert werden mit

$ uv add install rope

Nutzung

Nun importieren wir zunächst den Project-Typ und instanziieren ihn mit dem Pfad zum Projekt:

[1]:
from rope.base.project import Project


proj = Project("requests")

Dies erstellt dann einen Projektordner mit dem Namen .ropeproject in unserem Projekt.

[2]:
[f.name for f in proj.get_files()]
[2]:
['hooks.py',
 'utils.py',
 '_internal_utils.py',
 'status_codes.py',
 '__version__.py',
 'sessions.py',
 'api.py',
 'cookies.py',
 'adapters.py',
 'certs.py',
 'exceptions.py',
 'api_v1.py',
 'auth.py',
 'help.py',
 'structures.py',
 'compat.py',
 'packages.py',
 '__init__.py',
 'models.py']

Die proj-Variable kann eine Reihe von Befehlen ausführen wie get_files und get_file. Im folgenden Beispiel nutzen wir dies um der Datei api.py die Variable api zuzuweisen.

[3]:
!git clone -q https://github.com/psf/requests.git && cp requests/src/requests/api.py requests/src/requests/api_v1.py
[4]:
api = proj.get_file("api.py")
[5]:
from rope.refactor.rename import Rename


change = Rename(proj, api).get_changes("api_v1")

proj.do(change)
[6]:
!cd requests && git status
Auf Branch main
Änderungen, die nicht zum Commit vorgemerkt sind:
  (benutzen Sie "git add <Datei>...", um die Änderungen zum Commit vorzumerken)
  (benutzen Sie "git restore <Datei>...", um die Änderungen im Arbeitsverzeichnis zu verwerfen)
        geändert:       __init__.py

Unversionierte Dateien:
  (benutzen Sie "git add <Datei>...", um die Änderungen zum Commit vorzumerken)
        .ropeproject/
        api_v1.py

keine Änderungen zum Commit vorgemerkt (benutzen Sie "git add" und/oder "git commit -a")
[7]:
!cd requests && git diff __init__.py
diff --git a/__init__.py b/__init__.py
index f8f9429..502e33a 100644
--- a/__init__.py
+++ b/__init__.py
@@ -118,7 +118,7 @@ from .__version__ import __copyright__, __cake__
 from . import utils
 from . import packages
 from .models import Request, Response, PreparedRequest
-from .api import request, get, head, post, patch, put, delete, options
+from .api_v1 import request, get, head, post, patch, put, delete, options
 from .sessions import session, Session
 from .status_codes import codes
 from .exceptions import (

Mit proj.do(change) ist also die Datei requests/__init__.py so geändert worden, dass von new_api anstatt von api importiert wird.

Rope kann nicht nur zum Umbenennen von Dateien verwendet werden, sondern auch für hunderte anderer Fälle; siehe auch Rope Refactorings.