'Describe this package specification, in a human friendly way
:return: package specification description'

def describe(self):

    if self.is_valid():
        description = ''
        if (not self.subpackages):
            description += ('all    subpackages    from    %s    ' % self.package)
        else:
            description += ('only    subpackage(s)    %s    from    package    %s    ' % (',    '.join(self.subpackages), self.package))
        if self.build:
            description += ('from    build    %s' % self.build)
        elif self.tag:
            description += ('tagged    with    %s' % self.tag)
        else:
            raise ValueError('neither    build    or    tag    is    set')
        return description
    else:
        return ('Invalid    package    specification:    %s' % self.describe_invalid())
