{ "info": { "author": "Tyler Goodlet", "author_email": "tgoodlet@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Environment :: Console", "Intended Audience :: Developers", "Intended Audience :: Telecommunications Industry", "License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)", "Operating System :: POSIX :: Linux", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: Communications :: Telephony", "Topic :: Software Development :: Testing :: Traffic Generation", "Topic :: System :: Clustering" ], "description": "switchio\n========\nasyncio_ powered FreeSWITCH_ cluster control using pure Python_ 3.5+\n\n|pypi| |travis| |versions| |license| |docs|\n\n.. |versions| image:: https://img.shields.io/pypi/pyversions/switchio.svg\n :target: https://pypi.org/project/switchio\n.. |pypi| image:: https://img.shields.io/pypi/v/switchio.svg\n :target: https://pypi.org/project/switchio\n.. |travis| image:: https://img.shields.io/travis/friends-of-freeswitch/switchio/master.svg\n :target: https://travis-ci.org/friends-of-freeswitch/switchio\n.. |license| image:: https://img.shields.io/pypi/l/switchio.svg\n :target: https://pypi.org/project/switchio\n.. |docs| image:: https://readthedocs.org/projects/switchio/badge/?version=latest\n :target: http://switchio.readthedocs.io\n\n``switchio`` (pronounced *Switch Ee OoH*) is the next evolution of `switchy`_\n(think *Bulbasaur* -> *Ivysaur*) which leverages modern Python's new native\ncoroutine_ syntax and, for now, asyncio_.\n\nAPI-wise the project intends to be the flask_ for VoIP but with a focus on\nperformance and scalability more like sanic_.\n\n.. _asyncio: https://docs.python.org/3.6/library/asyncio.html\n.. _FreeSWITCH: https://freeswitch.org/\n.. _Python: https://www.python.org/\n.. _switchy: https://github.com/sangoma/switchy\n.. _coroutine: https://docs.python.org/3.6/library/asyncio-task.html\n.. _flask: http://flask.pocoo.org/\n.. _sanic: https://github.com/channelcat/sanic\n.. _docs: https://switchio.readthedocs.org/\n\n\nUse the power of ``async`` and ``await``!\n-----------------------------------------\nBuild a routing system using Python's new coroutine_ syntax:\n\n.. code:: python\n\n from switchio.apps.routers import Router\n\n router = Router(guards={\n 'Call-Direction': 'inbound',\n 'variable_sofia_profile': 'external'})\n\n @router.route('(.*)')\n async def welcome(sess, match, router):\n \"\"\"Say hello to inbound calls.\n \"\"\"\n await sess.answer() # resumes once call has been fully answered\n sess.log.info(\"Answered call to {}\".format(match.groups(0)))\n\n sess.playback('ivr/ivr-welcome_to_freeswitch.wav') # non-blocking\n sess.log.info(\"Playing welcome message\")\n await sess.recv(\"PLAYBACK_STOP\")\n\n await sess.hangup() # resumes once call has been fully hungup\n\nRun this app (assuming it's in ``dialplan.py``) from the shell::\n\n $ switchio serve fs-host1 fs-host2 fs-host3 --app ./dialplan.py:router\n\n\nSpin up an auto-dialer\n----------------------\nRun thousands of call flows to stress test your service system using\nthe built-in auto-dialer_::\n\n $ switchio dial fs-tester1 fs-tester2 --profile external --proxy myproxy.com --rate 100 --limit 3000\n\n.. _auto-dialer: http://switchio.readthedocs.io/en/latest/callgen.html\n\n\nInstall\n-------\n::\n\n pip install switchio\n\n\nDocs\n----\nOh we've got them docs_!\n\nHow do I deploy my FreeSWITCH cluster?\n--------------------------------------\n- Enable `inbound ESL`_ connections\n- Add a park-only_ dialplan (Hint: we include one here_)\n\nSee the docs_ for the deats!\n\n.. _inbound ESL: https://freeswitch.org/confluence/display/FREESWITCH/mod_event_socket#mod_event_socket-Configuration\n.. _park-only: https://freeswitch.org/confluence/display/FREESWITCH/mod_dptools%3A+park\n.. _here: https://github.com/friends-of-freeswitch/switchio/blob/master/conf/switchiodp.xml\n\n\nWhat's included?\n----------------\n- A slew of `built-in apps`_\n- A full blown `auto-dialer`_ originally built for stress testing VoIP service systems\n- Super detailed ESL event logging\n\n.. _built-in apps: http://switchio.readthedocs.io/en/latest/apps.html\n.. _auto-dialer: http://switchio.readthedocs.io/en/latest/callgen.html\n\n\nHow can I contribute?\n---------------------\nHave an idea for a general purpose ``switchio`` app or helper?\nMake a PR here on GitHub!\n\nAlso, if you like ``switchio`` let us know on Riot_!\n\n.. _Riot: https://riot.im/app/#/room/#freeswitch:matrix.org\n\n\nWait, how is ``switchio`` different from other ESL clients?\n-----------------------------------------------------------\n``switchio`` differentiates itself by supporting FreeSWITCH\n*process cluster control* as well as focusing on leveraging the\nmost modern Python language features. ``switchio`` takes pride\nin being a *batteries included* framework that tries to make all\nthe tricky things about FreeSWITCH a cinch.\n\n\nWhat if I'm stuck on Python 2?\n------------------------------\nCheck out these other great projects:\n\n- greenswitch_\n- eventsocket_\n- pySWITCH_\n- python-ESL_\n\n.. _greenswitch: https://github.com/EvoluxBR/greenswitch\n.. _eventsocket: https://github.com/fiorix/eventsocket\n.. _pySWITCH: http://pyswitch.sourceforge.net/\n.. _python-ESL: https://github.com/sangoma/python-ESL\n\n\nPerformance monitoring\n----------------------\nIf you'd like to record performance measurements using the \nCDR_ app, some optional numerical packages can be used:\n\n.. _CDR: http://switchio.readthedocs.io/en/latest/apps.html#cdr\n\n=============== ================ ================================\nFeature Dependency Installation\n=============== ================ ================================\nMetrics Capture `pandas`_ ``pip install switchio[metrics]``\nGraphing `matplotlib`_ ``pip install switchio[graphing]``\nHDF5 `pytables`_ [#]_ ``pip install switchio[hdf5]``\n=============== ================ ================================\n\n.. [#] ``pytables`` support is a bit shaky and not recommended unless\n you intend to locally process massive data sets worth of CDRs.\n The default CSV backend is usually sufficient on a modern file\n system.\n\n.. _pandas: http://pandas.pydata.org/\n.. _matplotlib: http://matplotlib.org/\n.. _pytables: http://www.pytables.org/\n\n\nLicense\n-------\nAll files that are part of this project are covered by the following\nlicense, except where explicitly noted.\n\n This Source Code Form is subject to the terms of the Mozilla Public\n License, v. 2.0. If a copy of the MPL was not distributed with this\n file, You can obtain one at http://mozilla.org/MPL/2.0/.", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/friends-of-freeswitch/switchio", "keywords": "", "license": "Mozilla", "maintainer": "", "maintainer_email": "", "name": "switchio", "package_url": "https://pypi.org/project/switchio/", "platform": "linux", "project_url": "https://pypi.org/project/switchio/", "project_urls": { "Homepage": "https://github.com/friends-of-freeswitch/switchio" }, "release_url": "https://pypi.org/project/switchio/0.1.0a1/", "requires_dist": null, "requires_python": "", "summary": "asyncio powered FreeSWITCH cluster control", "version": "0.1.0a1" }, "last_serial": 3335839, "releases": { "0.1.0a0": [ { "comment_text": "", "digests": { "md5": "71b746289822161cca3756dda9f8863c", "sha256": "c4ece1cf5fac4dc8f16288803a1756a1bb8fd679646f587edf8a1bf269205e20" }, "downloads": -1, "filename": "switchio-0.1.0a0.tar.gz", "has_sig": false, "md5_digest": "71b746289822161cca3756dda9f8863c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 69424, "upload_time": "2017-10-31T16:01:00", "url": "https://files.pythonhosted.org/packages/9d/bb/0fd3f4486160deffe6412dfc0928f106e452894d441abca68b6d2ad40960/switchio-0.1.0a0.tar.gz" } ], "0.1.0a1": [ { "comment_text": "", "digests": { "md5": "3b3faa422dd09e9860a1a1c1ae970050", "sha256": "203c9ef1471e50ce7723149ca04c4e912de6c3c5e3bec48ff380ce17ae4dbcc3" }, "downloads": -1, "filename": "switchio-0.1.0a1.tar.gz", "has_sig": false, "md5_digest": "3b3faa422dd09e9860a1a1c1ae970050", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 69052, "upload_time": "2017-11-15T16:30:49", "url": "https://files.pythonhosted.org/packages/b8/17/bf60e39fcb972f6990695aa33f96d9637c04363564bf10219cb149fcfed9/switchio-0.1.0a1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "3b3faa422dd09e9860a1a1c1ae970050", "sha256": "203c9ef1471e50ce7723149ca04c4e912de6c3c5e3bec48ff380ce17ae4dbcc3" }, "downloads": -1, "filename": "switchio-0.1.0a1.tar.gz", "has_sig": false, "md5_digest": "3b3faa422dd09e9860a1a1c1ae970050", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 69052, "upload_time": "2017-11-15T16:30:49", "url": "https://files.pythonhosted.org/packages/b8/17/bf60e39fcb972f6990695aa33f96d9637c04363564bf10219cb149fcfed9/switchio-0.1.0a1.tar.gz" } ] }