code: def updateSourceProperty(self, name, value, source=''):
          
          # pick a decent source name
          if source == '':
              source = self.__class__.__name__
  
          if self.codebase != '':
              assert not isinstance(self.getProperty(name, None), str), \
                  "Sourcestep %s has a codebase, other sourcesteps don't" \
                  % self.name
              property_dict = self.getProperty(name, {})
              property_dict[self.codebase] = value
              super().setProperty(name, property_dict, source)
          else:
              assert not isinstance(self.getProperty(name, None), dict), \
                  "Sourcestep %s does not have a codebase, other sourcesteps do" \
                  % self.name
              super().setProperty(name, value, source)
docs: Update a property, indexing the property by codebase if codebase is not
          ''.  Source steps should generally use this instead of setProperty.