This file is indexed.

/usr/lib/python3/dist-packages/gbp/tristate.py is in git-buildpackage 0.9.8.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
# vim: set fileencoding=utf-8 :
#
# (C) 2011 Guido Günther <agx@sigxcpu.org>
#    This program is free software; you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation; either version 2 of the License, or
#    (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with this program; if not, please see
#    <http://www.gnu.org/licenses/>

"""
A switch with three states: on|off|auto
"""


class Tristate(object):
    """Tri-state value: on, off or auto """
    ON = True       # state is on == do it
    OFF = False     # state is off == don't do it
    AUTO = -1       # autodetect == do if possible

    # We accept true as alias for on and false as alias for off
    _VALID_NAMES = ['on', 'off', 'true', 'false', 'auto']

    def __init__(self, val):
        if type(val) in [type(t) for t in (True, 1)]:
            if val > 0:
                self._state = self.ON
            elif val < 0:
                self._state = self.AUTO
            else:
                self._state = self.OFF
        elif type(val) is str:
            if val.lower() in ['on', 'true']:
                self._state = self.ON
            elif val.lower() in ['auto']:
                self._state = self.AUTO
            else:
                self._state = self.OFF
        elif type(val) is Tristate:
            self._state = val.state
        else:
            raise TypeError

    def __repr__(self):
        """
        >>> Tristate('on').__repr__()
        'on'
        >>> Tristate(True).__repr__()
        'on'
        >>> Tristate(False).__repr__()
        'off'
        >>> Tristate('auto').__repr__()
        'auto'
        """
        if self._state == self.ON:
            return 'on'
        elif self._state == self.AUTO:
            return 'auto'
        else:
            return 'off'

    def __nonzero__(self):
        """
        >>> Tristate('on').__nonzero__()
        True
        >>> Tristate('auto').__nonzero__()
        True
        >>> Tristate('off').__nonzero__()
        False
        """
        return self._state is not self.OFF

    @property
    def state(self):
        """Get current state"""
        return self._state

    def is_auto(self):
        return [False, True][self._state == self.AUTO]

    def is_on(self):
        return [False, True][self._state == self.ON]

    def is_off(self):
        return [False, True][self._state == self.OFF]

    def do(self, function, *args, **kwargs):
        """
        Run function if tristate is on or auto, only report a failure if
        tristate is on since failing is o.k. for autodetect.
        """
        if self.is_off():
            return True

        success = function(*args, **kwargs)
        if not success:
            return [True, False][self.is_on()]

        return True