# -*- coding: utf-8 -*- from inspect import isclass from pungi.phases.base import PhaseBase def gather_phases_metadata(source_object): """ Code gathers metadata from Phase classes. Metadata are 'name' attributes of the corresponding classes. Metadata are gathered without creating instances of Phase classes. """ if not source_object: raise ValueError("PhasesMetadata can not load any data - it got empty parameter") phases = [] for item in dir(source_object): cls = getattr(source_object, item) # get all objects references if not isclass(cls): # filter out non-classes continue if issubclass(cls, PhaseBase): try: name_attr = getattr(cls, 'name') phases.append(name_attr) except AttributeError: raise AttributeError("Bad phase-class format: '%s' is missing attribute 'name'" % item) return phases