|
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.
|