<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def has_been_published(self):
 """ Return True if the item is either published itself, or has an associated published copy. This is in contrast to ``is_published`` which only returns True if the specific object is a published copy, and will return False for a draft object that has an associated published copy. """

        if self.is_published:
            return True
        elif self.is_draft:
            return self.publishing_linked_id is not None
        raise ValueError(  # pragma: no cover
            "Publishable object %r is neither draft nor published" % self)