{ "info": { "author": "Django Software Foundation", "author_email": "foundation@djangoproject.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Web Environment", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: Internet :: WWW/HTTP" ], "description": "Sync-to-async and async-to-sync function wrappers\n=================================================\n\nThis package is based on https://github.com/django/asgiref/blob/master/asgiref/sync.py\n\nSync-to-async and async-to-sync function wrappers\n-------------------------------------------------\n\nThese allow you to wrap or decorate async or sync functions to call them from\nthe other style (so you can call async functions from a synchronous thread,\nor vice-versa).\n\nIn particular:\n\n* AsyncToSync lets a synchronous subthread stop and wait while the async\n function is called on the main thread's event loop, and then control is\n returned to the thread when the async function is finished.\n\n* SyncToAsync lets async code call a synchronous function, which is run in\n a threadpool and control returned to the async coroutine when the synchronous\n function completes.\n\nThe idea is to make it easier to call synchronous APIs from async code and\nasynchronous APIs from synchronous code so it's easier to transition code from\none style to the other. In the case of Channels, we wrap the (synchronous)\nDjango view system with SyncToAsync to allow it to run inside the (asynchronous)\nASGI server.\n\n\nDependencies\n------------\n\n``syncasync`` requires Python 3.5 or higher.\n\n\nTest\n----\n\nTo run tests, make sure you have installed the ``tests`` extra with the package::\n\n pip install -e .[tests]\n pytest\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/w1z2g3/syncasync", "keywords": "", "license": "BSD", "maintainer": "", "maintainer_email": "", "name": "syncasync", "package_url": "https://pypi.org/project/syncasync/", "platform": "", "project_url": "https://pypi.org/project/syncasync/", "project_urls": { "Homepage": "https://github.com/w1z2g3/syncasync" }, "release_url": "https://pypi.org/project/syncasync/20180812/", "requires_dist": [ "pytest (~=3.3); extra == 'tests'", "pytest-asyncio (~=0.8); extra == 'tests'" ], "requires_python": "", "summary": "Sync-to-async and async-to-sync function wrappers", "version": "20180812" }, "last_serial": 4162703, "releases": { "20180812": [ { "comment_text": "", "digests": { "md5": "8dd2b0d5f125c5f18d0ed734f32953cf", "sha256": "f581db7f968b88c8eea83b06341025a4588bbbcecc83345956a85f0ae9777729" }, "downloads": -1, "filename": "syncasync-20180812-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8dd2b0d5f125c5f18d0ed734f32953cf", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 3273, "upload_time": "2018-08-12T20:54:42", "url": "https://files.pythonhosted.org/packages/0d/0b/8ad1a350eebbee61558422e678553d192ec2b96d57ba633a0acce16b81ed/syncasync-20180812-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1bd621cb469fd248852d0a1322c80be6", "sha256": "737cd0193b5e0659b1565122069b5178001210f221f4641eca0d94c58c8eb4d2" }, "downloads": -1, "filename": "syncasync-20180812.tar.gz", "has_sig": false, "md5_digest": "1bd621cb469fd248852d0a1322c80be6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3235, "upload_time": "2018-08-12T20:54:44", "url": "https://files.pythonhosted.org/packages/c6/76/b65cc583347fd16a9a01f967a325d119a0a73b7a3487364d80b7dc8c9be2/syncasync-20180812.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "8dd2b0d5f125c5f18d0ed734f32953cf", "sha256": "f581db7f968b88c8eea83b06341025a4588bbbcecc83345956a85f0ae9777729" }, "downloads": -1, "filename": "syncasync-20180812-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8dd2b0d5f125c5f18d0ed734f32953cf", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 3273, "upload_time": "2018-08-12T20:54:42", "url": "https://files.pythonhosted.org/packages/0d/0b/8ad1a350eebbee61558422e678553d192ec2b96d57ba633a0acce16b81ed/syncasync-20180812-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1bd621cb469fd248852d0a1322c80be6", "sha256": "737cd0193b5e0659b1565122069b5178001210f221f4641eca0d94c58c8eb4d2" }, "downloads": -1, "filename": "syncasync-20180812.tar.gz", "has_sig": false, "md5_digest": "1bd621cb469fd248852d0a1322c80be6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3235, "upload_time": "2018-08-12T20:54:44", "url": "https://files.pythonhosted.org/packages/c6/76/b65cc583347fd16a9a01f967a325d119a0a73b7a3487364d80b7dc8c9be2/syncasync-20180812.tar.gz" } ] }