asterisk-ami


Nameasterisk-ami JSON
Version 0.1.7 PyPI version JSON
download
home_page
SummaryPython AMI Client
upload_time2024-01-05 12:16:17
maintainer
docs_urlNone
author
requires_python
license
keywords asterisk ami
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI
coveralls test coverage No coveralls.
            =================
Python AMI Client
=================

.. image:: https://travis-ci.org/ettoreleandrotognoli/python-ami.svg?branch=master
    :target: https://travis-ci.org/ettoreleandrotognoli/python-ami

.. image:: https://codecov.io/gh/ettoreleandrotognoli/python-ami/branch/master/graph/badge.svg
    :target: https://codecov.io/gh/ettoreleandrotognoli/python-ami

.. image:: https://badge.fury.io/py/asterisk-ami.svg
    :target: https://badge.fury.io/py/asterisk-ami

.. image:: https://img.shields.io/pypi/dm/asterisk-ami.svg
    :target: https://pypi.python.org/pypi/asterisk-ami#downloads
    
.. image:: https://api.codeclimate.com/v1/badges/429cda25d75ab470d7f6/maintainability
   :target: https://codeclimate.com/github/ettoreleandrotognoli/python-ami/maintainability
   :alt: Maintainability
   
.. image:: https://api.codeclimate.com/v1/badges/429cda25d75ab470d7f6/test_coverage
   :target: https://codeclimate.com/github/ettoreleandrotognoli/python-ami/test_coverage
   :alt: Test Coverage

.. image:: https://www.codefactor.io/repository/github/ettoreleandrotognoli/python-ami/badge
    :target: https://www.codefactor.io/repository/github/ettoreleandrotognoli/python-ami
    :alt: CodeFactor

A simple Python AMI client

See the `code of conduct <CODE_OF_CONDUCT.md>`_.

Install
-------

Install asterisk-ami

.. code-block:: shell

    pip install asterisk-ami

Install latest asterisk-ami

.. code-block:: shell

    pip install git+https://github.com/ettoreleandrotognoli/python-ami

Usage
-----


Connect
~~~~~~~

.. code-block:: python

    from asterisk.ami import AMIClient
    
    client = AMIClient(address='127.0.0.1',port=5038)
    client.login(username='username',secret='password')
    
Disconnect
~~~~~~~~~~

.. code-block:: python

    client.logoff()


Send an action
~~~~~~~~~~~~~~

.. code-block:: python

    from asterisk.ami import SimpleAction
    
    action = SimpleAction(
        'Originate',
        Channel='SIP/2010',
        Exten='2010',
        Priority=1,
        Context='default',
        CallerID='python',
    )
    client.send_action(action)


Send an action with adapter
~~~~~~~~~~~~~~~~~~~~~~~~~~~

.. code-block:: python

    from asterisk.ami import AMIClientAdapter
    
    adapter = AMIClientAdapter(client)
    adapter.Originate(
        Channel='SIP/2010',
        Exten='2010',
        Priority=1,
        Context='default',
        CallerID='python',
    )
    
Synchronous Response
~~~~~~~~~~~~~~~~~~~~

.. code-block:: python

    #without adapter
    future = client.send_action(action)
    response = future.response
    
    #with adapter
    future = adapter.Originate(...)
    response = future.response
    

Asynchronous Response
~~~~~~~~~~~~~~~~~~~~~

.. code-block:: python

    def callback_response(response):
        print(response)

    #without adapter
    future = client.send_action(action,callback=callback_response)
    
    #with adapter
    future = adapter.Originate(...,_callback=callback_response)
    
    #you can use the future to wait the callback execute
    reponse = future.response

Listen Events
~~~~~~~~~~~~~

.. code-block:: python

    def event_listener(event,**kwargs):
        print(event)

    client.add_event_listener(event_listener)
    

Filter Events
~~~~~~~~~~~~~

With a custom class

.. code-block:: python

    from asterisk.ami import EventListener

    class RegistryEventListener(EventListener):
    
        def on_Registry(event,**kwargs):
            print('Registry Event',event)
            
    client.add_event_listener(RegistryEventListener())
    
    class AllEventListener(EventListener):
    
        def on_event(event,**kwargs):
            print('Event',event)
    
    client.add_event_listener(AllEventListener())

With black or white list

.. code-block:: python

    def event_listener(event,**kwargs):
        print(event)
        
    client.add_event_listener(
        event_listener, white_list=['Registry','PeerStatus']
    )
    
    client.add_event_listener(
        event_listener, black_list=['VarSet']
    )
            
Like a custom class

.. code-block:: python

    def event_listener(event,**kwargs):
        print(event)
        
    client.add_event_listener(
        on_VarSet=event_listener,
        on_ExtensionStatus=event_listener
    )
    
    client.add_event_listener(
        on_event=event_listener
    )
    

Filter Event Value
~~~~~~~~~~~~~~~~~~

.. code-block:: python

    def event_listener(event,**kwargs):
        print('Ringing',event)
        
    
    client.add_event_listener(
        event_listener,
        white_list='Newstate',
        ChannelStateDesc='Ringing',
        ConnectedLineNum='2004',
    )
    
Filter with regex
~~~~~~~~~~~~~~~~~

.. code-block:: python

    import re
    
    def event_listener(event,**kwargs):
        print(event)
        
    client.add_event_listener(
        on_Newstate=event_listener,
        white_list=re.compile('.*'),
        ChannelStateDesc=re.compile('^Ring.*'),
    )
    
    

            

Raw data

            {
    "_id": null,
    "home_page": "",
    "name": "asterisk-ami",
    "maintainer": "",
    "docs_url": null,
    "requires_python": "",
    "maintainer_email": "",
    "keywords": "asterisk,ami",
    "author": "",
    "author_email": "Ettore Leandro Tognoli <ettore.leandro.tognoli@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/46/01/ae378a9b0ae4516bc2eee7332e2296a3574bb42feae5ccf2bd8cf7f1968c/asterisk-ami-0.1.7.tar.gz",
    "platform": null,
    "description": "=================\nPython AMI Client\n=================\n\n.. image:: https://travis-ci.org/ettoreleandrotognoli/python-ami.svg?branch=master\n    :target: https://travis-ci.org/ettoreleandrotognoli/python-ami\n\n.. image:: https://codecov.io/gh/ettoreleandrotognoli/python-ami/branch/master/graph/badge.svg\n    :target: https://codecov.io/gh/ettoreleandrotognoli/python-ami\n\n.. image:: https://badge.fury.io/py/asterisk-ami.svg\n    :target: https://badge.fury.io/py/asterisk-ami\n\n.. image:: https://img.shields.io/pypi/dm/asterisk-ami.svg\n    :target: https://pypi.python.org/pypi/asterisk-ami#downloads\n    \n.. image:: https://api.codeclimate.com/v1/badges/429cda25d75ab470d7f6/maintainability\n   :target: https://codeclimate.com/github/ettoreleandrotognoli/python-ami/maintainability\n   :alt: Maintainability\n   \n.. image:: https://api.codeclimate.com/v1/badges/429cda25d75ab470d7f6/test_coverage\n   :target: https://codeclimate.com/github/ettoreleandrotognoli/python-ami/test_coverage\n   :alt: Test Coverage\n\n.. image:: https://www.codefactor.io/repository/github/ettoreleandrotognoli/python-ami/badge\n    :target: https://www.codefactor.io/repository/github/ettoreleandrotognoli/python-ami\n    :alt: CodeFactor\n\nA simple Python AMI client\n\nSee the `code of conduct <CODE_OF_CONDUCT.md>`_.\n\nInstall\n-------\n\nInstall asterisk-ami\n\n.. code-block:: shell\n\n    pip install asterisk-ami\n\nInstall latest asterisk-ami\n\n.. code-block:: shell\n\n    pip install git+https://github.com/ettoreleandrotognoli/python-ami\n\nUsage\n-----\n\n\nConnect\n~~~~~~~\n\n.. code-block:: python\n\n    from asterisk.ami import AMIClient\n    \n    client = AMIClient(address='127.0.0.1',port=5038)\n    client.login(username='username',secret='password')\n    \nDisconnect\n~~~~~~~~~~\n\n.. code-block:: python\n\n    client.logoff()\n\n\nSend an action\n~~~~~~~~~~~~~~\n\n.. code-block:: python\n\n    from asterisk.ami import SimpleAction\n    \n    action = SimpleAction(\n        'Originate',\n        Channel='SIP/2010',\n        Exten='2010',\n        Priority=1,\n        Context='default',\n        CallerID='python',\n    )\n    client.send_action(action)\n\n\nSend an action with adapter\n~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n.. code-block:: python\n\n    from asterisk.ami import AMIClientAdapter\n    \n    adapter = AMIClientAdapter(client)\n    adapter.Originate(\n        Channel='SIP/2010',\n        Exten='2010',\n        Priority=1,\n        Context='default',\n        CallerID='python',\n    )\n    \nSynchronous Response\n~~~~~~~~~~~~~~~~~~~~\n\n.. code-block:: python\n\n    #without adapter\n    future = client.send_action(action)\n    response = future.response\n    \n    #with adapter\n    future = adapter.Originate(...)\n    response = future.response\n    \n\nAsynchronous Response\n~~~~~~~~~~~~~~~~~~~~~\n\n.. code-block:: python\n\n    def callback_response(response):\n        print(response)\n\n    #without adapter\n    future = client.send_action(action,callback=callback_response)\n    \n    #with adapter\n    future = adapter.Originate(...,_callback=callback_response)\n    \n    #you can use the future to wait the callback execute\n    reponse = future.response\n\nListen Events\n~~~~~~~~~~~~~\n\n.. code-block:: python\n\n    def event_listener(event,**kwargs):\n        print(event)\n\n    client.add_event_listener(event_listener)\n    \n\nFilter Events\n~~~~~~~~~~~~~\n\nWith a custom class\n\n.. code-block:: python\n\n    from asterisk.ami import EventListener\n\n    class RegistryEventListener(EventListener):\n    \n        def on_Registry(event,**kwargs):\n            print('Registry Event',event)\n            \n    client.add_event_listener(RegistryEventListener())\n    \n    class AllEventListener(EventListener):\n    \n        def on_event(event,**kwargs):\n            print('Event',event)\n    \n    client.add_event_listener(AllEventListener())\n\nWith black or white list\n\n.. code-block:: python\n\n    def event_listener(event,**kwargs):\n        print(event)\n        \n    client.add_event_listener(\n        event_listener, white_list=['Registry','PeerStatus']\n    )\n    \n    client.add_event_listener(\n        event_listener, black_list=['VarSet']\n    )\n            \nLike a custom class\n\n.. code-block:: python\n\n    def event_listener(event,**kwargs):\n        print(event)\n        \n    client.add_event_listener(\n        on_VarSet=event_listener,\n        on_ExtensionStatus=event_listener\n    )\n    \n    client.add_event_listener(\n        on_event=event_listener\n    )\n    \n\nFilter Event Value\n~~~~~~~~~~~~~~~~~~\n\n.. code-block:: python\n\n    def event_listener(event,**kwargs):\n        print('Ringing',event)\n        \n    \n    client.add_event_listener(\n        event_listener,\n        white_list='Newstate',\n        ChannelStateDesc='Ringing',\n        ConnectedLineNum='2004',\n    )\n    \nFilter with regex\n~~~~~~~~~~~~~~~~~\n\n.. code-block:: python\n\n    import re\n    \n    def event_listener(event,**kwargs):\n        print(event)\n        \n    client.add_event_listener(\n        on_Newstate=event_listener,\n        white_list=re.compile('.*'),\n        ChannelStateDesc=re.compile('^Ring.*'),\n    )\n    \n    \n",
    "bugtrack_url": null,
    "license": "",
    "summary": "Python AMI Client",
    "version": "0.1.7",
    "project_urls": {
        "Bug Tracker": "https://github.com/ettoreleandrotognoli/python-ami/issues",
        "Homepage": "https://github.com/ettoreleandrotognoli/python-ami"
    },
    "split_keywords": [
        "asterisk",
        "ami"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "3798a29af5201e7a2c9c948debe134def3a636f73fb884710e6afb30771e487f",
                "md5": "43191867f9734ff3cfd5ddfbee6d235f",
                "sha256": "b94baabc1107214f3369a804fd1efda0649ba6afcb21095c6b438b6245fef7ff"
            },
            "downloads": -1,
            "filename": "asterisk_ami-0.1.7-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "43191867f9734ff3cfd5ddfbee6d235f",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": null,
            "size": 9745,
            "upload_time": "2024-01-05T12:16:16",
            "upload_time_iso_8601": "2024-01-05T12:16:16.387575Z",
            "url": "https://files.pythonhosted.org/packages/37/98/a29af5201e7a2c9c948debe134def3a636f73fb884710e6afb30771e487f/asterisk_ami-0.1.7-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "4601ae378a9b0ae4516bc2eee7332e2296a3574bb42feae5ccf2bd8cf7f1968c",
                "md5": "b8b70e5ada4d05d6ce619ce91583bd6f",
                "sha256": "de954116b7b03fb1b5420d9d83d847a3ba0d4cf1449847eada88b4bfde080136"
            },
            "downloads": -1,
            "filename": "asterisk-ami-0.1.7.tar.gz",
            "has_sig": false,
            "md5_digest": "b8b70e5ada4d05d6ce619ce91583bd6f",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 33440,
            "upload_time": "2024-01-05T12:16:17",
            "upload_time_iso_8601": "2024-01-05T12:16:17.945242Z",
            "url": "https://files.pythonhosted.org/packages/46/01/ae378a9b0ae4516bc2eee7332e2296a3574bb42feae5ccf2bd8cf7f1968c/asterisk-ami-0.1.7.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-01-05 12:16:17",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "ettoreleandrotognoli",
    "github_project": "python-ami",
    "travis_ci": true,
    "coveralls": false,
    "github_actions": false,
    "requirements": [],
    "lcname": "asterisk-ami"
}
        
Elapsed time: 0.16018s