def test__red_onblack_red(self): onblack = colored(' OnBlack ', 'on black') red_onblack_red = colored(' Red ' + onblack + ' Red ', 'red') + ' NORMAL' expected = '\x1b[31m Red \x1b[40m OnBlack \x1b[49m Red \x1b[39m NORMAL' return red_onblack_red, expected
def test__onblack_underline_onblack(self): underline = colored(' Underline ', 'ul') onblack_underline_onblack = colored( ' OnBlack ' + underline + ' OnBlack ', 'on black') + ' NORMAL' expected = '\x1b[40m OnBlack \x1b[4m Underline \x1b[24m OnBlack \x1b[49m NORMAL' return onblack_underline_onblack, expected
def test__onblack_brightred_onblack(self): brightred = colored(' BrightRed ', 'bright red') onblack_brightred_onblack = colored( ' OnBlack ' + brightred + ' OnBlack ', 'on black') + ' NORMAL' expected = '\x1b[40m OnBlack \x1b[91m BrightRed \x1b[39m OnBlack \x1b[49m NORMAL' return onblack_brightred_onblack, expected
def test__underline_onblack_underline(self): onblack = colored(' OnBlack ', 'on black') underline_onblack_underline = colored( ' Underline ' + onblack + ' Underline ', 'underline') + ' NORMAL' expected = '\x1b[4m Underline \x1b[40m OnBlack \x1b[49m Underline \x1b[24m NORMAL' return underline_onblack_underline, expected
def test__bold__red_dark__bold(self): # compare: test__different_reset_codes.py::Test_1_inside_color::test__bold_red_bold inside = colored(' RedDark ', 'red', 'dark') assert inside == '\x1b[31;2m RedDark \x1b[39;22m' actual = colored(f'Bold {inside} Bold', 'bold') + ' NORMAL' # 22 resets dark; 1 reopens bold; 39 resets red expected = '\x1b[1mBold \x1b[31;2m RedDark \x1b[39;22;1m Bold\x1b[22m NORMAL' return actual, expected
def test__dark_bold_dark(self): bold = colored(' Bold ', 'bold') assert bold == '\x1b[1m Bold \x1b[22m' dark_bold_dark = colored(' Dark ' + bold + ' Dark ', 'dark') + ' NORMAL' expected = f'\x1b[2m Dark \x1b[1m Bold \x1b[22;2m Dark \x1b[22m NORMAL' # expected = re.compile(expected_str) return dark_bold_dark, expected
def test__bold_dark__dark_red__bold_dark(self): darkred = colored(' DarkRed ', 'dark', 'red') assert darkred == '\x1b[2;31m DarkRed \x1b[22;39m' bold_dark__dark_red__bold_dark = colored( ' BoldDark ' + darkred + ' BoldDark ', 'bold', 'dark') + ' NORMAL' expected = f'\x1b[1;2m BoldDark \x1b[31m DarkRed \x1b[39m BoldDark \x1b[22m NORMAL' return bold_dark__dark_red__bold_dark, expected
def test__bold__red_bold__bold(self): inside = colored(' Inside ', 'red', 'bold') assert inside == '\x1b[31;1m Inside \x1b[39;22m' actual = colored(f' Outside {inside} Outside ', 'bold') + ' NORMAL' # knows not to open bold inside because already open outside expected = '\x1b[1m Outside \x1b[31m Inside \x1b[39m Outside \x1b[22m NORMAL' assert actual != '\x1b[1m Outside \x1b[31;1m Inside \x1b[39;22;1m Outside \x1b[22m NORMAL' return actual, expected
def test__brightred_onblack_brightred(self): onblack = colored(' OnBlack ', 'on black') assert onblack == '\x1b[40m OnBlack \x1b[49m' brightred_onblack_brightred = colored( ' BrightRed ' + onblack + ' BrightRed ', 'bright red') + ' NORMAL' expected = "\x1b[91m BrightRed \x1b[40m OnBlack \x1b[49m BrightRed \x1b[39m NORMAL" return brightred_onblack_brightred, expected
def test__dark_bold__brightwhite__dark_bold(self): brightwhite = colored(' BrightWhite ', 'bright white') dark_bold__brightwhite__dark_bold = colored( ' DarkBold ' + brightwhite + ' DarkBold ', 'bold', 'dark') + ' NORMAL' expected = f'\x1b[1;2m DarkBold \x1b[97m BrightWhite \x1b[39m DarkBold \x1b[22m NORMAL' return dark_bold__brightwhite__dark_bold, expected
def test__underlineonblack__red__underlineonblack(self): red = colored(' Red ', 'red') underlineonblack__red__underlineonblack = colored( ' UnderlineOnBlack ' + red + ' UnderlineOnBlack ', 'ul', 'on black') + ' NORMAL' expected = f'\x1b[4;40m UnderlineOnBlack \x1b[31m Red \x1b[39m UnderlineOnBlack \x1b[24;49m NORMAL' return underlineonblack__red__underlineonblack, expected
def test__underlinegreen__onblack__underlinegreen(self): onblack = colored(' OnBlack ', 'on black') underlinegreen__onblack__underlinegreen = colored( ' UnderlineGreen ' + onblack + ' UnderlineGreen ', 'ul', 'green') + ' NORMAL' expected = f'\x1b[4;32m UnderlineGreen \x1b[40m OnBlack \x1b[49m UnderlineGreen \x1b[24;39m NORMAL' return underlinegreen__onblack__underlinegreen, expected
def test__bold_dark__red_dark__bold_dark(self): reddark = colored(' RedDark ', 'red', 'dark') assert reddark == '\x1b[31;2m RedDark \x1b[39;22m' bold_dark__red_dark__bold_dark = colored( ' BoldDark ' + reddark + ' BoldDark ', 'bold', 'dark') + ' NORMAL' expected = f'\x1b[1;2m BoldDark \x1b[31m RedDark \x1b[39m BoldDark \x1b[22m NORMAL' return bold_dark__red_dark__bold_dark, expected
def test__redonblack__bold__redonblack(self): bold = colored(' Bold ', 'bold') redonblack__bold__redonblack = colored( ' RedOnBlack ' + bold + ' RedOnBlack ', 'red', 'on black') + ' NORMAL' expected = f'\x1b[31;40m RedOnBlack \x1b[1m Bold \x1b[22m RedOnBlack \x1b[39;49m NORMAL' return redonblack__bold__redonblack, expected
def test__onblack__brightred_bold__onblack(self): brightredbold = colored(' BrightRedBold ', 'bright red', 'bold') assert brightredbold == '\x1b[91;1m BrightRedBold \x1b[39;22m' onblack_brightredbold_onblack = colored( ' OnBlack ' + brightredbold + ' OnBlack ', 'on black') + ' NORMAL' expected = f'\x1b[40m OnBlack \x1b[91;1m BrightRedBold \x1b[39;22m OnBlack \x1b[49m NORMAL' return onblack_brightredbold_onblack, expected
def test__bold_red_bold(self): """I R /FG 3 31 → 39""" red = colored(' Red ', 'red') assert red == '\x1b[31m Red \x1b[39m' bold_red_bold = colored(' Bold ' + red + ' Bold ', 'bold') + ' NORMAL' expected = '\x1b[1m Bold \x1b[31m Red \x1b[39m Bold \x1b[22m NORMAL' return bold_red_bold, expected
def test__italic_bold_italic(self): """I B /F/B 3 1 → 22""" bold = colored(' Bold ', 'bold') italic_bold_italic = colored(' Italic ' + bold + ' Italic ', 'italic') + ' NORMAL' expected = '\x1b[3m Italic \x1b[1m Bold \x1b[22m Italic \x1b[23m NORMAL' return italic_bold_italic, expected
def test__bold_green__red_dark__bold_green(self): reddark = colored(' RedDark ', 'red', 'dark') assert reddark == '\x1b[31;2m RedDark \x1b[39;22m' bold_green__red_dark__bold_green = colored( ' BoldGreen ' + reddark + ' BoldGreen ', 'bold', 'green') + ' NORMAL' expected = f'\x1b[1;32m BoldGreen \x1b[31;2m RedDark \x1b[22;32;1m BoldGreen \x1b[22;39m NORMAL' return bold_green__red_dark__bold_green, expected
def test__onblack_ongreen_onblack(self): ongreen = colored(' OnGreen ', 'on green') assert ongreen == '\x1b[42m OnGreen \x1b[49m' onblack_ongreen_onblack = colored(' OnBlack ' + ongreen + ' OnBlack ', 'on black') + ' NORMAL' # doesn't reset OnGreen, just re-opens OnBlack (because incompatible) expected = '\x1b[40m OnBlack \x1b[42m OnGreen \x1b[40m OnBlack \x1b[49m NORMAL' return onblack_ongreen_onblack, expected
def test__red_dark_red(self): """R F /F/B 31 2 → 22""" dark = colored(' Dark ', 'dark') assert dark == '\x1b[2m Dark \x1b[22m' red_dark_red = colored(' Red ' + dark + ' Red ', 'red') + ' NORMAL' expected = '\x1b[31m Red \x1b[2m Dark \x1b[22m Red \x1b[39m NORMAL' # smart reset dark in the middle, and does not re-open red return red_dark_red, expected
def test__bold_dark_bold(self): """B F /F/B B 1 2 → 22;1""" dark = colored(' Dark ', 'dark') assert dark == '\x1b[2m Dark \x1b[22m' bold_dark_bold = colored(' Bold ' + dark + ' Bold ', 'bold') + ' NORMAL' expected = '\x1b[1m Bold \x1b[2m Dark \x1b[22;1m Bold \x1b[22m NORMAL' # expected = re.compile(expected_str) return bold_dark_bold, expected
def test__red_green_red(self): """R G R 31 32 → 31""" green = colored(' Green ', 'green') assert green == '\x1b[32m Green \x1b[39m' red_green_red = colored(' Red ' + green + ' Red ', 'red') + ' NORMAL' # doesn't reset green, just re-opens red (because incompatible) expected = '\x1b[31m Red \x1b[32m Green \x1b[31m Red \x1b[39m NORMAL' return red_green_red, expected
def test__italic_brightgreen_italic(self): """I SG /FG 3 92 → 39""" brightgreen = colored(' BrightGreen ', 'bright green') assert brightgreen == '\x1b[92m BrightGreen \x1b[39m' italic_brightgreen_italic = colored( ' Italic ' + brightgreen + ' Italic ', 'italic') + ' NORMAL' expected = '\x1b[3m Italic \x1b[92m BrightGreen \x1b[39m Italic \x1b[23m NORMAL' return italic_brightgreen_italic, expected
def test__brightred__onblack_bold__brightred(self): onblackbold = colored(' OnBlackBold ', 'on black', 'bold') assert onblackbold == '\x1b[40;1m OnBlackBold \x1b[49;22m' brightred_onblackbold_brightred = colored( ' BrightRed ' + onblackbold + ' BrightRed ', 'bright red') + ' NORMAL' expected = f"\x1b[91m BrightRed \x1b[40;1m OnBlackBold \x1b[49;22m BrightRed \x1b[39m NORMAL" return brightred_onblackbold_brightred, expected
def test__brightwhite_red_brightwhite(self): """S R S 97 31 → 97""" red = colored(' Red ', 'red') assert red == '\x1b[31m Red \x1b[39m' brightwhite_red_brightwhite = colored(' Bright ' + red + ' Bright ', 'bright white') + ' NORMAL' expected = '\x1b[97m Bright \x1b[31m Red \x1b[97m Bright \x1b[39m NORMAL' return brightwhite_red_brightwhite, expected
def test__brightwhite_dark_brightwhite(self): """S F /F 97 2 → 22""" dark = colored(' Dark ', 'dark') assert dark == '\x1b[2m Dark \x1b[22m' brightwhite_dark_brightwhite = colored(' Bright ' + dark + ' Bright ', 'bright white') + ' NORMAL' expected = '\x1b[97m Bright \x1b[2m Dark \x1b[22m Bright \x1b[39m NORMAL' # smart reset dark, no re-open bright return brightwhite_dark_brightwhite, expected
def test__bold_italic_bold(self): """B I /I 1 3 → 23""" italic = colored(' Italic ', 'italic') assert italic == '\x1b[3m Italic \x1b[23m' bold_italic_bold = colored(' Bold ' + italic + ' Bold ', 'bold') + ' NORMAL' expected = '\x1b[1m Bold \x1b[3m Italic \x1b[23m Bold \x1b[22m NORMAL' # smart reset italic (23), no reopen bold return bold_italic_bold, expected
def test__bold_brightwhite__dark__bold_brightwhite(self): """S+B F /F/B B 1;97 2 → 22;1""" dark = colored(' Dark ', 'dark') bold_brightwhite__dark__bold_brightwhite = colored( ' BoldBright ' + dark + ' BoldBright ', 'bold', 'bright white') + ' NORMAL' # merge dark reset with bold re-open (22;1) # recognize bold is lost by 22, so need to re-open it # recognize bright is not lost and is restored automatically by 22 (resetting dark) # TODO: why is bright restored when resetting dark? # In IPython: # # print('\x1b[97m Bright (#EEEEEC) \x1b[2m Bright and Dark (#9F9F9D) \x1b[22m Bright (#EEEEEC) \x1b[0m Normal (#AAAAAA) \x1b[2m Dark (#717171) \x1b[0m') expected = f'\x1b[1;97m BoldBright \x1b[2m Dark \x1b[22;1m BoldBright \x1b[22;39m NORMAL' return bold_brightwhite__dark__bold_brightwhite, expected
def print_pkgs(pkgs): table = BeautifulTable() table.columns.header = ['Name', 'Type', 'Installed'] for pkg in pkgs: table.rows.append([pkg.name, 'E', colored('Yes', 'green') if pkg.installed else colored('No', 'red')]) if show_deps and len(pkg.req_deps + pkg.rec_deps + pkg.opt_deps) > 0: table.rows.append([colored(f'{pkg.name} dependencies', 'bright black'), '', '']) for item in (pkg.req_deps + pkg.rec_deps + pkg.opt_deps): name = item table.rows.append([colored(name, 'bright black'), colored('D', 'bright black'), colored('Yes', 'green') if is_installed(item) else colored('No', 'red')]) # Table styling table.columns.alignment = BeautifulTable.ALIGN_LEFT table.set_style(BeautifulTable.STYLE_NONE) table.columns.header.separator = '=' table.columns.padding = 2 print('') print(table)
def is_built_with(pkg, deps): if not is_installed(pkg.name): print(colored(f'Warning: Package "{pkg.name}" is not installed', 'yellow')) sys.exit(1) else: log = get_log() found = False index = None for i, n in enumerate(reversed(log)): if n == pkg.name: print(f'i: {i}, n: {n}') index = len(log) - 1 - i break log = log[:index] for dep in deps: if dep.entry in log: print(colored(f'\nPackage "{pkg}" is built with "{dep}"', 'green')) else: print(colored(f'\nPackage "{pkg}" is not built with "{dep}"', 'red'))