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.