Metadata-Version: 2.1
Name: aiothrift
Version: 0.2.6
Summary: Async Thrift server and client
Home-page: http://github.com/moonshadow/aiothrift/
License: MIT
Keywords: thrift,thriftpy,asyncio
Author: Ryan Wang
Author-email: hwwangwang@gmail.com
Requires-Python: >=3.7,<4.0
Classifier: Environment :: Web Environment
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Topic :: Software Development
Classifier: Topic :: Software Development :: Libraries
Requires-Dist: async-timeout (>=3.0.1,<5.0.0)
Requires-Dist: thriftpy2 (>=0.4.9,<0.5.0)
Project-URL: Documentation, https://aiothrift.readthedocs.org/
Project-URL: Repository, http://github.com/moonshadow/aiothrift/
Description-Content-Type: text/x-rst

aiothrift
=========

Asyncio implementation for thrift protocol, which is heavily based on thriftpy2_.

.. image:: https://travis-ci.org/ryanwang520/aiothrift.svg?branch=master
   :target: https://travis-ci.org/ryanwang520/aiothrift


Documentation: https://aiothrift.readthedocs.org/

Installation
------------

::

    $ pip install aiothrift


Usage example
-------------

Thrift file
^^^^^^^^^^^

::

    service PingPong {
        string ping(),
        i64 add(1:i32 a, 2:i64 b),
    }


Server
^^^^^^

.. code:: python

    import asyncio
    import aiothrift

    pingpong_thrift = aiothrift.load('pingpong.thrift', module_name='pingpong_thrift')

    class Dispatcher:
        def ping(self):
            return "pong"

        async def add(self, a, b):
            await asyncio.sleep(1)
            return a + b

    async def main():
      server = await aiothrift.create_server(pingpong_thrift.PingPong, Dispatcher()))
      async with server:
          await server.serve_forever()

    asyncio.run(main())

Client
^^^^^^

.. code:: python

    import asyncio
    import aiothrift

    pingpong_thrift = aiothrift.load('pingpong.thrift', module_name='pingpong_thrift')

    async def go():
        conn = await aiothrift.create_connection(pingpong_thrift.PingPong)
        print(await conn.ping())
        print(await conn.add(5, 6))
        conn.close()

    asyncio.run(go())

Or use ConnectionPool
^^^^^^^^^^^^^^^^^^^^^

.. code:: python

    import asyncio
    import aiothrift

    pingpong_thrift = aiothrift.load('pingpong.thrift', module_name='pingpong_thrift')

    async def go():
        client = await aiothrift.create_pool(pingpong_thrift.PingPong)
        print(await client.ping())
        print(await client.add(5, 6))
        client.close()
        await client.wait_closed()

    asyncio.run(go())


It's just that simple to begin with ``aiothrift``, and you are not forced to use ``aiothrift`` on both server and client side.
So if you already have a normal thrift server setup, feel free to create an async thrift client to communicate with that server.

Requirements
------------

- Python >= 3.7.0
- async-timeout_
- thriftpy2_

.. _async-timeout: https://pypi.python.org/pypi/async_timeout
.. _thriftpy2: https://thriftpy2.readthedocs.org/en/latest/


LICENSE
-------

``aiothrift`` is offered under the MIT license.

