Hi,
schonmal Vielen Dank für Deine Antwort.
@maxi_king_333: Wenn man sich erst einmal an den Style Guide gewöhnt hat, und auch daran, dass den die meisten anderen auch befolgen, dann fällt es immer unangenehm auf, wenn jemand das nicht tut. Tabs statt Leerzeichen zum Einrücken, keine Leerzeichen um Operatoren und nach Kommas, kleingeschriebene Klassennamen -- da könntest Du mal was dran ändern
Laut PEP8 darf ich auch Tabs benutzen.
Ich mag die lieber, da ich die einfacher wieder wegbekomme.
Die Klasse os oder sys werden auch klein geschrieben, ich bin mir noch nicht so ganz klar darüber, warum die unbedingt groß sein müssen.
Mit den Operatoren naja, irgendwie finde ich das seltsam, wenn da Leerzeichen drin sind.
Werde aber trotzdem alles bis auf die Tabs ändern.
Wenn Du dauernd Sternchen beim Importieren benutzt, kanns Du auch gleich alles in eine Datei schreiben! Vielleicht ist Dir ja gar nicht bewusst, dass Du in `fbcallnotify` all das hier unnütz importierst: `string`, `random`, `notify`, `socket`, `notifyer`, `threading`, `os`, und `notify_thread`. `sys` wird explizit importiert, aber auch nicht verwendet.
Tue ich das?
War mir echt nicht bewusst, wird geändert.
Wobei ich mir nicht sicher bin, ob immer garantiert ist, dass man bei dem `recv()`-Aufruf Datenblöcke ganze Zeilen bekommt, und nicht auch mal eine Zeile über zwei `recv()`-Aufrufe verteilt sein kann!? Das sollte man klären.
Die FritzBox versendet die eigentlich so.
Also da kommen auch manchmal 2 Zeilen an, deshalb trenne ich die ja.
Kommen wir zur `genrandomid()` -- die sowohl in `parse` als auch in `notifyer` definiert ist und in beiden Fällen in einer Klasse steckt, ohne auf diese wirklich angewiesen zu sein. Das ist also eine Funktion und keine Methode und könnte irgendwo extra definiert werden, wenn sie von verschiedenen Stellen aus verwendet wird.
Mach ich...
Zum Inhalt der Funktion: Was soll das? Zwei Zufallswerte aus dem gleichen Bereich erst in ein Dictionary stecken um sie dann zu addieren!? Das ist eine sehr umständliche Art ``random.randint(10000, 99999) + random.randint(10000, 99999)`` zu schreiben. Bleibt immer noch die Frage warum Du absichtlich "schlechte" Zufallszahlen erzeugst, denn die sind durch die Addition ja nicht mehr gleichverteilt.
Tja, ich dachte eigentlich die würde er aneinander hängen.
Ich erzeuge 2, da ich irgendwie mit nur einer keine 10 Stelligen Zahlen hinbekomme.
Und dann habe ich echt nicht verstanden was Du da eigentlich machen willst. Du hast `notifyier`-Objekte, die als Thread laufen um dann ihrerseits noch einmal jeweils einen Thread zu starten!? Warum das? Die haben ein Dictionary namens `notify` welches immer nur zwei ein Elemente enthält -- wenn man wegen der Zufallszahlen kein Pech hat. Was soll das Dictionary und warum steckst Du da Objekte rein? Warum mit Zufallszahlen als Schlüssel? Das gleiche gilt für `parse` -- warum das `notifyer`-Dictionary? Du greifst bei beiden nie wieder auf die Daten zu.
Im Moment erscheint es Sinnlos, aber da später der User verschiedene Notify Events festlegen können soll, die dann entweder einfach gestartet werden oder gewartet wird, bis sie fertig sind.
Deshalb die Klassen notify und notify_thread.
Da sollen später noch Dinge rein wie: "Auf der Shell ausführen" oder "Notify über Libnotify".
Die Klasse Notifyer liest später die Konfiguration ein und führt danach dann die Notify Events aus.
Da es sich um einen Anrufmonitor handelt und da auch mal ein ausgehender und ein ankommender Anruf gleichzeitig kommen können, muss der Notifyer ein Thread sein, damit ich quasi gleichzeitig eine Notify über Libnotify (es ruft einer an) bekommt und ein (ich rufe an - Musik aus).
Was ist der Sinn der `notify`-Objekte? Das könnte eine Funktion sein, aber doch keine Klasse.
Da hast Du Recht, aber wie starte ich eine Funktion als Thread?
Alles, was ich im Web gefunden habe, hat bei mir nicht wie gewünscht funktioniert.
Allerdings bräuchte ich dann nicht eine Funktion sondern entweder mindestens 3 oder 6, jeh nachdem, wie ich die Funktion als Thread starte...
Die `Queue` würde ich übrigens nicht `pool` nennen, das ist von der Semantik her eine Jobqueue und kein Pool von Ressourcen, was man bei dem Namen `pool` eher erwarten würde.
Wird umbenannt.
Die `parse.run()` könnte man etwas mehr OOP gestalten. Zum Beispiel in dem man dynamisch `handle`-Methoden auf `parse`-Exemplaren aufruft, je nach Inhalt von ``info[2]``, was man auch an einen sprechenden Namen binden könnte, und die Werte im `connections`-Dictionary könnte man auch als Objekte modellieren.
Noch mehr Klasen bzw. Objekte?
Mal schauen, vielleicht kann ich ja etwas zusammenlegen.
In Zeile 52 gibt's übrigens ein Problem mit `indo` was wohl `info` heissen sollte.
Habe ich garnicht bemerkt, danke.
Viele Grüße
Maxi
P.S. Der Code ist noch nicht angepasst, mache ich jetzt aber.