import html import os BTN_LEFT = 1 BTN_MIDDLE = 2 BTN_RIGHT = 3 COLOR_NONE = '#ffffff' COLOR_DANGER = '#dd0000' COLOR_SUCCESS = '#50fa7b' COLOR_WARNING = '#ffd966' COLOR_PRIMARY = '#8faafc' COLOR_SECONDARY = '#7f7f7f' VAR_BTN = 'BLOCK_BUTTON' VAR_INSTANCE = 'BLOCK_INSTANCE' VAR_NAME = 'BLOCK_NAME' VAR_X = 'BLOCK_X' VAR_Y = 'BLOCK_Y' class Block: def __init__(self, icon=None, icon_color=None): self.ICON = icon if icon is not None else '\uf128' self.ICON_COLOR = icon_color if icon_color is not None else COLOR_NONE def button_is(self, btn): """ Checks whether a button was pressed on the widget and if so whether it was the expected one """ return VAR_BTN in os.environ and os.environ[VAR_BTN] != '' and int(os.environ[VAR_BTN]) == btn def color_text(self, text, color=COLOR_NONE): """ Formats the given text with given color in pango markup """ return '{text}'.format( color=color, text=text, ) def execute(self): """ Contains the logic of this block and needs to be overwritten in child class """ raise Exception('No exec implementation specified') def instance(self): """ Returns the block-defined instance or empty string if none """ return os.environ[VAR_INSTANCE] if VAR_INSTANCE in os.environ else '' def name(self): """ Returns the block-defined name or empty string if none """ return os.environ[VAR_NAME] if VAR_NAME in os.environ else '' def render(self): """ Executes the block and prints out the formatted string for the block """ result = self.execute() if result is None or len(result) == 0: print(self.color_text(self.ICON, self.ICON_COLOR)) return text = '' if type(result) is list: text = ' '.join(result) else: text = result print('{icon} {text}'.format( icon=self.color_text(self.ICON, self.ICON_COLOR), text=text, )) def safe_text(self, text): return html.escape(text) def set_icon(self, icon): """ Overwrites the icon speicfied in constructor """ self.ICON = icon def set_icon_color(self, color): """ Overwrites the icon color speicfied in constructor """ self.ICON_COLOR = color