Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/miyakogi/syncer

Async to sync converter
https://github.com/miyakogi/syncer

async asyncio python

Last synced: about 2 months ago
JSON representation

Async to sync converter

Awesome Lists containing this project

README

        

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 `_.

License
=======

`MIT 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