BlackJack hat geschrieben:@Hellstorm: Ähm, das ist aber ziemlich kaputt.
Das ``if``/``else`` in der `__init__()` macht keinen Sinn. Wenn das `files`-Argument eine leere Sequenz ist, dann kann man trotzdem die „list comprehension” (LC) ausführen lassen, die würde dann halt eine leere Liste erzeugen. Also mit einer simplen Zeile den selben Effekt.
Hm, ok, das wusste ich nicht, ich werds mal ausprobieren. Danke.
BlackJack hat geschrieben:
Allerdings versucht der `add_file_path()`-Aufruf in der LC etwas an eine Liste anzuhängen die es noch gar nicht gibt als Attribut, weil das Ergebnis der LC, ja erst an dieses Attribut gebunden wird wenn sie fertig ausgewertet ist. Da die Methode `None` zurück gibt, wäre das ausserdem eine Liste mit lauter `None`-Werten, also ziemlich sinnfrei.
Das nächste Problem wäre dann das Dateihandles keine unendlich vorhandene Ressource sind. Einfach mal so eine unbestimmte Anzahl von Dateien auf ”Vorrat” öffnen ist eine ganz schlechte Idee. Diese gesamte ”Vorverarbeitung” verstehe ich auch nicht. Das kann man doch auch dann erledigen wenn es tatsächlich nötig wird.
Ich finde das auch etwas unschön, aber da habe ich einen Grund für: Ich will dort später auch noch BytesIO-Objekte hochladen lassen (wenn mehrere Dateien z.B. vorher gezippt werden). Da Paramiko leider zwei Funktionen zum Hochladen anbietet (put und putfo), hätte ich dann das Problem, dass ich nachher umständlich prüfen müsste,
was denn dort drin steht. Da sowieso keine 3000 Dateien hochgeladen werden würden, dachte ich, dass das ausreicht.
BlackJack hat geschrieben:
Die ganze Klasse ist IMHO komisch. Ich würde das erst mal als Funktionen schreiben und dann sehen ob sich da überhaupt irgend etwas *sinnvoll* zu einem eigenen Datentyp zusammenfassen lässt.
Ich hab das sogar erst als Funktion probiert, aber dann stand ich vor dem Problem, wie ich das denn mit der progressbar (
https://code.google.com/p/python-progressbar/) lösen sollte:
Die put- (bzw. putfo)-Methode erwartet ja eine callback-Funktion mit den zwei Parametern „übertragene Bytes“ und „gesamte Bytes“. Aber wie soll ich in der Funktion denn dann auf das progressbar-Objekt verweisen, wenn man doch tunlichst keine global-Variablen verwenden darf? Normalerweise könnte ich der Funktion ja als dritten Parameter eben das progressbar-Objekt übergeben, aber da die Parameter doch hierbei vorgegeben sind, wüsste ich nicht, wie ich das sonst hätte machen sollen?
Den Rest werde ich mal korrigieren, danke!