============
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/27/23/a0a3d09e0f98d96200156ae4173a58372e659cef5b9d785f0838a27b1513/thriftpy2-0.5.1.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.1",
"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": "c3909d3134f0cab167cf2b82a4ce6cdff678364eadbdeb598ce134c9eba589e6",
"md5": "2cb673403dbfc890fb20e476465bdb8d",
"sha256": "6709f444741c4ddbdec16bd64162001d176a6aa49aa52c7b1ecc931214a31972"
},
"downloads": -1,
"filename": "thriftpy2-0.5.1-cp312-cp312-macosx_14_0_x86_64.whl",
"has_sig": false,
"md5_digest": "2cb673403dbfc890fb20e476465bdb8d",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.6",
"size": 865540,
"upload_time": "2024-06-24T14:04:35",
"upload_time_iso_8601": "2024-06-24T14:04:35.093340Z",
"url": "https://files.pythonhosted.org/packages/c3/90/9d3134f0cab167cf2b82a4ce6cdff678364eadbdeb598ce134c9eba589e6/thriftpy2-0.5.1-cp312-cp312-macosx_14_0_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "2723a0a3d09e0f98d96200156ae4173a58372e659cef5b9d785f0838a27b1513",
"md5": "d271741e0ee291ea79f24e4a0df74e6e",
"sha256": "27068fb5dbb5959b4c1f5a6ba5b1afbf5e8e4e744310e9633307be8174051c0f"
},
"downloads": -1,
"filename": "thriftpy2-0.5.1.tar.gz",
"has_sig": false,
"md5_digest": "d271741e0ee291ea79f24e4a0df74e6e",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.6",
"size": 781584,
"upload_time": "2024-06-24T14:04:37",
"upload_time_iso_8601": "2024-06-24T14:04:37.640951Z",
"url": "https://files.pythonhosted.org/packages/27/23/a0a3d09e0f98d96200156ae4173a58372e659cef5b9d785f0838a27b1513/thriftpy2-0.5.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-06-24 14:04:37",
"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"
}