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  | 
