code: def setValuesFromDict(self, dct):
          
          if 'nodeName' not in dct:
              return
  
          nodeName = dct['nodeName']
          if nodeName != self.nodeName:
              msg = "nodeName mismatch: expected {!r}, got {!r}".format(self.nodeName, nodeName)
              if DEBUGGING:
                  raise ValueError(msg)
              else:
                  logger.warn(msg)
                  return
  
          self._nodeSetValuesFromDict(dct)
  
          for childDct in dct.get('childItems', []):
              key = childDct['nodeName']
              try:
                  childCti = self.childByNodeName(key)
              except IndexError as _ex:
                  logger.warn("Unable to set values for: {}".format(key))
              else:
                  childCti.setValuesFromDict(childDct)
docs: Recursively sets values from a dictionary created by getNonDefaultsDict.
  
              Does not raise exceptions (logs warnings instead) so that we can remove/rename node
              names in future Argos versions (or remove them) without breaking the application.
  
              Typically descendants should override _nodeSetValuesFromDict instead of this function.