feat(drives): V2-4 (Teil 2) — main.py laedt unter Windows, Treiber gemessen
Ampel / ampel (push) Failing after 46s
Ampel / ampel (push) Failing after 46s
WAS: rippy/drives/__init__.py waehlt den Treiber fuer DIESE Maschine.
main.py und prescan.py fragen ihn, statt fest den Linux-Treiber zu
importieren. Damit ist der Blocker fuer den nativen Windows-Betrieb weg.
GEMESSEN, vorher (frische Python-3.12-Umgebung unter Windows):
>>> import main
ModuleNotFoundError: No module named 'fcntl'
GEMESSEN, nachher:
main.py laedt unter Windows: JA
Treiber: rippy.drives.windows
Routen: 61
Laufwerke: ['\\.\G:']
Der Import stand in rippy/drives/linux.py -> detection.py -> fcntl. Genau
dafuer gibt es den Port: Der Aufrufer sagt WAS, nicht WIE. test_treiberwahl.py
haelt ausserdem fest, dass BEIDE Treiber denselben Satz Funktionen anbieten —
sonst faellt eine fehlende erst im Betrieb als AttributeError auf, und zwar
auf der anderen Plattform.
DER TREIBER AN ECHTER HARDWARE (LG BU40N extern, Laufwerk G:, LEER):
GetDriveTypeW("G:\\") -> 5 (DRIVE_CDROM)
list_optical_devices() -> ['\\.\G:']
CreateFileW(r"\.\G:") -> Handle 380
CHECK_VERIFY2 bei leerem Laufwerk -> ERROR_NOT_READY (21)
drive_status() -> 1 (CDS_NO_DISC)
detect_disc_type() -> 'no_disc'
device_info()['status'] -> 'empty'
MEDIA_REMOVAL (entriegeln) -> Erfolg, 0,1 ms
EJECT_MEDIA -> Erfolg, 664,8 ms
Die 664,8 ms sind der Beleg, dass wirklich etwas passiert ist: Ein
abgelehnter Steuercode kommt in rund 2 ms zurueck.
BEFUND, DER EIN PLACEBO VERHINDERT HAT: IOCTL_STORAGE_LOAD_MEDIA (Schublade
einziehen) antwortet auf diesem Laufwerk mit ERROR_INVALID_FUNCTION. Bei
flachen und externen Laufwerken ist das die Regel. Deshalb gibt es bewusst
KEINE einziehen()-Funktion — ein Knopf "Schublade schliessen", der auf der
Haelfte aller Laufwerke stillschweigend nichts tut, waere genau die Sorte
Placebo, die in Etappe 19 aufgeraeumt wurde.
Dazu eine DeprecationWarning behoben: '\G' im Docstring ist keine gueltige
Escape-Sequenz und waere in einer kuenftigen Python-Version ein harter Fehler.
NOCH NICHT gemessen: das Verhalten MIT eingelegter Disc (Typ-Erkennung ueber
die Groesse, und ein Auswurf, bei dem wirklich etwas drin ist).
GEMESSEN: ruff sauber, 429 Tests gruen + 13 uebersprungen.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
b723fee3a2
commit
3d7f3b1680
+16
-7
@@ -12,7 +12,7 @@ import time
|
||||
import uuid
|
||||
|
||||
from rippy import store as db
|
||||
from rippy.drives import linux as device_discovery
|
||||
from rippy import drives as laufwerks_schicht
|
||||
import eta
|
||||
from rippy.rip import makemkv_daten
|
||||
import makemkv_key
|
||||
@@ -25,12 +25,7 @@ import phasen
|
||||
import presets as preset_auswahl
|
||||
import rohdaten
|
||||
from celery_client import celery_client, start_rip
|
||||
from rippy.drives.detection import (
|
||||
CDS_DISC_OK,
|
||||
CDS_NO_DISC,
|
||||
CDS_TRAY_OPEN,
|
||||
drive_status,
|
||||
)
|
||||
from rippy.drives.cdrom import CDS_DISC_OK, CDS_NO_DISC, CDS_TRAY_OPEN
|
||||
|
||||
from config_validation import validate_config, ConfigValidationError
|
||||
from cache import get as cache_get, init_cache, set as cache_set
|
||||
@@ -43,6 +38,20 @@ from ratelimit import (
|
||||
)
|
||||
from prescan import PreScan
|
||||
|
||||
# ── Der Laufwerks-Treiber DIESER Maschine ──────────────────────────────
|
||||
#
|
||||
# Bis V2-4 stand hier `from rippy.drives import linux`. Das laedt ueber
|
||||
# detection.py das Modul `fcntl` — und damit war main.py unter Windows
|
||||
# ueberhaupt nicht ladbar (am 28.08.2026 in einer frischen Python-3.12-
|
||||
# Umgebung gemessen: ModuleNotFoundError: No module named 'fcntl').
|
||||
#
|
||||
# Genau dafuer gibt es den Port rippy.ports.Drives: Der Aufrufer sagt, WAS
|
||||
# er will; welcher Treiber das kann, entscheidet rippy/drives/__init__.py.
|
||||
# Die CDS_*-Konstanten oben kommen aus cdrom.py und gelten auf beiden
|
||||
# Plattformen — der Windows-Treiber uebersetzt seine Antworten darauf.
|
||||
device_discovery = laufwerks_schicht.treiber()
|
||||
drive_status = device_discovery.drive_status
|
||||
|
||||
# Auth (JWT/Login/API-Keys) KOMPLETT entfernt — Commander-Entscheid 24.07.2026:
|
||||
# Rippy läuft ausschließlich im Heimnetz, die Endpoints schützten ohnehin
|
||||
# nichts (kein Login-Flow im UI) und waren damit Placebo-Oberfläche.
|
||||
|
||||
Reference in New Issue
Block a user