Erlang port protocol for Python
Project URLs:
Description
The erlport Python library implements Erlang external term format and Erlang port protocol for easier integration of Python and Erlang.
The library exports the following classes and functions:
Port(packet=1, use_stdio=False, compressed=False) - class implementing port which connects with the corresponding Erlang port. See open_port/2 for description of packet and use_stdio arguments. compressed is the zlib compression level or True for the default of 6.
Protocol() - class which simplifies creation of request-response protocols.
Atom(str) - class which represents an Erlang atom.
String(unicode | list) - class representing an Erlang string. Must be used as a wrapper if Unicode string expected instead of a list.
BitBinary(str) - class representing an Erlang bitstring whose length in bits is not a multiple of 8.
decode(str) - function to convert binary data into a term.
encode(term, compressed=False) - function to convert a term into the external format. compressed is the zlib compression level or True for the default of 6.
IncompleteData - exception raised by decode() in case of incomplete input data.
Installation
Prerequisites:
Erlang >= R11B-4
Python >= 2.4
To install the library use easy_install from setuptools package like this:
$ easy_install erlport
Examples
See examples directory in the source distribution for additional examples.
For simple request-response protocol use Port and Protocol on the Python side like this:
from erlport import Port, Protocol
class HelloProtocol(Protocol):
def handle_hello(self, name):
return "Hello, %s" % name
if __name__ == "__main__":
proto = HelloProtocol()
proto.run(Port(use_stdio=True))
On the Erlang side function hello() can be called like this:
-module(hello).
-export([hello/1]).
hello(Name) ->
Port = open_port({spawn, "python -u hello.py"}, [{packet, 1}, binary]),
port_command(Port, term_to_binary({hello, Name})),
receive
{Port, {data, Data}} ->
binary_to_term(Data)
end.
Test it in the Erlang shell:
1> c(hello).
{ok,hello}
2> hello:hello("Bob").
"Hello, Bob"
Notes for Windows users
It seems Erlang’s open_port function ignores nouse_stdio option on Windows. So the Port class must be instantiated with use_stdio=True argument.
Python must be ran with -u option to open stdin/stdout in binary mode.
Feedback
Please report bugs, offer suggestions or feedback at:
Report bugs at http://github.com/hdima/erlport/issues
Email me at <dima at hlabs.org>
Write or follow me at http://twitter.com/hdima
Metadata
Release files for erlport 0.6
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| erlport-0.6.tar.gz | 13.2 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| erlport-0.6-py2.6.egg | Legacy Egg format | - | - | Details |
Total release size: 28.7 kB
Release files / erlport-0.6.tar.gz
| Download URL | erlport-0.6.tar.gz |
|---|---|
| Size | 13.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
bbd894e1502a00964bca8a84283048cee599234b5a59fffa21c82e09366a399c
|
|
BLAKE2b-256 checksum How to use checksums |
8a78e2a89dd0802f2f4a04a22d2dfb1855ed75d55a6ae219ef251e0c723d0f43
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
Release files / erlport-0.6-py2.6.egg
| Download URL | erlport-0.6-py2.6.egg |
|---|---|
| Size | 15.5 kB |
| Tags | Egg |
|
SHA-256 checksum How to use checksums |
f6662a9b141142c1a1234af6cc9d38d7ac1ec841e59495bc1ba61e8b0b94ac6d
|
|
BLAKE2b-256 checksum How to use checksums |
6d314f7393314dba575bb63036c8c573f13c35be5516b28733711a50ba9e76af
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
Security for erlport 0.6
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.