diff options
Diffstat (limited to 'README')
-rw-r--r-- | README | 62 |
1 files changed, 62 insertions, 0 deletions
@@ -0,0 +1,62 @@ +Pytest for Irssi + +This module embeds Python into an Irssi module. It provides just enough of an +interface to port the hello.pl example from the Perl docs to Python. There are +still a lot of things needed to be done, and some design issues to work out. +See the scripts/ directory for two small example scripts. + +To compile: + So far I've compiled it on Debian i386 and on FreeBSD i386. Haven't tried + elsewhere. The Makefile will need to be edited for it to be compiled. It + requires Python 2.4 installed. Put libpytest.so wherever Irssi recognizes + modules. + +In pytest so far: + -Looks for scripts in ~/.irssi/pyscripts + -Created base object wrappers for structs with type and chat_type members. + -Wrapped members of most of the core structs: + SERVER_REC + WI_ITEM_REC + CHANNEL_REC + QUERY_REC + -Wrapped print methods for the global module, server, and window item. + -Wrapped command methods for server and window item. + -Included a signal handler in the base server and window item types that + seems to prevent crashes when an object is accessed after a server is + disconnected or a window item is removed (channel close, etc). + -Python stdout and stderr are redirected to the Irssi status window. + -The command_bind method of the Script object binds commands. + +TODO: + -Wrap the rest of the *_REC structs. + -Wrap the important methods and functions. + -Signal handling + -Wrapper object factory + -Handle settings + -Handle timeouts + -Bunch of other stuff + +Design issues: + -Threading. Pytest doesn't consider thread usage by scripts at all. Any + thread usage would likely cause a crash, as pytest makes no attempt to + manipulate Python's interpreter lock or thread state. It would be easy to + use PyGILState_* critical sections around important parts where Irssi + calls into Python, but I don't know about the larger impact on Irssi for + allowing threads to run. With the signal system and timeouts, is this + really an important issue? + + -Structure. C modules could use some adjustment, especially as more code + is added. I also noticed how the Perl wrapper, like the rest of Irssi, + seems to be organized around interface type. The Python wrapper may need + some adjustment for this(?) + + -Also, command_bind currently isn't a function in the main namespace like in + the Perl wrapper. Instead, its a method of the Script object, which includes + a list of bound signals for record keeping. That way, the context is always + certain. Currently, the Script object is inserted into the user's script + through a startup hook function (irssi_main). There could be a better way + of doing this (perhaps by inserting the script object directly into the + script's globals and using an import hook to distribute it to modules the + script imports). + + |