Pure python implementation of Apache Thrift.
Project description
========
ThriftPy2
========
ThriftPy: https://github.com/eleme/thriftpy has deprecated, ThriftPy2 aims to provide long term support.
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 thriftpy
pingpong_thrift = thriftpy.load("pingpong.thrift", module_name="pingpong_thrift")
from thriftpy.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 thriftpy
pingpong_thrift = thriftpy.load("pingpong.thrift", module_name="pingpong_thrift")
from thriftpy.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 thriftpy
import asyncio
from thriftpy.rpc import make_aio_client
echo_thrift = thriftpy.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 thriftpy
from thriftpy.rpc import make_aio_server
echo_thrift = thriftpy.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):
- Supports Python 2.7, Python 3.4+, PyPy and PyPy3.
- Pure python implementation. No longer need to compile & install the 'thrift'
package. All you need is thriftpy 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 thriftpy client or the opposite.
Currently implemented protocols and transports:
* binary protocol (python and cython)
* compact protocol (python and cython)
* json protocol
* 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 = thriftpy.load("pingpong.thrift", module_name="pingpong_thrift")``
will load 'pingpong.thrift' as 'pingpong_thrift' module.
Or, when import hook enabled by ``thriftpy.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 ``travis-ci`` or ``tox`` tests succeed.
4. Send pull request.
Contributors
============
https://github.com/eleme/thriftpy/graphs/contributors
Changelog
=========
https://github.com/eleme/thriftpy/blob/master/CHANGES.rst
ThriftPy2
========
ThriftPy: https://github.com/eleme/thriftpy has deprecated, ThriftPy2 aims to provide long term support.
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 thriftpy
pingpong_thrift = thriftpy.load("pingpong.thrift", module_name="pingpong_thrift")
from thriftpy.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 thriftpy
pingpong_thrift = thriftpy.load("pingpong.thrift", module_name="pingpong_thrift")
from thriftpy.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 thriftpy
import asyncio
from thriftpy.rpc import make_aio_client
echo_thrift = thriftpy.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 thriftpy
from thriftpy.rpc import make_aio_server
echo_thrift = thriftpy.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):
- Supports Python 2.7, Python 3.4+, PyPy and PyPy3.
- Pure python implementation. No longer need to compile & install the 'thrift'
package. All you need is thriftpy 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 thriftpy client or the opposite.
Currently implemented protocols and transports:
* binary protocol (python and cython)
* compact protocol (python and cython)
* json protocol
* 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 = thriftpy.load("pingpong.thrift", module_name="pingpong_thrift")``
will load 'pingpong.thrift' as 'pingpong_thrift' module.
Or, when import hook enabled by ``thriftpy.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 ``travis-ci`` or ``tox`` tests succeed.
4. Send pull request.
Contributors
============
https://github.com/eleme/thriftpy/graphs/contributors
Changelog
=========
https://github.com/eleme/thriftpy/blob/master/CHANGES.rst
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
thriftpy2-0.3.11.tar.gz
(287.0 kB
view details)
File details
Details for the file thriftpy2-0.3.11.tar.gz
.
File metadata
- Download URL: thriftpy2-0.3.11.tar.gz
- Upload date:
- Size: 287.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/40.4.3 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.7.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | cf92fa9262736fca822e31d9e360bd14f9a45d5add870f417c9b1d9f8831a2b0 |
|
MD5 | d4b4b3b5461802e7f5233a52b1b7ab17 |
|
BLAKE2b-256 | 88357829afe940eed69137522b6d7b96e6cb732116775b4a7cfeea0d6e84201d |