示例#1
0
    def render_object_from_spec(self,
                                obj,
                                spec,
                                colors='_follow_object_spec_',
                                align=True):
        """
        Description:
            render an object by using an ObjectModelSpec to get the rendering specs
        Input:
            obj: the object to be rendered
            spec: the ObjectModelSpec to use
        Notes:
            Creates a GroupModel and renders that
            All the other render_object* methods end up calling this one
        """
        log = LoggerAdapter(logger, {'name_ext':'{}.render_object_from_spec'.format(\
                self.__class__.__name__)})
        log.debug("Entering: obj: {} | spec: {} | colors: {} | align: {}".format(\
                obj, spec, colors, align))
        #- go through and first create the ObjectModels
        obj_models = list()
        if self.is_render_iterable(obj):
            for i, obj_x in enumerate(obj):
                obj_models.append(
                    ObjectModel(obj_x, spec, colors=next(spec.colors)))
        else:
            prologue = ColoredText('')
            obj_models = [ObjectModel(obj, spec, colors=next(spec.colors))]

        if colors == '_follow_object_spec_':
            colors = copy.copy(spec.colors)

        #- collect the ObjectModels in a GroupModel
        group_model = GroupModel(object_models=obj_models,
                                 colors=colors,
                                 align=align)
        #-TODO: wrap GroupModel in CollectionModel here

        return group_model.render()