This file is indexed.

/usr/lib/python3/dist-packages/testrepository/ui/decorator.py is in python3-testrepository 0.0.20-2.

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
108
109
110
#
# Copyright (c) 2010 Testrepository Contributors
# 
# Licensed under either the Apache License, Version 2.0 or the BSD 3-clause
# license at the users choice. A copy of both licenses are available in the
# project source as Apache-2.0 and BSD. You may not use this file except in
# compliance with one of these two licences.
# 
# Unless required by applicable law or agreed to in writing, software
# distributed under these licenses is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
# license you chose for the specific language governing permissions and
# limitations under that license.

"""A decorator for UIs to allow use of additional command objects in-process."""

from io import BytesIO
import optparse

from testrepository import ui


class UI(ui.AbstractUI):
    """A decorating UI.
    
    Not comprehensive yet - only supports overriding input streams. Note that
    because UI objects carry command specific state only specific things can
    be delegated - option/argument lookup, streams. set_command for instance, 
    does not get passed to the decorated UI unless it has not been initialised.
    """

    def __init__(self, input_streams=None, options={}, decorated=None):
        """Create a decorating UI.
        
        :param input_streams: The input steams to present from this UI. Should
            be a list of (stream name, file) tuples.
        :param options: Dict of options to replace in the base UI. These are
            merged with the underlying ones when set_command is called.
        :param decorated: The UI to decorate.
        """
        self._decorated = decorated
        self.input_streams = {}
        if input_streams:
            for stream_type, stream_value in input_streams:
                self.input_streams.setdefault(stream_type, []).append(
                    stream_value)
        self._options = options

    @property
    def arguments(self):
        return self._decorated.arguments

    @property
    def here(self):
        return self._decorated.here

    def _iter_streams(self, stream_type):
        streams = self.input_streams.pop(stream_type, [])
        for stream_value in streams:
            if getattr(stream_value, 'read', None):
                yield stream_value
            else:
                yield BytesIO(stream_value)

    def make_result(self, get_id, test_command, previous_run=None):
        return self._decorated.make_result(
            get_id, test_command, previous_run=previous_run)

    def output_error(self, error_tuple):
        return self._decorated.output_error(error_tuple)

    def output_rest(self, rest_string):
        return self._decorated.output_rest(rest_string)

    def output_stream(self, stream):
        return self._decorated.output_stream(stream)

    def output_table(self, table):
        return self._decorated.output_table(table)

    def output_tests(self, tests):
        return self._decorated.output_tests(tests)

    def output_values(self, values):
        return self._decorated.output_values(values)

    def output_summary(self, successful, tests, tests_delta, time, time_delta, values):
        return self._decorated.output_summary(
            successful, tests, tests_delta, time, time_delta, values)

    def set_command(self, cmd):
        self.cmd = cmd
        result = True
        if getattr(self._decorated, 'cmd', None) is None:
            result = self._decorated.set_command(cmd)
        # Pickup the repository factory from the decorated UI's command.
        cmd.repository_factory = self._decorated.cmd.repository_factory
        # Merge options
        self.options = optparse.Values()
        for option in dir(self._decorated.options):
            if option.startswith('_'):
                continue
            setattr(self.options, option,
                getattr(self._decorated.options, option))
        for option, value in self._options.items():
            setattr(self.options, option, value)
        return result

    def subprocess_Popen(self, *args, **kwargs):
        return self._decorated.subprocess_Popen(*args, **kwargs)