• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

Gallopsled / pwntools / 39eb5b9f9fc3ac2301be5a7a982096b3568d76e1

01 Nov 2023 10:20PM UTC coverage: 73.405% (+1.9%) from 71.525%
39eb5b9f9fc3ac2301be5a7a982096b3568d76e1

push

github-actions

Arusekk
Update CHANGELOG.md

3902 of 6416 branches covered (0.0%)

12255 of 16695 relevant lines covered (73.41%)

0.73 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

87.37
/pwnlib/term/text.py
1
from __future__ import absolute_import
1✔
2
from __future__ import division
1✔
3

4
import functools
1✔
5
import os
1✔
6
import sys
1✔
7
import types
1✔
8

9
from pwnlib.term import termcap
1✔
10

11

12
def eval_when(when):
1✔
13
    if hasattr(when, 'isatty') or \
1!
14
      when in ('always', 'never', 'auto', sys.stderr, sys.stdout):
15
        if os.environ.get('PWNLIB_COLOR') == 'always' or when == 'always':
1✔
16
            return True
1✔
17
        elif when == 'never':
1✔
18
            return False
1✔
19
        elif when == 'auto':
1!
20
            return sys.stdout.isatty()
1✔
21
        else:
22
            return when.isatty()
×
23
    else:
24
        raise ValueError('text.when: must be a file-object or "always", "never" or "auto"')
×
25

26
class Module(types.ModuleType):
1✔
27
    def __init__(self):
1✔
28
        self.__file__ = __file__
1✔
29
        self.__name__ = __name__
1✔
30
        self.num_colors = 8
1✔
31
        self.has_bright = self.num_colors >= 16
1✔
32
        self.has_gray = self.has_bright
1✔
33
        self.when = 'auto'
1✔
34
        self._colors = {
1✔
35
            'black': 0,
36
            'red': 1,
37
            'green': 2,
38
            'yellow': 3,
39
            'blue': 4,
40
            'magenta': 5,
41
            'cyan': 6,
42
            'white': 7,
43
            }
44
        self._reset = termcap.get('reset')
1✔
45
        self._attributes = {}
1✔
46
        for x, y in [('italic'   , 'sitm'),
1✔
47
                     ('bold'     , 'bold'),
48
                     ('underline', 'smul'),
49
                     ('reverse'  , 'rev')]:
50
            s = termcap.get(y)
1✔
51
            if not hasattr(s, 'encode'):
1!
52
                s = s.decode('utf-8')
×
53
            self._attributes[x] = s
1✔
54
        self._cache = {}
1✔
55

56
    @property
1✔
57
    def when(self):
58
        return self._when
1✔
59

60
    @when.setter
1✔
61
    def when(self, val):
62
        self._when = eval_when(val)
1✔
63

64
    def _fg_color(self, c):
1✔
65
        c = termcap.get('setaf', c) or termcap.get('setf', c)
1✔
66
        if not hasattr(c, 'encode'):
1!
67
            c = c.decode('utf-8')
×
68
        return c
1✔
69

70
    def _bg_color(self, c):
1✔
71
        c = termcap.get('setab', c) or termcap.get('setb', c)
1✔
72
        if not hasattr(c, 'encode'):
1!
73
            c = c.decode('utf-8')
×
74
        return c
1✔
75

76
    def _decorator(self, desc, init):
1✔
77
        def f(self, s, when = None):
1✔
78
            if when:
1!
79
                if eval_when(when):
×
80
                    return init + s + self._reset
×
81
                else:
82
                    return s
×
83
            else:
84
                if self.when:
1✔
85
                    return init + s + self._reset
1✔
86
                else:
87
                    return s
1✔
88
        setattr(Module, desc, f)
1✔
89
        return functools.partial(f, self)
1✔
90

91
    def __getattr__(self, desc):
1✔
92
        if desc.startswith('_'):
1✔
93
            raise AttributeError(desc)
1✔
94

95
        try:
1✔
96
            ds = desc.replace('gray', 'bright_black').split('_')
1✔
97
            init = ''
1✔
98
            while ds:
1✔
99
                d = ds[0]
1✔
100
                try:
1✔
101
                    init += self._attributes[d]
1✔
102
                    ds.pop(0)
1✔
103
                except KeyError:
1✔
104
                    break
1✔
105
            def c():
1✔
106
                bright = 0
1✔
107
                c = ds.pop(0)
1✔
108
                if c == 'bright':
1✔
109
                    c = ds.pop(0)
1✔
110
                    if self.has_bright:
1!
111
                        bright = 8
×
112
                return self._colors[c] + bright
1✔
113
            if ds:
1✔
114
                if ds[0] == 'on':
1✔
115
                    ds.pop(0)
1✔
116
                    init += self._bg_color(c())
1✔
117
                else:
118
                    init += self._fg_color(c())
1✔
119
                    if len(ds):
1✔
120
                        assert ds.pop(0) == 'on'
1✔
121
                        init += self._bg_color(c())
1✔
122
            return self._decorator(desc, init)
1✔
123
        except (IndexError, KeyError):
×
124
            raise AttributeError("'module' object has no attribute %r" % desc)
×
125

126
    def get(self, desc):
1✔
127
        return self.__getattr__(desc)
×
128

129
tether = sys.modules[__name__]
1✔
130
sys.modules[__name__] = Module()
1✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc