Given a ``Piper`` instance or the ``id`` of the ``Piper``. Returns the
        ``Piper`` instance if it can be resolved else raises a ``DaggerError`` 
        or returns ``False`` depending on the "forgive" argument. 
        
        Arguments:
    
        - piper(``Piper`` or id(``Piper``)) a ``Piper`` instance or its id to be
          found in the ``Dagger``. 
        - forgive(``bool``) [default: ``False``] If "forgive" is ``False`` a 
          ``DaggerError`` is raised whenever a  ``Piper`` cannot be resolved in 
          the ``Dagger``. If "forgive" is ``True`` then ``False`` is returned.

def resolve(self, piper, forgive=False):
        """
        Given a ``Piper`` instance or the ``id`` of the ``Piper``. Returns the
        ``Piper`` instance if it can be resolved else raises a ``DaggerError`` 
        or returns ``False`` depending on the "forgive" argument. 
        
        Arguments:
    
        - piper(``Piper`` or id(``Piper``)) a ``Piper`` instance or its id to be
          found in the ``Dagger``. 
        - forgive(``bool``) [default: ``False``] If "forgive" is ``False`` a 
          ``DaggerError`` is raised whenever a  ``Piper`` cannot be resolved in 
          the ``Dagger``. If "forgive" is ``True`` then ``False`` is returned.
          
        """
        try:
            if piper in self:
                resolved = piper
            else:
                resolved = [p for p in self if id(p) == piper][0]
        except (TypeError, IndexError):
            resolved = False
        if resolved:
            self.log.debug('%s resolved a piper from %s' % (repr(self), piper))
        else:
            self.log.debug('%s could not resolve a piper from %s' % \
                          (repr(self), repr(piper)))
            if not forgive:
                raise DaggerError('%s could not resolve a Piper from %s' % \
                                  (repr(self), repr(piper)))
            resolved = False
        return resolved