Metadata-Version: 2.4
Name: thriftpy2
Version: 0.6.0
Summary: Pure python implementation of Apache Thrift.
Author-email: ThriftPy Organization <gotzehsing@gmail.com>
License: The MIT License (MIT)
        
        Copyright (c) <2014> <Eleme Inc.>
        
        Permission is hereby granted, free of charge, to any person obtaining a copy
        of this software and associated documentation files (the "Software"), to deal
        in the Software without restriction, including without limitation the rights
        to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
        copies of the Software, and to permit persons to whom the Software is
        furnished to do so, subject to the following conditions:
        
        The above copyright notice and this permission notice shall be included in
        all copies or substantial portions of the Software.
        
        THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
        IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
        FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
        AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
        LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
        OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
        THE SOFTWARE.
        
Project-URL: Homepage, https://thriftpy2.readthedocs.io/
Project-URL: Source, https://github.com/Thriftpy/thriftpy2
Keywords: thrift python thriftpy thriftpy2
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.14
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
Classifier: Topic :: Software Development
Requires-Python: >=3.7
Description-Content-Type: text/x-rst
License-File: LICENSE
Requires-Dist: ply<4.0,>=3.4
Requires-Dist: six~=1.15
Requires-Dist: typing_extensions>=3.7.4; python_version < "3.8"
Provides-Extra: dev
Requires-Dist: flake8>=4.0; extra == "dev"
Requires-Dist: sphinx-rtd-theme>=0.1.9; extra == "dev"
Requires-Dist: sphinx>=1.3; extra == "dev"
Requires-Dist: pytest-asyncio; extra == "dev"
Requires-Dist: pytest-reraise; extra == "dev"
Requires-Dist: pytest<8.2.0,>=6.1.1; extra == "dev"
Requires-Dist: tornado<7.0,>=4.0; python_version >= "3.12" and extra == "dev"
Requires-Dist: tornado<6.0,>=4.0; python_version < "3.12" and extra == "dev"
Requires-Dist: aiohttp<4.0.0,>=3.8.0; extra == "dev"
Provides-Extra: tornado
Requires-Dist: tornado<7.0,>=4.0; python_version >= "3.12" and extra == "tornado"
Requires-Dist: tornado<6.0,>=4.0; python_version < "3.12" and extra == "tornado"
Provides-Extra: aiohttp
Requires-Dist: aiohttp<4.0.0,>=3.8.0; extra == "aiohttp"
Dynamic: license-file

=========
ThriftPy2
=========

.. image:: https://img.shields.io/codecov/c/github/Thriftpy/thriftpy2.svg
    :target: https://codecov.io/gh/Thriftpy/thriftpy2

.. image:: https://img.shields.io/pypi/dm/thriftpy2.svg
    :target: https://pypi.org/project/thriftpy2/

.. image:: https://img.shields.io/pypi/v/thriftpy2.svg
    :target: https://pypi.org/project/thriftpy2/

.. image:: https://img.shields.io/pypi/pyversions/thriftpy2.svg
    :target: https://pypi.org/project/thriftpy2/

.. image:: https://img.shields.io/pypi/implementation/thriftpy2.svg
    :target: https://pypi.org/project/thriftpy2/


ThriftPy2 is a pure Python implementation of the `Apache Thrift <https://thrift.apache.org/>`_
protocol. It allows you to parse Thrift IDL files and create RPC clients/servers
without code generation or compilation.


Installation
============

Install with pip:

.. code:: bash

    $ pip install thriftpy2


Features
========

- Python 3.7+ and PyPy3.

- Pure Python implementation. No need to compile or install the ``thrift`` package.
  All you need is thriftpy2 and a thrift file.

- Dynamically load thrift files as Python modules, with code generated on the fly.

- Compatible with Apache Thrift. You can use ThriftPy2 together with the
  official implementation servers and clients.

- Easy RPC server/client setup.

- Supported protocols and transports:

  * binary protocol (Python and Cython)
  * compact protocol (Python and Cython)
  * JSON protocol
  * Apache JSON protocol
  * buffered transport (Python and Cython)
  * framed transport
  * HTTP server and client
  * asyncio support


Quick Start
===========

Define a ``pingpong.thrift`` file:

::

    service PingPong {
        string ping(),
    }

Server
------

.. code:: python

    import thriftpy2
    from thriftpy2.rpc import make_server

    pingpong_thrift = thriftpy2.load("pingpong.thrift", module_name="pingpong_thrift")


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


    server = make_server(pingpong_thrift.PingPong, Dispatcher(), '127.0.0.1', 6000)
    server.serve()

Client
------

.. code:: python

    import thriftpy2
    from thriftpy2.rpc import make_client

    pingpong_thrift = thriftpy2.load("pingpong.thrift", module_name="pingpong_thrift")

    client = make_client(pingpong_thrift.PingPong, '127.0.0.1', 6000)
    print(client.ping())  # prints "pong"

Async Server
------------

.. code:: python

    import thriftpy2
    from thriftpy2.rpc import make_aio_server

    pingpong_thrift = thriftpy2.load("pingpong.thrift", module_name="pingpong_thrift")


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


    server = make_aio_server(pingpong_thrift.PingPong, Dispatcher(), '127.0.0.1', 6000)
    server.serve()

Async Client
------------

.. code:: python

    import asyncio
    import thriftpy2
    from thriftpy2.rpc import make_aio_client

    pingpong_thrift = thriftpy2.load("pingpong.thrift", module_name="pingpong_thrift")


    async def main():
        client = await make_aio_client(pingpong_thrift.PingPong, '127.0.0.1', 6000)
        print(await client.ping())  # prints "pong"
        client.close()


    if __name__ == '__main__':
        asyncio.run(main())

See the ``examples`` and ``tests`` directories for more usage examples.


Migrate from ThriftPy
=====================

ThriftPy (https://github.com/eleme/thriftpy) has been deprecated.
ThriftPy2 is fully compatible, just change your import:

.. code:: python

    import thriftpy2 as thriftpy


Contribute
==========

1. Fork the repo and make changes.

2. Write a test that shows a bug was fixed or the feature works as expected.

3. Make sure ``tox`` tests succeed.

4. Send a pull request.


Contributors
============

https://github.com/Thriftpy/thriftpy2/graphs/contributors


Sponsors
========

.. image:: ./docs/jetbrains.svg
    :target: https://www.jetbrains.com/?from=ThriftPy


Changelog
=========

https://github.com/Thriftpy/thriftpy2/releases
