'Checks if this package specification is valid.
Being valid means that it has enough and not conflicting information.
It does not validate that the packages specified actually existe on
the Koji server.
:return: True or False'

def is_valid(self):

    if self._is_invalid_neither_tag_or_build():
        return False
    elif self._is_invalid_package_but_no_tag():
        return False
    elif self._is_invalid_subpackages_but_no_main_package():
        return False
    return True
