def paintContent(self, target):
        if self.areTabsHidden():
            target.addAttribute('hidetabs', True)

        target.startTag('tabs')

        orphaned = set(self._paintedTabs)

        i = self.getComponentIterator()
        while True:
            try:
                component = i.next()
                if component in orphaned:
                    orphaned.remove(component)
                tab = self._tabs.get(component)
                target.startTag('tab')
                if not tab.isEnabled() and tab.isVisible():
                    target.addAttribute('disabled', True)

                if not tab.isVisible():
                    target.addAttribute('hidden', True)

                if tab.isClosable():
                    target.addAttribute('closable', True)

                icon = tab.getIcon()
                if icon is not None:
                    target.addAttribute('icon', icon)

                caption = tab.getCaption()
                if caption is not None and len(caption) > 0:
                    target.addAttribute('caption', caption)

                description = tab.getDescription()
                if description is not None:
                    target.addAttribute('description', description)

                componentError = tab.getComponentError()
                if componentError is not None:
                    componentError.paint(target)

                target.addAttribute('key', self._keyMapper.key(component))
                if component == self._selected:
                    target.addAttribute('selected', True)
                    component.paint(target)
                    self._paintedTabs.add(component)

                elif component in self._paintedTabs:
                    component.paint(target)
                else:
                    component.requestRepaintRequests()
                target.endTag('tab')
            except StopIteration:
                break

        target.endTag('tabs')

        if self._selected is not None:
            target.addVariable(self, 'selected',
                    self._keyMapper.key(self._selected))

        # clean possibly orphaned entries in paintedTabs
        for component2 in orphaned:
            self._paintedTabs.remove(component2)
Fire the MQTT message.
dataset/ETHPy150Open rwl/muntjac/muntjac/ui/tab_sheet.py/TabSheet.paintContent--crossover with--dataset/ETHPy150Open home-assistant/home-assistant/tests/common.py/fire_service_discovered