thriftpy2


Namethriftpy2 JSON
Version 0.5.0 PyPI version JSON
download
home_pagehttps://thriftpy2.readthedocs.io/
SummaryPure python implementation of Apache Thrift.
upload_time2024-05-07 11:57:57
maintainerNone
docs_urlNone
authorThriftPy Organization
requires_python>=3.6
licenseMIT
keywords thrift python thriftpy thriftpy2
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            ============
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

            

Raw data

            {
    "_id": null,
    "home_page": "https://thriftpy2.readthedocs.io/",
    "name": "thriftpy2",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.6",
    "maintainer_email": null,
    "keywords": "thrift python thriftpy thriftpy2",
    "author": "ThriftPy Organization",
    "author_email": "gotzehsing@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/ed/b9/3296ead586c7484e099765fa15734a44586508f5306ba9ea6d4a719decd5/thriftpy2-0.5.0.tar.gz",
    "platform": null,
    "description": "============\nThriftPy2\n============\n\n.. image:: https://img.shields.io/codecov/c/github/Thriftpy/thriftpy2.svg\n    :target: https://codecov.io/gh/Thriftpy/thriftpy2\n\n.. image:: https://img.shields.io/pypi/dm/thriftpy2.svg\n    :target: https://pypi.org/project/thriftpy2/\n\n.. image:: https://img.shields.io/pypi/v/thriftpy2.svg\n    :target: https://pypi.org/project/thriftpy2/\n\n.. image:: https://img.shields.io/pypi/pyversions/thriftpy2.svg\n    :target: https://pypi.org/project/thriftpy2/\n\n.. image:: https://img.shields.io/pypi/implementation/thriftpy2.svg\n    :target: https://pypi.org/project/thriftpy2/\n\n\nThriftPy: https://github.com/eleme/thriftpy has been deprecated, ThriftPy2 aims to provide long term support.\n\n\nMigrate from Thriftpy?\n======================\n\nAll you need is:\n\n.. code:: python\n\n    import thriftpy2 as thriftpy\n\n\nThat's it! thriftpy2 is fully compatible with thriftpy.\n\n\nInstallation\n============\n\nInstall with pip.\n\n.. code:: bash\n\n    $ pip install thriftpy2\n\nYou may also install cython first to build cython extension locally.\n\n.. code:: bash\n\n    $ pip install cython thriftpy2\n\n\nCode Demo\n=========\n\nThriftPy make it super easy to write server/client code with thrift. Let's\ncheckout this simple pingpong service demo.\n\nWe need a 'pingpong.thrift' file:\n\n::\n\n    service PingPong {\n        string ping(),\n    }\n\nThen we can make a server:\n\n.. code:: python\n\n    import thriftpy2\n    pingpong_thrift = thriftpy2.load(\"pingpong.thrift\", module_name=\"pingpong_thrift\")\n\n    from thriftpy2.rpc import make_server\n\n    class Dispatcher(object):\n        def ping(self):\n            return \"pong\"\n\n    server = make_server(pingpong_thrift.PingPong, Dispatcher(), '127.0.0.1', 6000)\n    server.serve()\n\nAnd a client:\n\n.. code:: python\n\n    import thriftpy2\n    pingpong_thrift = thriftpy2.load(\"pingpong.thrift\", module_name=\"pingpong_thrift\")\n\n    from thriftpy2.rpc import make_client\n\n    client = make_client(pingpong_thrift.PingPong, '127.0.0.1', 6000)\n    print(client.ping())\n\nAnd it also supports asyncio on Python 3.5 or later:\n\n.. code:: python\n\n    import thriftpy2\n    import asyncio\n    from thriftpy2.rpc import make_aio_client\n\n\n    echo_thrift = thriftpy2.load(\"echo.thrift\", module_name=\"echo_thrift\")\n\n\n    async def request():\n        client = await make_aio_client(\n            echo_thrift.EchoService, '127.0.0.1', 6000)\n        print(await client.echo('hello, world'))\n        client.close()\n\n.. code:: python\n\n    import asyncio\n    import thriftpy2\n\n    from thriftpy2.rpc import make_aio_server\n\n    echo_thrift = thriftpy2.load(\"echo.thrift\", module_name=\"echo_thrift\")\n\n\n    class Dispatcher(object):\n        async def echo(self, param):\n            print(param)\n            await asyncio.sleep(0.1)\n            return param\n\n\n    def main():\n        server = make_aio_server(\n            echo_thrift.EchoService, Dispatcher(), '127.0.0.1', 6000)\n        server.serve()\n\n\n    if __name__ == '__main__':\n        main()\n\nSee, it's that easy!\n\nYou can refer to 'examples' and 'tests' directory in source code for more\nusage examples.\n\n\nFeatures\n========\n\nCurrently ThriftPy have these features (also advantages over the upstream\npython lib):\n\n- Python 3.6+ and PyPy3.\n\n- Pure python implementation. No longer need to compile & install the 'thrift'\n  package. All you need is thriftpy2 and thrift file.\n\n- Compatible with Apache Thrift. You can use ThriftPy together with the\n  official implementation servers and clients, such as a upstream server with\n  a thriftpy2 client or the opposite.\n\n  Currently implemented protocols and transports:\n\n  * binary protocol (python and cython)\n\n  * compact protocol (python and cython)\n\n  * json protocol\n\n  * Apache JSON protocol compatible with apache thrift distribution's JSON protocol.\n    Simply do ``from thriftpy2.protocol import TApacheJSONProtocolFactory`` and pass\n    this to the ``proto_factory`` argument where appropriate.\n\n  * buffered transport (python & cython)\n\n  * framed transport\n\n  * tornado server and client (with tornado 4.0)\n\n  * http server and client\n\n  * asyncio support (python 3.5 or later)\n\n- Can directly load thrift file as module, the sdk code will be generated on\n  the fly.\n\n  For example, ``pingpong_thrift = thriftpy2.load(\"pingpong.thrift\", module_name=\"pingpong_thrift\")``\n  will load 'pingpong.thrift' as 'pingpong_thrift' module.\n\n  Or, when import hook enabled by ``thriftpy2.install_import_hook()``, you can\n  directly use ``import pingpong_thrift`` to import the 'pingpong.thrift' file\n  as module, you may also use ``from pingpong_thrift import PingService`` to\n  import specific object from the thrift module.\n\n- Easy RPC server/client setup.\n\n\n\nContribute\n==========\n\n1. Fork the repo and make changes.\n\n2. Write a test which shows a bug was fixed or the feature works as expected.\n\n3. Make sure ``tox`` tests succeed.\n\n4. Send pull request.\n\n\nContributors\n============\n\nhttps://github.com/Thriftpy/thriftpy2/graphs/contributors\n\n\nSponsors:\n============\n\n.. image:: ./docs/jetbrains.svg\n    :target: https://www.jetbrains.com/?from=ThriftPy\n\n\nChangelog\n=========\n\nhttps://github.com/Thriftpy/thriftpy2/blob/master/CHANGES.rst\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Pure python implementation of Apache Thrift.",
    "version": "0.5.0",
    "project_urls": {
        "Homepage": "https://thriftpy2.readthedocs.io/",
        "Source": "https://github.com/Thriftpy/thriftpy2"
    },
    "split_keywords": [
        "thrift",
        "python",
        "thriftpy",
        "thriftpy2"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "125f26356c229eadb7452cec79881de2c3c1e86ec2b5453457ad89447fbca6b2",
                "md5": "4ec2d2a9373506f7580eb1005667a86b",
                "sha256": "fbc619670d4cbfa1c40eabdb6c6ccb2cac6b812a5a13db6a4b8c78db5451f93f"
            },
            "downloads": -1,
            "filename": "thriftpy2-0.5.0-cp312-cp312-macosx_14_0_x86_64.whl",
            "has_sig": false,
            "md5_digest": "4ec2d2a9373506f7580eb1005667a86b",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.6",
            "size": 806830,
            "upload_time": "2024-05-07T11:57:53",
            "upload_time_iso_8601": "2024-05-07T11:57:53.869085Z",
            "url": "https://files.pythonhosted.org/packages/12/5f/26356c229eadb7452cec79881de2c3c1e86ec2b5453457ad89447fbca6b2/thriftpy2-0.5.0-cp312-cp312-macosx_14_0_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "edb93296ead586c7484e099765fa15734a44586508f5306ba9ea6d4a719decd5",
                "md5": "8fb9cb717c76566dcbed2c81385f89e4",
                "sha256": "56b4e21ede866666df3cc162cb6488fb385eeaaacc4376fc8175b36d37914318"
            },
            "downloads": -1,
            "filename": "thriftpy2-0.5.0.tar.gz",
            "has_sig": false,
            "md5_digest": "8fb9cb717c76566dcbed2c81385f89e4",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.6",
            "size": 779019,
            "upload_time": "2024-05-07T11:57:57",
            "upload_time_iso_8601": "2024-05-07T11:57:57.161325Z",
            "url": "https://files.pythonhosted.org/packages/ed/b9/3296ead586c7484e099765fa15734a44586508f5306ba9ea6d4a719decd5/thriftpy2-0.5.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-05-07 11:57:57",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "Thriftpy",
    "github_project": "thriftpy2",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "tox": true,
    "lcname": "thriftpy2"
}
        
Elapsed time: 0.27500s