Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/acatton/ohneio

Parse protocols, without any I/O
https://github.com/acatton/ohneio

asyncio framework parser python-3

Last synced: 3 months ago
JSON representation

Parse protocols, without any I/O

Awesome Lists containing this project

README

        

Ohne I/O
========

.. image:: https://travis-ci.org/acatton/ohneio.svg?branch=master
:target: https://travis-ci.org/acatton/ohneio

Utility library to write network protocol parser, `sans I/O `_.

`Ohne `_ I/O (without I/O in German) is a library using
`asyncio `_ corouting programming style.

This library only supports Python 3.4+ (including Python 3.6 nightly)

``ohneio`` allows you to write protocol parsers the way you would write an asyncio protocol:

.. code-block:: python

>>> import base64
>>> import ohneio
>>>
>>> def wait_for(s):
... while True:
... data = yield from ohneio.peek()
... pos = data.find(s)
... if pos >= 0:
... return pos
... yield from ohneio.wait()
...
>>> def read_until(s):
... pos = yield from wait_for(s)
... data = yield from ohneio.read(pos)
... return data
...
>>> @ohneio.protocol
... def echo_base64(separator):
... while True:
... segment = yield from read_until(separator)
... yield from ohneio.read(len(separator))
... yield from ohneio.write(base64.b64encode(segment) + separator)
...
>>> connection = echo_base64(b'\r\n')
>>> connection.send(b'hello')
>>> connection.read()
b''
>>> connection.send(b'\r\nworld\r\n')
>>> connection.read()
b'aGVsbG8=\r\nd29ybGQ=\r\n'

The example above also shows how ``ohneio`` allows you to combine primitives
into bigger parsing functions (like ``wait_for`` and ``read_until``).