kleine irc lib

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
DasIch
User
Beiträge: 2402
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

kleine irc lib

Beitragvon DasIch » Samstag 1. November 2008, 17:04

Ich hab mir mal eine kleine IRC Lib geschrieben. Zu finden ist sie hier. Das ganze ist größtenteils nur eine Portierung der Twisted IRC Komponente auf sockets mit imho besserer Unterstützung für mehrere Server.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Re: kleine irc lib

Beitragvon Leonidas » Samstag 1. November 2008, 17:43

DasIch hat geschrieben:nur eine Portierung der Twisted IRC Komponente

Ich fand Twisted.Words IRC blöd insofern, weil sie im Gegensatz zu Twisted eben keine Deferreds verwendet :(
My god, it's full of CARs! | Leonidasvoice vs Modvoice
DasIch
User
Beiträge: 2402
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Beitragvon DasIch » Samstag 1. November 2008, 18:48

Ich hab absolut keine Ahnung was "Deferrds" sind, dass hier?

Wie würdest du dir den Einsatz in dem Zusammenhang vorstellen(Beispiel?)? Da lässt sich ja sicherlich was machen.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Samstag 1. November 2008, 18:56

DasIch hat geschrieben:Ich hab absolut keine Ahnung was "Deferrds" sind, dass hier?

"Deferred"

In Twisted sieht das in der Regel so aus, dass du eine Aktion ausführst und... sie nicht passiert. Stattdessen bekommst du einen Deferred, das ist ein wenig wie ein Versprechen dass die Aktion irgendwann passiert. An diesen Deferred kannst du nun Callbacks binden, die ausgeführt werden wenn die Aktion fehlerfrei durchläuft (die bekommen dann auch die Rückgabewerte der Aktion) oder auch andere Callbacks binden, die aufgerufen werden, wenn Fehler passieren. Ich habe mal ein wenig an Twisted Words IRC gespielt um zu gucken, wie weit man das inzwischen ergänzen könnte, aber das ist bisher nicht weit gekommen. Das zu Unitttesten war ätzend, insbesondere da Twisted da kein einheitliches Interface bietet.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
DasIch
User
Beiträge: 2402
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Beitragvon DasIch » Samstag 1. November 2008, 19:28

Ah ok, also man ändert z.B. den Nickname bekommt vom Server eine Antwort wenn alles ok ist und die Callbacks die an dass deferred gebunden sind werden aufgerufen.

Klingt definitiv interessant und sicherlich eine sehr sinnvolle Sache dass zu haben um das ganze einfacher zu machen. Ich denke ich werde damit mal etwas experimentieren.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Samstag 1. November 2008, 19:39

DasIch hat geschrieben:Ah ok, also man ändert z.B. den Nickname bekommt vom Server eine Antwort wenn alles ok ist und die Callbacks die an dass deferred gebunden sind werden aufgerufen.

Ja. Der Aufruf den Nick zu ändern blockiert in der Zeit nicht, sondern kommt sofort zurück. Man kann natürlich an dieser Stelle nicht davon ausgehen, dass es geklappt hat, aber das kennt man ja aus JavaScript.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
DasIch
User
Beiträge: 2402
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Beitragvon DasIch » Sonntag 2. November 2008, 02:11

So (ungetestet) lib und defer?

Kann natürlich bei weitem nicht soviel wie Twisteds Deferred ist aber imho zumindest momentan noch nicht notwendig.

P.S.:Ja, ich mag Dekoratoren ;)
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Sonntag 2. November 2008, 12:12

DasIch hat geschrieben:So (ungetestet) lib und defer?

Wenn ich jetzt mal in den Code schaue: ja, so ähnlich. Das Problem ist an dieser Stelle, dass du die Callbacks in einer globalen Variable hast, womit Multi-Server-Verbindungen im Moment ausgeschlossen sind. Vielleicht interessiert dich ja mein Twisted Branch, wo ich versucht habe Deferreds in Twisted Words IRC reinzupacken. Das Problem ist bei IRC leider das, dass man nicht weiß was da für eine Antwort auf welchen Request kommt. Insbesondere mit NAMES hatte ich recht viel Ärger. Da müsste man ein wenig Arbeit investieren und masochistisch genug sein, die Unittests weiterzuschreiben (man muss eigene Mock-Objekte definieren, weil irgendwie bei Twisted keiner daran gedacht hat, dass sowas nützlich wäre etc).
My god, it's full of CARs! | Leonidasvoice vs Modvoice
DasIch
User
Beiträge: 2402
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Beitragvon DasIch » Sonntag 2. November 2008, 14:26

Ich bin momentan dabei das ganze mal damit neuzuschreiben. Callbacks werde ich in die ServerConnections legen.

Ich werde einfach allen Aktionen die dass möglich machen einen entsprechenden Dekorator verpassen und die Replys bekommen dann einen mit dem Namen der Aktion.

Ich hab erst überlegt die Twisted Deferreds komplett zu portieren aber der Code ist teilweise hässlich, unnötig kompliziert und es wird sich nicht an PEP 8 gehalten. Also eigentlich wie der Rest von Twisted auch. Noch ein paar Jahre und der Code sieht so aus wie ich mir Windows Quellcode vorstelle aber hey es ist abwärtskomptibel.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Sonntag 2. November 2008, 15:08

DasIch hat geschrieben:Ich hab erst überlegt die Twisted Deferreds komplett zu portieren aber der Code ist teilweise hässlich, unnötig kompliziert und es wird sich nicht an PEP 8 gehalten. Also eigentlich wie der Rest von Twisted auch. Noch ein paar Jahre und der Code sieht so aus wie ich mir Windows Quellcode vorstelle aber hey es ist abwärtskomptibel.

Hrhr, das habe ich mir auch irgendwie gedacht :) Der Vorteil liegt eben darin, dass es massiv viel Code schon gibt. Auch wenn der großteils ätzend ist - ich habe aber keine Ahnung warum genau, denn die Twisted-Leute scheinen gar nicht so blöd zu sein.

Vergiss bitte bei deiner Reimplementation von Twisted nicht, eine gescheite Unittesting-Möglichkeit zu spendieren :) Also irgendwas mit Nose und brauchbarem Mocking.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Beitragvon veers » Sonntag 2. November 2008, 16:37

Code: Alles auswählen

    if not channel[0] in '&#!#':
        return '#' + channel
Warum zwei #?

Ansonsten bist du leider etwas zu spät ;)
Hab mir vor ein paar Tagen selber eine winzige IRC lib geschrieben. :)

Gruss,
Jonas

PS: Wie siehts eigentlich mit der Lizenz auf? ;)
My Website - 29a.ch
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
DasIch
User
Beiträge: 2402
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Beitragvon DasIch » Sonntag 2. November 2008, 16:46

veers hat geschrieben:PS: Wie siehts eigentlich mit der Lizenz auf? ;)

Do What The Fuck To Public License
Wenn schon FLOSS dann richtig ;)

Danke für den Hinweis zu den zwei #, da bin ich eine Taste zu tief gerutscht.
lunar

Beitragvon lunar » Sonntag 2. November 2008, 18:40

Da fehlt noch ein "you want" ;)
DasIch
User
Beiträge: 2402
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Beitragvon DasIch » Montag 3. November 2008, 01:38

So da wären wir. Kann man noch nicht viel mit anfangen aber das Prinzip sollte klar sein. Ich werd mir jetzt erstmal die restlichen 4h + 20min Schlaf die mir noch bleiben gönnen ;)
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

Beitragvon Trundle » Dienstag 4. November 2008, 14:37

DasIch hat geschrieben:P.S.:Ja, ich mag Dekoratoren ;)

Dann könntest du `functools.wraps()` ganz hilfreich finden.
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder