A Python wrapper library for the DTN7 REST and WebSocket API of dtn7-rs.
The library includes a fully spec compliant Bundle
type (but without fragment and CRC support), which allows full
bundle creation and (de-)serialization.
The bundle.py
, dtn_rest_client.py
, utils.py
modules/files are Micropython compatible.
But, this requires a bit of manual library management.
Please refer to the Micropython installation guide below.
To use py-dtn7
in your project, simply install it from PyPI with Poetry:
$ poetry install --no-dev py_dtn7
This is very much a work-in-progress and by far not complete. The Bundle implementation is very rudimentary and does not support any blocks other than Primary and Payload.
To generate the API documentation use pdoc
:
$ pdoc ./py_dtn7 --output-directory ./docs
... or check out py-dtn7.readthedocs.org
>>> from py_dtn7 import DTNRESTClient
>>> client = DTNRESTClient(host="http://localhost", port=3000)
>>> d.peers
{'box1': {'eid': [1, '//box1/'], 'addr': {'Ip': '10.0.0.42'}, 'con_type': 'Dynamic', 'period': None, 'cla_list': [['MtcpConvergenceLayer', 16162]], 'services': {}, 'last_contact': 1653316457}}
>>> d.info
{'incoming': 0, 'dups': 0, 'outgoing': 0, 'delivered': 3, 'broken': 0}
When sending a bundle to a known peer, we can simply supply the peer name and endpoint, otherwise we use the complete URI:
>>> d.send(payload={"body": "This will be transferred as json"}, peer_name="box1", endpoint="info")
<Response [200]>
>>> r = d.send(payload="Is there anybody out there?", destination="dtn://greatunkown/incoming")
>>> r.content.decode("utf-8")
'Sent payload with 27 bytes'
To be extended:
The dummy libraries __future__.py
, abc.py
, typing.py
, the micropython-cbor library (specifically the cbor.py
module/file) and urequests
as well as datetime
are needed:
$ mpremote mip install urequests
$ mpremote mip install datetime