Design Guidelines¶
(Not hard and fast but intended to act as a tiebreaker if needed)
- networkzero is aimed at beginners and particularly at those in an educational setting (classroom, Raspberry Jam etc.)
- If you need more than this, you’ll want to drop down to ZeroMQ itself, or some other library, and implement your own. Or at least use the internals of networkzero directly.
- The preference is for module-level functions rather than objects. (Behind the scenes, global object caches are used)
- As much as possible, code should work in the interactive interpreter
- Thread-safety should be considered especially since libraries such as GPIOZero implement callbacks via threads, so NetworkZero code might unwittingly be invoked from within a thread.
- Code will work unchanged on one box and on several.
- Code will work unchanged on Linux, OS X & Windows, assuming that the prerequisites are met (basically: recent Python & zmqlib).
- Code will work unchanged on Python 2.7 and Python 3.2+
- The discovery & messenger modules are uncoupled: neither relies on or knows about the internals of the other.
- All useful functions & constants are exported from the root of the package so either “import networkzero as nw0” or “from networkzero import *” will provide the whole of the public API.
- Underscore prefixes will be used to ensure that only the public API be visible via help(). This reduces visual clutter.