Metadata-Version: 2.4
Name: thriftpy2
Version: 0.5.3
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.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
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-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"
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"
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/


ThriftPy: https://github.com/eleme/thriftpy has been deprecated, ThriftPy2 aims to provide long term support.


Migrate from Thriftpy?
======================

All you need is:

.. code:: python

    import thriftpy2 as thriftpy


That's it! thriftpy2 is fully compatible with thriftpy.


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

Install with pip.

.. code:: bash

    $ pip install thriftpy2

You may also install cython first to build cython extension locally.

.. code:: bash

    $ pip install cython thriftpy2


Code Demo
=========

ThriftPy make it super easy to write server/client code with thrift. Let's
checkout this simple pingpong service demo.

We need a 'pingpong.thrift' file:

::

    service PingPong {
        string ping(),
    }

Then we can make a server:

.. code:: python

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

    from thriftpy2.rpc import make_server

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

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

And a client:

.. code:: python

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

    from thriftpy2.rpc import make_client

    client = make_client(pingpong_thrift.PingPong, '127.0.0.1', 6000)
    print(client.ping())

And it also supports asyncio on Python 3.5 or later:

.. code:: python

    import thriftpy2
    import asyncio
    from thriftpy2.rpc import make_aio_client


    echo_thrift = thriftpy2.load("echo.thrift", module_name="echo_thrift")


    async def request():
        client = await make_aio_client(
            echo_thrift.EchoService, '127.0.0.1', 6000)
        print(await client.echo('hello, world'))
        client.close()

.. code:: python

    import asyncio
    import thriftpy2

    from thriftpy2.rpc import make_aio_server

    echo_thrift = thriftpy2.load("echo.thrift", module_name="echo_thrift")


    class Dispatcher(object):
        async def echo(self, param):
            print(param)
            await asyncio.sleep(0.1)
            return param


    def main():
        server = make_aio_server(
            echo_thrift.EchoService, Dispatcher(), '127.0.0.1', 6000)
        server.serve()


    if __name__ == '__main__':
        main()

See, it's that easy!

You can refer to 'examples' and 'tests' directory in source code for more
usage examples.


Features
========

Currently ThriftPy have these features (also advantages over the upstream
python lib):

- Python 3.6+ and PyPy3.

- Pure python implementation. No longer need to compile & install the 'thrift'
  package. All you need is thriftpy2 and thrift file.

- Compatible with Apache Thrift. You can use ThriftPy together with the
  official implementation servers and clients, such as a upstream server with
  a thriftpy2 client or the opposite.

  Currently implemented protocols and transports:

  * binary protocol (python and cython)

  * compact protocol (python and cython)

  * json protocol

  * Apache JSON protocol compatible with apache thrift distribution's JSON protocol.
    Simply do ``from thriftpy2.protocol import TApacheJSONProtocolFactory`` and pass
    this to the ``proto_factory`` argument where appropriate.

  * buffered transport (python & cython)

  * framed transport

  * tornado server and client (with tornado 4.0)

  * http server and client

  * asyncio support (python 3.5 or later)

- Can directly load thrift file as module, the sdk code will be generated on
  the fly.

  For example, ``pingpong_thrift = thriftpy2.load("pingpong.thrift", module_name="pingpong_thrift")``
  will load 'pingpong.thrift' as 'pingpong_thrift' module.

  Or, when import hook enabled by ``thriftpy2.install_import_hook()``, you can
  directly use ``import pingpong_thrift`` to import the 'pingpong.thrift' file
  as module, you may also use ``from pingpong_thrift import PingService`` to
  import specific object from the thrift module.

- Easy RPC server/client setup.



Contribute
==========

1. Fork the repo and make changes.

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

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

4. Send 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/blob/master/CHANGES.rst
