119 lines
3.2 KiB
Plaintext
119 lines
3.2 KiB
Plaintext
|
|
Metadata-Version: 2.4
|
||
|
|
Name: syncer
|
||
|
|
Version: 2.0.3
|
||
|
|
Summary: Async to sync converter
|
||
|
|
Home-page: https://github.com/miyakogi/syncer
|
||
|
|
Author: Hiroyuki Takagi
|
||
|
|
Author-email: miyako.dev@gmail.com
|
||
|
|
License: MIT
|
||
|
|
Keywords: syncer
|
||
|
|
Classifier: Development Status :: 5 - Production/Stable
|
||
|
|
Classifier: Intended Audience :: Developers
|
||
|
|
Classifier: License :: OSI Approved :: MIT License
|
||
|
|
Classifier: Natural Language :: English
|
||
|
|
Classifier: Programming Language :: Python :: 3
|
||
|
|
Classifier: Programming Language :: Python :: 3 :: Only
|
||
|
|
Classifier: Programming Language :: Python :: 3.8
|
||
|
|
Classifier: Programming Language :: Python :: 3.9
|
||
|
|
Classifier: Programming Language :: Python :: 3.10
|
||
|
|
Classifier: Programming Language :: Python :: 3.11
|
||
|
|
License-File: LICENSE
|
||
|
|
Dynamic: author
|
||
|
|
Dynamic: author-email
|
||
|
|
Dynamic: classifier
|
||
|
|
Dynamic: description
|
||
|
|
Dynamic: home-page
|
||
|
|
Dynamic: keywords
|
||
|
|
Dynamic: license
|
||
|
|
Dynamic: license-file
|
||
|
|
Dynamic: summary
|
||
|
|
|
||
|
|
Syncer
|
||
|
|
======
|
||
|
|
|
||
|
|
.. image:: https://img.shields.io/pypi/v/syncer.svg
|
||
|
|
:target: https://pypi.python.org/pypi/syncer
|
||
|
|
|
||
|
|
.. image:: https://img.shields.io/pypi/pyversions/syncer.svg
|
||
|
|
:target: https://pypi.python.org/pypi/syncer
|
||
|
|
|
||
|
|
|
||
|
|
Syncer is an async-to-sync converter for python.
|
||
|
|
|
||
|
|
* PyPI: https://pypi.python.org/pypi/syncer/
|
||
|
|
* Documentation: https://miyakogi.github.io/syncer/
|
||
|
|
* Source code: https://github.com/miyakogi/syncer/
|
||
|
|
|
||
|
|
Features
|
||
|
|
========
|
||
|
|
|
||
|
|
Sometimes (mainly in test) we need to convert asynchronous functions to normal,
|
||
|
|
synchronous functions and run them synchronously. It can be done by
|
||
|
|
``ayncio.get_event_loop().run_until_complete()``, but it's quite long...
|
||
|
|
|
||
|
|
Syncer makes this conversion easy.
|
||
|
|
|
||
|
|
* Convert async-function (defined by ``aync def``) to normal (synchronous) function
|
||
|
|
* Evaluate coroutines synchronously
|
||
|
|
|
||
|
|
Install
|
||
|
|
=======
|
||
|
|
|
||
|
|
At the command line::
|
||
|
|
|
||
|
|
$ pip install syncer
|
||
|
|
|
||
|
|
Usage
|
||
|
|
=====
|
||
|
|
|
||
|
|
This module has only one function: ``syncer.sync``.
|
||
|
|
|
||
|
|
.. code-block:: py
|
||
|
|
|
||
|
|
from syncer import sync
|
||
|
|
async def async_fun():
|
||
|
|
...
|
||
|
|
return 1
|
||
|
|
b = sync(async_fun) # now b is synchronous
|
||
|
|
assert 1 == b()
|
||
|
|
|
||
|
|
To test the above ``async_fun`` in asynchronous test functions:
|
||
|
|
|
||
|
|
.. code-block:: py
|
||
|
|
|
||
|
|
import unittest
|
||
|
|
|
||
|
|
class TestA(unittest.TestCase):
|
||
|
|
# ``sync`` can be used as decorator.
|
||
|
|
# The decorated function becomes synchronous.
|
||
|
|
@sync
|
||
|
|
async def test_async_fun(self):
|
||
|
|
self.assertEqual(await async_fun(), 1)
|
||
|
|
|
||
|
|
Or, keep test functions synchronous and get results synchronously:
|
||
|
|
|
||
|
|
.. code-block:: py
|
||
|
|
|
||
|
|
class TestA(unittest.TestCase):
|
||
|
|
def test_async_fun(self):
|
||
|
|
# run coroutine and return the result
|
||
|
|
self.assertEqual(sync(async_fun()), 1)
|
||
|
|
# This is equivalent to below, just a shortcut
|
||
|
|
self.assertEqual(
|
||
|
|
asyncio.get_event_loop().run_until_complete(async_fun()), 1)
|
||
|
|
|
||
|
|
More examples/use-cases will be found in `test <https://github.com/miyakogi/syncer/blob/master/test_syncer.py>`_.
|
||
|
|
|
||
|
|
License
|
||
|
|
=======
|
||
|
|
|
||
|
|
`MIT license <https://github.com/miyakogi/syncer/blob/master/LICENSE>`_
|
||
|
|
|
||
|
|
Credits
|
||
|
|
=======
|
||
|
|
|
||
|
|
This package was created with Cookiecutter_ and the `audreyr/cookiecutter-pypackage`_ project template.
|
||
|
|
|
||
|
|
.. _Cookiecutter: https://github.com/audreyr/cookiecutter
|
||
|
|
.. _`audreyr/cookiecutter-pypackage`: https://github.com/audreyr/cookiecutter-pypackage
|