starpy.examples.calldurationcallback
index
/home/mcfletch/pylive/starpy/examples/calldurationcallback.py

Sample application to read call duration back to user
 
Implemented as an AGI and a manager connection, send
those who want to time the call to the AGI, we will wait
for the end of the call, then call them back with the 
duration message.

 
Modules
       
twisted.internet.defer
starpy.fastagi
twisted.application.internet
logging
starpy.manager
starpy.menu
os
pprint
twisted.application.service
time
starpy.utilapplication

 
Classes
       
object
CallTracker
UtilApplication(Propertied)
Application

 
class Application(UtilApplication)
    Application for the call duration callback mechanism
 
 
Method resolution order:
Application
UtilApplication
Propertied
object

Methods defined here:
onS(self, agi)
Incoming AGI connection to the "s" extension (start operation)

Methods inherited from UtilApplication:
__init__(self)
Initialise the application from options in configFile
dispatchIncomingCall(self, agi)
Handle an incoming call (dispatch to the appropriate registered handler)
handleCallsFor(self, extension, callback)
Register permanant handler for given extension
 
extension -- string extension for which to wait 
callback -- callback function to be called for each incoming channel
        to the given extension.
 
returns None
waitForCallOn(self, extension, timeout=15)
Wait for an AGI call on extension given
 
extension -- string extension for which to wait 
timeout -- duration in seconds to wait before defer.TimeoutError is 
        returned to the deferred.
 
returns deferred returning connected FastAGIProtocol or an error

Data and other attributes inherited from UtilApplication:
agiSpecifier = <BasicProperty 'agiSpecifier'>
FastAGI server specifier for the application see AGISpecifier
amiSpecifier = <BasicProperty 'amiSpecifier'>
AMI connection specifier for the application see AMISpecifier
configFiles = ('starpy.conf', '~/.starpy.conf')
extensionHandlers = <DictionaryProperty 'extensionHandlers'>
Set of permanant callbacks waiting for incoming extensions
extensionWaiters = <DictionaryProperty 'extensionWaiters'>
Set of deferreds waiting for incoming extensions

Methods inherited from Propertied:
__str__(self)
Get a friendly representation of the object
clone(self, **newValues)
Clone this object, with optional new property values
 
This method calls the __init__ method of your class with
the current property values of your class.  Providing newValues
(a dictionary) overrides property settings with new values.
getCloneProperties(self)
Get properties dictionary (key:value) for use in cloning of the instance
 
By default you get getProperties()' values, with an
attempt made to use the property's name, then the property's
direct "__get__" method.
toString(self, indentation='', alreadyDone=None, indentString=' ')
Get a nicely formatted representation of this object
 
This version assumes that getProperties returns
the list of properties which should be presented,
it recursively calls it's children with greater
indents to get their representations.
 
indentation -- current string indentation level
alreadyDone -- set of object ids which are already finished
 
XXX Needs a far better API, likely a stand-alone class
        without the automatic inheritance problems here :(

Class methods inherited from Propertied:
getProperties(cls) from type
Get the BasicProperty properties for a particular object's class

Data and other attributes inherited from Propertied:
__dict__ = <dictproxy object>
dictionary for instance variables (if defined)
__weakref__ = <attribute '__weakref__' of 'Propertied' objects>
list of weak references to the object (if defined)

 
class CallTracker(object)
    Object which tracks duration of a single call
 
This object encapsulates the entire interaction with the user, from 
the initial incoming FastAGI that records the channel ID and account 
number through the manager watching for the disconnect to the new call
setup and the FastAGI that plays back the results...
 
Requires a context 'callduration' with 's' mapping to this AGI, as well
as all numeric extensions.
 
  Methods defined here:
__init__(self)
Initialise the tracker object
cleanUp(self, agi=None)
Cleanup on error as much as possible
onAMIConnect(self, ami)
We have successfully connected to the AMI
onAccountInput(self, result, agi, retries=2)
Allow user to enter again if timed out
onConnectAndAccount(self, results)
We have connected and retrieved an account
onHangup(self, event, callbacks=5)
Okay, the call is finished, time to inform the user
onUserReconnectFail(self, reason, event, callbacks)
Wait for bit, then retry...
onUserReconnected(self, agi)
Handle the user interaction after they've re-connected
recordChannelInfo(self, agi)
Records relevant channel information, creates manager watcher

Data and other attributes defined here:
__dict__ = <dictproxy object>
dictionary for instance variables (if defined)
__weakref__ = <attribute '__weakref__' of 'CallTracker' objects>
list of weak references to the object (if defined)
ourContext = 'callduration'

 
Data
        APPLICATION = <starpy.examples.calldurationcallback.Application object>
reactor = <twisted.internet.selectreactor.SelectReactor instance>