diff options
author | Dimitri Staessens <dimitri@ouroboros.rocks> | 2020-05-07 20:49:16 +0200 |
---|---|---|
committer | Dimitri Staessens <dimitri@ouroboros.rocks> | 2020-05-07 20:49:16 +0200 |
commit | 1d2c3186484c51f4aebbff5807c8e78bfec0436d (patch) | |
tree | 64f9504d129555216510f0bb3ad9865357af78ad /content/en/blog | |
parent | adf9b2cab7b64b22c15fc494584dece43e65c023 (diff) | |
download | website-1d2c3186484c51f4aebbff5807c8e78bfec0436d.tar.gz website-1d2c3186484c51f4aebbff5807c8e78bfec0436d.zip |
blog: Add a short post on Python API
Diffstat (limited to 'content/en/blog')
-rw-r--r-- | content/en/blog/news/20200507-python.md | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/content/en/blog/news/20200507-python.md b/content/en/blog/news/20200507-python.md new file mode 100644 index 0000000..752ded1 --- /dev/null +++ b/content/en/blog/news/20200507-python.md @@ -0,0 +1,67 @@ +--- +date: 2020-05-07 +title: "A python API for Ouroboros" +linkTitle: "Python" +description: "Python" +author: Dimitri Staessens +--- + +Support for other programming languages than C/C++ has been on my todo +list for quite some time. The initial approach was using +[SWIG](http://www.swig.org), but we found the conversion always +clunky, it didn't completely work as we wanted to, and a while back we +just decided to deprecate it. Apart from C/C++ we only had a [rust +wrapper](https://github.com/chritchens/ouroboros-rs). + +Until now! I finally took the time to sink my teeth into the bindings +for Python. I had some brief looks at the +[ctypes](https://docs.python.org/3/library/ctypes.html) library a +while back, but this time I looked into +[cffi](https://cffi.readthedocs.io/en/latest/) and I was amazed at how +simple it was to wrap the more difficult functions that manipulate +blocks of memory (flow\_read, but definitely the async fevent() call). +And now there is path towards a 'nice' Python API. + +Here is a taste of what the +[eocho](https://ouroboros.rocks/cgit/ouroboros/tree/src/tools/oecho/oecho.c) +tool looks like in Python: + +```Python +from ouroboros import * +import argparse + + +def client(): + f = flow_alloc("oecho") + f.writeline("Hello, PyOuroboros!") + print(f.readline()) + f.dealloc() + + +def server(): + print("Starting the server.") + while True: + f = flow_accept() + print("New flow.") + line = f.readline() + print("Message from client is " + line) + f.writeline(line) + f.dealloc() + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description='A simple echo client/server') + parser.add_argument('-l', '--listen', help='run as a server', action='store_true') + args = parser.parse_args() + if args.listen is True: + server() + else: + client() +``` + +I have more time in the next couple of days, so I expect this to be +released after the weekend. Can't wait to get the full API done! + +Cheers, + +Dimitri |