Ampel-Lauf zu 16df61e rot, und diesmal am Gegenteil:
assert 'Administratorrechte' in 'Statt des Laufwerksbuchstabens den
UNC-Pfad eintragen (\Server\Freigabe).'
`pfade.laufwerk_von` zerlegte den Windows-Pfad jetzt richtig -- aber
`os.path.isdir("C:\")` ist auf Linux immer False, also galt JEDES Laufwerk
als fehlend und der falsche Zweig griff.
Die Frage "existiert Laufwerk Q:" laesst sich auf dem Linux-Runner
ueberhaupt nicht beantworten, dort gibt es keine Laufwerksbuchstaben. Also
gehoert sie in eine eigene, einspritzbare Funktion (`laufwerk_fehlt`) --
ohne die waere der Zweig nur auf einem Windows-Rechner mit genau diesem
fehlenden Laufwerk pruefbar, also nirgends.
Dieselbe Lehre wie bei pruefe_windows heute Vormittag: **Ein
Plattform-Vergleich mitten in einer Funktion macht jeden Einspritzpunkt
davor wertlos.**
Vor dem Push den Linux-Fall lokal nachgestellt (os.name auf "posix"
gesetzt): Program Files, Programme und ein fehlendes Q: landen jetzt alle
im richtigen Zweig.
Ampel lokal: 715 gruen, ruff sauber.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
16df61ea3a
commit
480b658294
@@ -200,7 +200,27 @@ def pruefe_administrator(erhoeht=None, laufwerke=None) -> dict:
|
||||
"(\\\\Server\\Freigabe) oder Rippy ohne Administrator starten.")
|
||||
|
||||
|
||||
def pruefe_schreibrecht(ziel: str, probe=None, erhoeht=None) -> dict:
|
||||
def laufwerk_fehlt(ziel: str, vorhanden=None) -> bool:
|
||||
r"""Zeigt der Pfad auf einen Laufwerksbuchstaben, den es hier nicht gibt?
|
||||
|
||||
`vorhanden` ist einspritzbar — und das ist kein Beiwerk: Die Frage
|
||||
„existiert Laufwerk Q:" laesst sich auf dem Linux-Runner der Ampel gar
|
||||
nicht beantworten, dort gibt es ueberhaupt keine Laufwerksbuchstaben.
|
||||
Ohne Einspritzpunkt waere dieser Zweig nur auf einem Windows-Rechner mit
|
||||
genau dem passenden fehlenden Laufwerk pruefbar — also nirgends.
|
||||
"""
|
||||
laufwerk = pfade.laufwerk_von(ziel or "")
|
||||
if len(laufwerk) != 2 or not laufwerk.endswith(":"):
|
||||
return False # UNC-Pfad oder POSIX
|
||||
if vorhanden is not None:
|
||||
return not vorhanden
|
||||
if os.name != "nt":
|
||||
return False
|
||||
return not os.path.isdir(laufwerk + "\\")
|
||||
|
||||
|
||||
def pruefe_schreibrecht(ziel: str, probe=None, erhoeht=None,
|
||||
laufwerk_da=None) -> dict:
|
||||
"""Darf Rippy dorthin schreiben? Wirklich probiert, nicht geraten.
|
||||
|
||||
Ein `os.access(..., W_OK)` lügt unter Windows: Es beantwortet die Frage
|
||||
@@ -222,8 +242,8 @@ def pruefe_schreibrecht(ziel: str, probe=None, erhoeht=None) -> dict:
|
||||
# ueber `pfade`, nicht ueber `os.path`: Auf dem Linux-Runner der Ampel
|
||||
# kennt `splitdrive` kein "Q:" und gab einen leeren String zurueck --
|
||||
# dieselbe Falle, fuer die es `rippy/pfade.py` gibt. Zum vierten Mal.
|
||||
laufwerk = pfade.laufwerk_von(ziel or "")
|
||||
if laufwerk and len(laufwerk) == 2 and not os.path.isdir(laufwerk + "\\"):
|
||||
if laufwerk_fehlt(ziel, laufwerk_da):
|
||||
laufwerk = pfade.laufwerk_von(ziel or "")
|
||||
# Ein Laufwerksbuchstabe, den es in DIESEM Prozess nicht gibt.
|
||||
zusatz = (" Als Administrator gestartete Programme sehen die "
|
||||
"eingebundenen Netzlaufwerke der Sitzung nicht."
|
||||
|
||||
@@ -114,9 +114,13 @@ def test_als_administrator_wird_vor_den_fehlenden_netzlaufwerken_gewarnt():
|
||||
def test_fehlendes_laufwerk_wird_beim_namen_genannt():
|
||||
"""„Schreibrechte fehlen" war richtig im Wortlaut und unbrauchbar als
|
||||
Auskunft: Das Laufwerk war fuer den erhoehten Prozess gar nicht da."""
|
||||
# `laufwerk_da=False` eingespritzt: Die Frage "existiert Q:" laesst sich
|
||||
# auf dem Linux-Runner der Ampel gar nicht beantworten. Ohne den
|
||||
# Einspritzpunkt waere dieser Zweig nur auf einem Windows-Rechner mit
|
||||
# genau diesem fehlenden Laufwerk pruefbar -- also nirgends.
|
||||
befund = e.pruefe_schreibrecht(
|
||||
"Q:" + chr(92) + "Rippy", probe=(False, "Pfad nicht gefunden"),
|
||||
erhoeht=True)
|
||||
erhoeht=True, laufwerk_da=False)
|
||||
assert befund["zustand"] == e.FEHLER
|
||||
assert "Q:" in befund["text"]
|
||||
assert "nicht vorhanden" in befund["text"]
|
||||
@@ -261,3 +265,16 @@ def test_netzwerkpfad_ohne_administrator_bekommt_die_normale_meldung():
|
||||
erhoeht=False)
|
||||
assert befund["zustand"] == e.FEHLER
|
||||
assert "Administrator" not in befund["abhilfe"] or "keine" in befund["abhilfe"]
|
||||
|
||||
|
||||
def test_ein_vorhandenes_laufwerk_ist_kein_laufwerks_problem():
|
||||
"""Sonst waere JEDER Schreibfehler auf C: ein 'Laufwerk fehlt'."""
|
||||
B = chr(92)
|
||||
assert e.laufwerk_fehlt("C:" + B + "Programme", vorhanden=True) is False
|
||||
assert e.laufwerk_fehlt("Q:" + B + "Rippy", vorhanden=False) is True
|
||||
|
||||
|
||||
def test_unc_und_posix_sind_keine_laufwerksbuchstaben():
|
||||
B = chr(92)
|
||||
assert e.laufwerk_fehlt(B + B + "NAS" + B + "Filme") is False
|
||||
assert e.laufwerk_fehlt("/srv/rippy") is False
|
||||
|
||||
Reference in New Issue
Block a user