docs: def loadSCPD(self, serviceType=None, timeout=3, ignoreFailures=False):
          """Load action definition(s) (Service Control Protocol Document).
  
          If the device definitions have been loaded via loadDeviceDefinitions() this method loads actions definitions.
          The action definitions are needed if you like to execute an action on a UPnP device. The actions definition
          contains the name of the action, the input and output parameter. You use the definition either with
          execute() or with the actions module of this library which predefines a lot of actions based on the TR64
          standard.
  
          :param serviceType: the serviceType for which the action definitions should be loaded or all known service
              types if None.
          :param float timeout: the timeout for downloading
          :param bool ignoreFailures: if set to true and serviceType is None any failure in the iteration of loading
              all SCPD will be ignored.
          :raises ValueType: if the given serviceType is not known or when the definition can not be loaded.
          :raises requests.exceptions.ConnectionError: when the scpd can not be downloaded
          :raises requests.exceptions.ConnectTimeout: when download time out
  
          .. seealso::
  
              :meth:`~simpletr64.DeviceTR64.loadDeviceDefinitions`, :meth:`~simpletr64.DeviceTR64.deviceSCPD`,
              :doc:`tr64`
          """
  
          if serviceType is not None:
              self._loadSCPD(serviceType, float(timeout))
          else:
              self.__deviceSCPD = {}
              for serviceType in self.__deviceServiceDefinitions.keys():
                  # remove any previous error
                  self.__deviceServiceDefinitions[serviceType].pop("error", None)
  
                  try:
                      self._loadSCPD(serviceType, float(timeout))
                  except ValueError as e:
                      if not ignoreFailures:
                          # we not ignoring this so rethrow last exception
                          raise
                      else:
                          # add a message in the structure
                          self.__deviceServiceDefinitions[serviceType]["error"] = str(e)