chrysn / aiocoap

The Python CoAP library
Other
267 stars 120 forks source link
asyncio coap internet-of-things oscore python

aiocoap -- The Python CoAP library

The aiocoap package is an implementation of CoAP, the Constrained Application Protocol_.

It is written in Python 3 using its native asyncio_ methods to facilitate concurrent operations while maintaining an easy to use interface.

.. Constrained Application Protocol: http://coap.space/ .. native asyncio: https://docs.python.org/3/library/asyncio

Usage

For how to use the aiocoap library, have a look at the guidedtour, or at the examples and tools_ provided.

A full reference is available in the API documentation_.

All examples can be run directly from a source code copy. If you prefer to install it, the usual Python mechanisms apply (see installation_).

.. _API documentation: http://aiocoap.readthedocs.io/en/latest/api.html

Features / Standards

This library supports the following standards in full or partially:

If something described by one of the standards but not implemented, it is considered a bug; please file at the github issue tracker_. (If it's not on the list or in the excluded items, file a wishlist item at the same location).

.. _RFC7252: https://tools.ietf.org/html/rfc7252 .. _RFC7641: https://tools.ietf.org/html/rfc7641 .. _RFC7959: https://tools.ietf.org/html/rfc7959 .. _RFC7967: https://tools.ietf.org/html/rfc7967 .. _RFC8132: https://tools.ietf.org/html/rfc8132 .. _RFC8323: https://tools.ietf.org/html/rfc8323 .. _RFC8613: https://tools.ietf.org/html/rfc8613 .. _RFC9176: https://tools.ietf.org/html/rfc9176 .. _RFC9528: https://tools.ietf.org/html/rfc9528 .. _draft-ietf-core-oscore-groupcomm-21: https://tools.ietf.org/html/draft-ietf-core-oscore-groupcomm-21 .. _lakers: https://pypi.org/project/lakers-python/

Dependencies

Basic aiocoap works out of the box on Python 3.10 or newer (also works on PyPy3). For full support (DTLS, OSCORE and link-format handling) follow the installation_ instructions as these require additional libraries.

aiocoap provides different network backends for different platforms. The most featureful backend is available for Linux, but most operations work on BSDs, Windows and macOS as well. See the FAQ_ for more details.

If your library depends on aiocoap, it should pick the required extras (as per installation_) and declare a dependency like aiocoap[linkheader,oscore] >= 0.4b2.

.. _Python: https://www.python.org/ .. _PyPy3: http://pypy.org/ .. _FAQ: http://aiocoap.readthedocs.io/en/latest/faq.html

Development

aiocoap tries to stay close to PEP8_ recommendations and general best practice, and should thus be easy to contribute to.

Bugs (ranging from "design goal" and "wishlist" to typos) are currently tracked in the github issue tracker_. Pull requests are welcome there; if you start working on larger changes, please coordinate on the issue tracker.

Documentation is built using sphinx_ with python3 -m sphinx doc/ ${TARGET}; hacks used there are described in ./doc/README.doc.

Unit tests are implemented in the ./tests/ directory and easiest run using tox (but also available through python3 -m unittest to test the local environment); complete test coverage is aimed for, but not yet complete (and might never be, as the error handling for pathological network partners is hard to trigger with a library designed not to misbehave). The tests are regularly run at the CI suite at codeberg, from where coverage reports_ are available.

.. _PEP8: http://legacy.python.org/dev/peps/pep-0008/ .. sphinx: http://sphinx-doc.org/ .. github issue tracker: https://github.com/chrysn/aiocoap/issues .. CI suite at codeberg: https://ci.codeberg.org/repos/12879 .. coverage reports: https://aiocoap.codeberg.page/aiocoap/coverage/ .. _tox: https://tox.readthedocs.io/

Relevant URLs

Licensing

aiocoap is published under the MIT License, and follows the best practice of reuse.software_. Files in aiocoap/util/vendored/ may have different (but compatible and OSI approved) licenses.

When using aiocoap for a publication, please cite it according to the output of ./setup.py cite [--bibtex].

Copyright Christian Amsüss and the aiocoap contributors.

aiocoap was originally based on txThings_ by Maciej Wasilak. The full list of aiocoap contributors can be obtained from the version control history.

.. Any filtering by a mailmap would apply, but no need to state that unless we do get a mailmap.

.. _guidedtour: http://aiocoap.readthedocs.io/en/latest/guidedtour.html .. _examples: http://aiocoap.readthedocs.io/en/latest/examples.html .. _tools: http://aiocoap.readthedocs.io/en/latest/tools.html .. installation: http://aiocoap.readthedocs.io/en/latest/installation.html .. aiocoap module: http://aiocoap.readthedocs.io/en/latest/module/aiocoap.html .. _reuse.software: https://reuse.software/ .. _txThings: https://github.com/siskin/txThings