Und wie ordnerst du den NAME-Reply den richtigen Deferred zu? Spätestens wenn jemand einen Channel anfordert und danach alle, weißt du nicht welche Antwort zu welchem Request gehört.DasIch hat geschrieben:Hm, daran hab ich nicht gedacht, allerdings könnte ich meinen Wrapper anpassen dann passt dass wieder.
kleine irc lib
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Das war quick'n'dirty und auf jedenfall kürzer als dein Codestr1442 hat geschrieben:Warum verwendest du locals?

Bisschen großer Aufwand für Informationen die statisch vorliegen könnten oder?Ersetz doch einfach jeden Namen mit dem fertig konfigurierten Objekt in dem dict. Ausnahmebehandlung geht dann direkt über dict Zugriff.
Wieder jede Menge Code dafürUnd das "copy" Zeug da würd ich in eine "clone" Methode des Exception Prototyps auslagern.

Ich hatte keine Lust die alle selbst einzutippen. Inzwischen hab ich mir den Code einmal komplett generieren lassen und hab nun ein exc Modul wo die ganzen Exceptions drin sind. War mit einem kleinen Skript schnell erledigt und die Lösung ist imho am sinnvollsten.Übringens habe ich prototyping durch die Sprache Io vor kurzem zu Schätzen gelernt, insofern empfinde ich das als nichts, wofür man sich entschuldigen müsste (und "to much stupid code" meint wogl zig Subklassen?)
Welche vielen Strings?Die vielen Strings unbedingt noch in Konstante, globale Variablen umwandeln.
Ja. damit werden die Nachrichten voneinander getrennt, dafür brauche ich aber keine Konstante. Das wäre ja als ob man sich SQL Strings selbst zusammensetzt.Insbesondere "\r\n" macht bei sowas viel Spaß. Ist das eigentlich was IRC internes?
Ich gehe mal davon aus dass der Server die Replys nicht willkürlich durcheinander schickt, dann wäre es tatsächlich unmöglich. Wenn ich die RPL_ENDOFNA MES bekomme sollte es möglich sein die vorher erhaltenen RPL_NAMREPLYs anhand der übergebenen Argumente zuzuordnen.Leonidas hat geschrieben:Spätestens wenn jemand einen Channel anfordert und danach alle, weißt du nicht welche Antwort zu welchem Request gehört.
Wobei ich sowieso vorhabe einfach JOIN, PART und QUIT Nachrichten zu verfolgen und so selbst eine lokale User Liste vorzuhalten für die Channels in denen ich bin. NAMES sendet mir sowieso nur Informationen über User die ich sowieso sehe.
Wenn man eine Liste der Nicks für einen IRC Client oder so haben will, bleibt mir sowieso nichts anderes übrig. Man kann ja schlecht alle paar Minuten ein NAMES an den Server schicken.
Und die Ersparnis von vielleicht 10 Zeilen spricht nun für locals? Warum benutzt du dann nicht gleichDas war quick'n'dirty und auf jedenfall kürzer als dein Code Wink
Code: Alles auswählen
setattr(__builtins__, numeric_to_symbolic[number], eval("type(%s, (Exception,), {})" % numeric_to_symbolic[number])
Codegenerierung ist idR keine gute Idee. Damit machst du Dinge nur unnötig statisch, unanpassbar, unmaintainable weil groß.Ich hatte keine Lust die alle selbst einzutippen. Inzwischen hab ich mir den Code einmal komplett generieren lassen und hab nun ein exc Modul wo die ganzen Exceptions drin sind. War mit einem kleinen Skript schnell erledigt und die Lösung ist imho am sinnvollsten.
Warum willst du es überhaupt statisch haben?
Ist ja nicht so, das ich hier von 400 extra Zeilen spreche.
14 Zeilen? Erzähl mir nicht, deine Ausflüge in die Metaprogrammierung ergaben kürzeres.Wieder jede Menge Code dafür![]()
In parse(). Gut, globals müssens nicht sein, aber locals vielleicht. ":" und " :" sind zb kontextbehaftet, und sowas sollte man imho immer mit einem Variablennamen versehen, der natürlich auch gut benannt ist. Liest sich besser, macht keinen Aufwand und solltest du die Funktion erweitern wollen, ist das auch einfacher. Dann überprüfst du in "to_irc" direkt mit einem hardgecodeten String, ob eben dieser im Dict zu finden ist. Das ist doch wieder vom Kontext komplett losgelöst. Irgendein Dict kommt rein, irgendein hardgecodeter String wird benutzt, der per se mit dem Rest des Programmes höchstens semantisch etwas zu tun hat. Sowas gehört imho in globale Variablen.Welche vielen Strings?
Rein prinzipiell würde ich für sowas Konstanten benutzen. Aus oben genannten Gründen. Was du da machst, ist (wenn im größeren Stil eingesetzt) in etwa so, wie jeden String aus Gründen des Speichersparens in einem Programm komplett auszuschreiben, nur weil man weiß, das höchstwahrscheinlich keine anderen Strings irgendwo ankommen. Oder überall lambda Statements statt Funktionen und die auch nicht in Variablen festzuhalten. Klingt jetzt extrem, aber so rein prinzipiell...Ja. damit werden die Nachrichten voneinander getrennt, dafür brauche ich aber keine Konstante. Das wäre ja als ob man sich SQL Strings selbst zusammensetzt.
Richtig, aber beim IRC Protokoll wird sich nicht alle paar Wochen was ändern.str1442 hat geschrieben:Codegenerierung ist idR keine gute Idee. Damit machst du Dinge nur unnötig statisch, unanpassbar, unmaintainable weil groß.
Warum willst du es überhaupt statisch haben?
Genauso sieht es mit den IRC Messages aus, die werden auch noch ewig so aussehen ohne dass sich daran irgendwas grundlegendes ändert. Statt irgendwelche Konstanten zu verwenden die den Code verständlicher machen sollen, schreibe ich lieber gleich Kommentare, die dass ganze erklären. Dann bekomme ich auch nicht solche Probleme
