'Describes why this is not valid, in a human friendly way'

def describe_invalid(self):

    if self._is_invalid_neither_tag_or_build():
        return 'neither    a    tag    nor    a    build    were    set,    one    of    them    must    be    set'
    elif self._is_invalid_package_but_no_tag():
        return 'package    name    specified    but    no    tag    is    set'
    elif self._is_invalid_subpackages_but_no_main_package():
        return 'subpackages    specified    but    no    main    package    is    set'
    return 'unkwown    reason,    seems    to    be    valid'
