code: def provider(self, name, history=None):
          
          if history is None:
              history = []
          history.append(self)
          if name in self.definitions:
              return self
          for x in self.links:
              if x in history:
                  continue
              provider = x.provider(name, history)
              if provider is not None:
                  return provider
          history.remove(self)
          if len(history):
              return None
          return self
docs: Find the provider of the property by I{name}.
          @param name: The property name.
          @type name: str
          @param history: A history of nodes checked to prevent
              circular hunting.
          @type history: [L{Properties},..]
          @return: The provider when found.  Otherwise, None (when nested)
              and I{self} when not nested.
          @rtype: L{Properties}