docs: def _load_preset(self, path):
          ''' load, validate and store a single preset file'''
  
          try:
              with open(path, 'r') as f:
                  presetBody = json.load(f)
          except IOError as e:
              raise PresetException("IOError: " + e.strerror)
          except ValueError as e:
              raise PresetException("JSON decoding error: " + str(e))
          except Exception as e:
              raise PresetException(str(e))
  
          try:
              preset = Preset(presetBody)
          except PresetException as e:
              e.message = "Bad format: " + e.message
              raise
  
          if(preset.id in self.presets):
              raise PresetException("Duplicate preset id: " + preset.id)
          else:
              self.presets[preset.id] = preset