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.