From: Jan M. <jpm...@gm...> - 2008-04-22 23:45:05
|
Stephen Cattaneo schrieb: > Hi Jan, > > I would gladly use it, as far review goes, I think I'm too new to > asterisk for that. > > Cheers, > > Stephen > > Jan Müller wrote: > >> hi, >> >> triggered by the recent mailing list activities, i just began to scan >> the code of manager.py, and i found this: >> >> def event_dispatch(self): >> """This thread is responsible fore dispatching events""" >> >> # loop dispatching events >> while self._running.isSet(): >> # get/wait for an event >> ev = self._event_queue.get() >> >> # if we got None as an event, we are finished >> if not ev: >> break >> >> # dispatch our events >> >> # first build a list of the functions to execute >> callbacks = self._event_callbacks.get(ev.name, []) >> callbacks.extend(self._event_callbacks.get('*', [])) # <- !!! >> >> # now execute the functions >> for callback in callbacks: >> if callback(ev, self): >> break >> >> what happens here is that the '*' callback handlers are explicitly added >> to the (mutable) list of ev.name handlers. >> i haven't tried it but this should lead to problems when unsubscribing a >> '*' handler since it still remains an >> ev.name handler. i suggest a list addition to prevent manipulation of >> the list of ev.name handlers: >> >> [...] >> # first build a list of the functions to execute >> callbacks = self._event_callbacks.get(ev.name, []) + >> self._event_callbacks.get('*', []) >> [...] >> >> when i find time (might take a while), i might try and implement some >> more of the API in the Manager class for myself. >> >> for instance, for an event/callback driven command 'Action: sippeers', i >> would implement a method that yields a set of the 'Event: PeerEntry' >> Events to spare a user the trouble of (un)subscribing a callback, making >> up ActionIds, etc. >> >> anyone besides me interested in this, both using and reviewing it? >> >> regards, Jan >> >> ------------------------------------------------------------------------- >> This SF.net email is sponsored by the 2008 JavaOne(SM) Conference >> Don't miss this year's exciting event. There's still time to save $100. >> Use priority code J8TL2D2. >> http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone >> _______________________________________________ >> Pyst-users mailing list >> Pys...@li... >> https://lists.sourceforge.net/lists/listinfo/pyst-users >> >> > > > ------------------------------------------------------------------------- > This SF.net email is sponsored by the 2008 JavaOne(SM) Conference > Don't miss this year's exciting event. There's still time to save $100. > Use priority code J8TL2D2. > http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone > _______________________________________________ > Pyst-users mailing list > Pys...@li... > https://lists.sourceforge.net/lists/listinfo/pyst-users > hi stephen, there is a first alpha version ready. beware, it's not tested at all. if you wish to use or test it, please give me your mail address (or is it ok to paste a messy 1000-line code here?). to whom else it may concern: 1. i implemented a metamethod which takes the api help and generates methods for all simple (only response, no events) api actions from it: <code>[..., ('mailbox_status', 'MailboxStatus', """Action: MailboxStatus Synopsis: Check Mailbox Privilege: call,all Description: Checks a voicemail account for status. Variables: (Names marked with * are required) *mailbox: Full mailbox ID <mailbox>@<vm-context> actionid: Optional ActionID for message matching Returns number of messages. Message: Mailbox Status Mailbox: <mailboxid> Waiting: <count> """, ["mailbox", "actionid=None"]), ...] </code) yields <code> def mailbox_status(self, mailbox, actionid=None): [...] return self.send_action({'Action': 'MailboxStatus', 'mailbox': mailbox, 'actionid': actionid} # actionid only included if not None </code> so, extending it for other simple actions (e.g., "Zap..." which I did not implement because I have no zap module) boils down to adding some lines to a table. If the API doc stirngs were a little more standardized, one could even fully automatically parse the documentation. 2. í also implemented event callback handlers for 'SipPeers' and 'DBGet'. the corresponding methods yield a list(Event) (method sip_peers) and an Event (method db_get). regards j. |