diff --git a/NOTES.md b/NOTES.md new file mode 100644 index 0000000..77aa888 --- /dev/null +++ b/NOTES.md @@ -0,0 +1,5 @@ +# HOWTO port + +- its a sans-io module, no IO included +- its got a callback API recv -> onmessage which Id like to replace + - plan is then maybe to use a async with API for this handling diff --git a/README.md b/README.md index 0571801..3244539 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [![Build Status](https://drone.autonomic.zone/api/badges/hyperpy/simple-message-channels/status.svg)](https://drone.autonomic.zone/hyperpy/simple-message-channels) -## Wire protocol for Hypercore +## Sans I/O wire protocol for Hypercore ```sh $ pip install simple-message-channels diff --git a/setup.cfg b/setup.cfg index 2f28a5e..65cb7c8 100644 --- a/setup.cfg +++ b/setup.cfg @@ -21,7 +21,7 @@ maintainer_email = hi@decentral1.se url = https://git.autonomic.zone/hyperpy/simple-message-channels project_urls = Source Code = https://git.autonomic.zone/hyperpy/simple-message-channels -description = Low level wire protocol for Hypercore +description = Sans I/O wire protocol for Hypercore long_description = file: README.md license = GPLv3 license_file = LICENSE diff --git a/simple_message_channels/__init__.py b/simple_message_channels/__init__.py index 9c22bd0..46e4511 100644 --- a/simple_message_channels/__init__.py +++ b/simple_message_channels/__init__.py @@ -1,5 +1,7 @@ """simple-message-channels module.""" +from simple_message_channels.smc import SimpleMessageChannel # noqa + try: import pkg_resources except ImportError: @@ -7,6 +9,6 @@ except ImportError: try: - __version__ = pkg_resources.get_distribution('simple-message-channels').version + __version__ = pkg_resources.get_distribution('simple_message_channels').version except Exception: __version__ = 'unknown' diff --git a/simple_message_channels/smc.py b/simple_message_channels/smc.py new file mode 100644 index 0000000..95c7c5c --- /dev/null +++ b/simple_message_channels/smc.py @@ -0,0 +1,12 @@ +"""Sans I/O wire protocol for Hypercore""" + +__all__ = ["SimpleMessageChannel"] + + +class SimpleMessageChannel: + """A simple message channel.""" + + async def send(self, channel: int, type: int, message: bytes) -> bytes: + pass + + # TODO(decentral1se): spec out the context manager API of recv diff --git a/test/conftest.py b/test/conftest.py new file mode 100644 index 0000000..3f9dcff --- /dev/null +++ b/test/conftest.py @@ -0,0 +1,8 @@ +import pytest + + +@pytest.fixture +def smc(): + from simple_message_channels import SimpleMessageChannel + + return SimpleMessageChannel() diff --git a/test/test_smc.py b/test/test_smc.py new file mode 100644 index 0000000..bd98f04 --- /dev/null +++ b/test/test_smc.py @@ -0,0 +1,10 @@ +async def test_send_recv(smc): + channel, type, message = 0, 0, b"abc" + + payload = await smc.send(channel, type, message) + assert isinstance(payload, bytes) + + async with smc.recv(payload) as response: + assert response.channel == channel + assert response.type == type + assert response.message == message