{ "info": { "author": "Shakurov Vadim Vladimirovich", "author_email": "apelsinsd@gmail.com", "bugtrack_url": null, "classifiers": [ "Framework :: AsyncIO", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Operating System :: MacOS :: MacOS X", "Operating System :: Microsoft :: Windows", "Operating System :: POSIX", "Programming Language :: Python", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Communications :: Internet Phone", "Topic :: Communications :: Telephony", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "Aioagi\n======\n\nAsync agi client/server framework.\nThe project based on \"aiohttp\" framework.\n\nKey Features\n============\n\n- Supports both client and server side of AGI protocol.\n- AGI-server has middlewares and pluggable routing.\n\nGetting started\n===============\n\n\nServer\n------\n\nSimple AGI server:\n\n.. code-block:: python\n\n from aioagi import runner\n from aioagi.app import AGIApplication\n from aioagi.log import agi_server_logger\n from aioagi.urldispathcer import AGIView\n\n\n async def hello(request):\n message = await request.agi.stream_file('hello-world')\n await request.agi.verbose('Hello handler: {}.'.format(request.rel_url.query))\n agi_server_logger.debug(message)\n\n\n class HelloView(AGIView):\n async def sip(self):\n message = await self.request.agi.stream_file('hello-world')\n await self.request.agi.verbose('HelloView handler: {}.'.format(self.request.rel_url.query))\n agi_server_logger.debug(message)\n\n\n if __name__ == '__main__':\n logging.config.dictConfig(LOGGING)\n app = AGIApplication()\n app.router.add_route('SIP', '/', hello)\n runner.run_app(app)\n\nClient\n------\n\nTo set AGI connection as Asterisk:\n\n.. code-block:: python\n\n import asyncio\n import logging.config\n\n from aioagi.log import agi_client_logger\n from aioagi.client import AGIClientSession\n from aioagi.parser import AGIMessage, AGICode\n\n\n async def test_request(loop):\n headers = {\n 'agi_channel': 'SIP/100-00000001',\n 'agi_language': 'ru',\n 'agi_uniqueid': '1532375920.8',\n 'agi_version': '14.0.1',\n 'agi_callerid': '100',\n 'agi_calleridname': 'test',\n 'agi_callingpres': '0',\n 'agi_callingani2': '0',\n 'agi_callington': '0',\n 'agi_callingtns': '0',\n 'agi_dnid': '101',\n 'agi_rdnis': 'unknown',\n 'agi_context': 'from-internal',\n 'agi_extension': '101',\n 'agi_priority': '1',\n 'agi_enhanced': '0.0',\n 'agi_accountcode': '',\n 'agi_threadid': '139689736754944',\n }\n async with AGIClientSession(headers=headers, loop=loop) as session:\n async with session.sip('agi://localhost:8080/hello/?a=test1&b=var1') as response:\n async for message in response:\n client_logger.debug(message)\n await response.send(AGIMessage(AGICode.OK, '0', {}))\n\n async with session.sip('agi://localhost:8080/hello-view/?a=test2&b=var2') as response:\n async for message in response:\n client_logger.debug(message)\n await response.send(AGIMessage(AGICode.OK, '0', {}))\n\n.. note:: Session request headers are set automatically for ``session.sip('agi://localhost:8080/hello/?a=test1&b=var1')`` request:\n\n.. code-block::\n\n agi_type: SIP\n agi_network: yes\n agi_network_script: hello/\n agi_request: agi://localhost:8080/hello/\n\n\nInstall\n=======\n\n``pip install aioagi``\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://gitlab.com/VadimShakurov/aioagi.git", "keywords": "aiogi asyncio asterisk telephony voip", "license": "Apache 2", "maintainer": "", "maintainer_email": "", "name": "aioagi", "package_url": "https://pypi.org/project/aioagi/", "platform": "", "project_url": "https://pypi.org/project/aioagi/", "project_urls": { "Homepage": "https://gitlab.com/VadimShakurov/aioagi.git" }, "release_url": "https://pypi.org/project/aioagi/1.0.6/", "requires_dist": [ "aiohttp (<3.5.0,>=3.4.0)", "ipdb; extra == 'dev'", "ipython; extra == 'dev'", "coverage; extra == 'testing'", "pytest; extra == 'testing'", "pytest-asyncio; extra == 'testing'", "async-generator; extra == 'testing'", "pytest-sugar; extra == 'testing'", "pytest-cov; extra == 'testing'" ], "requires_python": "", "summary": "Async agi client/server framework (asyncio)", "version": "1.0.6" }, "last_serial": 5128624, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "436c8536a14d8a553a7dd4aef002abe1", "sha256": "fc18435404fdf09e1237a45b23ea2d2c609c06ff606446555b48baca5b154cac" }, "downloads": -1, "filename": "aioagi-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "436c8536a14d8a553a7dd4aef002abe1", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 26302, "upload_time": "2018-08-08T20:20:35", "url": "https://files.pythonhosted.org/packages/dd/de/4ff532314fae7fc7aa0d95899b85dbac33dbfad19727090d32c1cc509fd8/aioagi-1.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "70a1b01a6cd3c4ce41e9326b68dcc5f4", "sha256": "4060991637a87ff3a7aa4d6b3b29f6a02d42cabecdd68722db7c2df61106136c" }, "downloads": -1, "filename": "aioagi-1.0.0.tar.gz", "has_sig": false, "md5_digest": "70a1b01a6cd3c4ce41e9326b68dcc5f4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21702, "upload_time": "2018-08-08T20:20:37", "url": "https://files.pythonhosted.org/packages/69/e2/97885f0df4a1b44ba2a69d52fb168663b09b1b3e35225fedfb38bda1d0b3/aioagi-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "1d63d859af4f51317df180750330bda9", "sha256": "e1b0c5662fd8bf9b256d75ee7f6f406a8ef968dd3625d9fe42a9045ede0855ed" }, "downloads": -1, "filename": "aioagi-1.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "1d63d859af4f51317df180750330bda9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 26294, "upload_time": "2018-08-08T20:40:07", "url": "https://files.pythonhosted.org/packages/7d/19/ce448cee48f33da7faec668dfb9262731a79951878bb567c97aa78cdddff/aioagi-1.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "73a0ed4d05b34f6a310b89d27ffed0ee", "sha256": "674943c965effca9d0932e117c75f62d4056995dd537b02baf5a9111ee274a89" }, "downloads": -1, "filename": "aioagi-1.0.1.tar.gz", "has_sig": false, "md5_digest": "73a0ed4d05b34f6a310b89d27ffed0ee", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21682, "upload_time": "2018-08-08T20:40:11", "url": "https://files.pythonhosted.org/packages/3f/b6/2adad1d3513405731bde9cea28701f6e658131d7537027c59f5624dd8830/aioagi-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "825024acdd1d6d8b2751743f4c09b087", "sha256": "0a5f4f151ed315caab782b248609f9c733473aa7c83d99ac33236616a6f7164f" }, "downloads": -1, "filename": "aioagi-1.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "825024acdd1d6d8b2751743f4c09b087", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 26487, "upload_time": "2018-08-20T19:42:35", "url": "https://files.pythonhosted.org/packages/f9/5d/af48e715d9c705c38314da4fd199cc87d8df56d6399bd24098b9027365da/aioagi-1.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "108e9927152e9666b6a0efad53080827", "sha256": "6be4c328587258074e2c22313808694b72d1b134b33c68a237baff13ef17d7a6" }, "downloads": -1, "filename": "aioagi-1.0.2.tar.gz", "has_sig": false, "md5_digest": "108e9927152e9666b6a0efad53080827", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22005, "upload_time": "2018-08-20T19:42:39", "url": "https://files.pythonhosted.org/packages/0e/43/d3fc5a2c3ea868e3631bc2dc8941c05ce90e223e14c73fb94db8b7eecb0a/aioagi-1.0.2.tar.gz" } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "b02fdedfffa85af364760a4cd54ff9b6", "sha256": "62de50c28e0bea3d47edce4fa1b95d9ddf826c715bdbd3561f4797e2c2a0504e" }, "downloads": -1, "filename": "aioagi-1.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "b02fdedfffa85af364760a4cd54ff9b6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 26488, "upload_time": "2018-08-22T10:57:54", "url": "https://files.pythonhosted.org/packages/c2/06/a8361f52cd796e5402a8ad0401673e2197c915533d4ee4ef4e104e71fe43/aioagi-1.0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "afa2537bf938a18f0a882801c23031b8", "sha256": "bd1abe9fc98bd7c71283cb68c60f37d242ec98914b22e15988825e78c671e401" }, "downloads": -1, "filename": "aioagi-1.0.3.tar.gz", "has_sig": false, "md5_digest": "afa2537bf938a18f0a882801c23031b8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21928, "upload_time": "2018-08-22T10:57:55", "url": "https://files.pythonhosted.org/packages/75/3e/5c5b8374423dca1d668701c7342d6e98557432b23d5406380b4935a97af6/aioagi-1.0.3.tar.gz" } ], "1.0.4": [ { "comment_text": "", "digests": { "md5": "4459203fd7a7198f7d52a413cad9de10", "sha256": "b30d9575e841ffea431929ad0eec2870b9ad301e0c1c3bb729cf9b63d7f7e319" }, "downloads": -1, "filename": "aioagi-1.0.4.tar.gz", "has_sig": false, "md5_digest": "4459203fd7a7198f7d52a413cad9de10", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22408, "upload_time": "2018-09-03T18:45:14", "url": "https://files.pythonhosted.org/packages/dd/1e/f56bf28aeb141ba52eff4120adb84bdc8623c129b2d2229e0eb128072626/aioagi-1.0.4.tar.gz" } ], "1.0.5": [ { "comment_text": "", "digests": { "md5": "fb7d67913970ce3d2f90ae3d7b9af9ea", "sha256": "f545a738a14131cc349473547556c639e0179822496bc9c4b4c21c854943fd01" }, "downloads": -1, "filename": "aioagi-1.0.5-py3-none-any.whl", "has_sig": false, "md5_digest": "fb7d67913970ce3d2f90ae3d7b9af9ea", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 26824, "upload_time": "2018-09-04T20:15:06", "url": "https://files.pythonhosted.org/packages/1b/f5/80665e7cb2e391ddc41d783cb2b5ef8407571fd68e9a6ba5dbad96f01726/aioagi-1.0.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "953a32feac324971200429022adf328a", "sha256": "fe1046127065344d3e8124ff5868e6a27ce9eeba7fa61ed1f752932d36e4f6f0" }, "downloads": -1, "filename": "aioagi-1.0.5.tar.gz", "has_sig": false, "md5_digest": "953a32feac324971200429022adf328a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22446, "upload_time": "2018-09-04T20:15:08", "url": "https://files.pythonhosted.org/packages/3f/d9/3182ace2a719fdbd8030354c87b89b176d9c6c17778ce050b2624d90364d/aioagi-1.0.5.tar.gz" } ], "1.0.6": [ { "comment_text": "", "digests": { "md5": "f9e9f12caf79cdf980b9d803b5b38a99", "sha256": "2eb333144a767ad6160c9e7cf484eac9fe926602c85622543f653d630fb91bfe" }, "downloads": -1, "filename": "aioagi-1.0.6-py3-none-any.whl", "has_sig": false, "md5_digest": "f9e9f12caf79cdf980b9d803b5b38a99", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 26856, "upload_time": "2019-04-11T11:51:39", "url": "https://files.pythonhosted.org/packages/74/ff/c7af7a9122e031975b888286ad812593c70cc34ad0b811b1c62e238a8b78/aioagi-1.0.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f777ebcec6f87108c8d6f082b47243dc", "sha256": "9fa38fbc6fa6a2beda61ee9608f9751b200127494b14999e0e4bb2d5cd7c485f" }, "downloads": -1, "filename": "aioagi-1.0.6.tar.gz", "has_sig": false, "md5_digest": "f777ebcec6f87108c8d6f082b47243dc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22496, "upload_time": "2019-04-11T11:51:41", "url": "https://files.pythonhosted.org/packages/ae/af/774df1f5c4b6a5d1470f2e96a218ea52f6a4f67694e5d1566b3d5b47b439/aioagi-1.0.6.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "f9e9f12caf79cdf980b9d803b5b38a99", "sha256": "2eb333144a767ad6160c9e7cf484eac9fe926602c85622543f653d630fb91bfe" }, "downloads": -1, "filename": "aioagi-1.0.6-py3-none-any.whl", "has_sig": false, "md5_digest": "f9e9f12caf79cdf980b9d803b5b38a99", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 26856, "upload_time": "2019-04-11T11:51:39", "url": "https://files.pythonhosted.org/packages/74/ff/c7af7a9122e031975b888286ad812593c70cc34ad0b811b1c62e238a8b78/aioagi-1.0.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f777ebcec6f87108c8d6f082b47243dc", "sha256": "9fa38fbc6fa6a2beda61ee9608f9751b200127494b14999e0e4bb2d5cd7c485f" }, "downloads": -1, "filename": "aioagi-1.0.6.tar.gz", "has_sig": false, "md5_digest": "f777ebcec6f87108c8d6f082b47243dc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22496, "upload_time": "2019-04-11T11:51:41", "url": "https://files.pythonhosted.org/packages/ae/af/774df1f5c4b6a5d1470f2e96a218ea52f6a4f67694e5d1566b3d5b47b439/aioagi-1.0.6.tar.gz" } ] }