Index: tools/telemetry/third_party/typ/typ/host.py |
diff --git a/tools/telemetry/third_party/typ/typ/host.py b/tools/telemetry/third_party/typ/typ/host.py |
deleted file mode 100644 |
index fc9e11304cdb47f4baafac2b52a0753f901dc402..0000000000000000000000000000000000000000 |
--- a/tools/telemetry/third_party/typ/typ/host.py |
+++ /dev/null |
@@ -1,286 +0,0 @@ |
-# Copyright 2014 Dirk Pranke. All rights reserved. |
-# |
-# Licensed under the Apache License, Version 2.0 (the "License"); |
-# you may not use this file except in compliance with the License. |
-# You may obtain a copy of the License at |
-# |
-# http://www.apache.org/licenses/LICENSE-2.0 |
-# |
-# Unless required by applicable law or agreed to in writing, software |
-# distributed under the License is distributed on an "AS IS" BASIS, |
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
-# See the License for the specific language governing permissions and |
-# limitations under the License. |
- |
-import io |
-import logging |
-import multiprocessing |
-import os |
-import shutil |
-import subprocess |
-import sys |
-import tempfile |
-import time |
- |
- |
-if sys.version_info.major == 2: # pragma: python2 |
- from urllib2 import urlopen, Request |
-else: # pragma: python3 |
- # pylint: disable=E0611 |
- assert sys.version_info.major == 3 |
- from urllib.request import urlopen, Request # pylint: disable=F0401,E0611 |
- |
- |
-class Host(object): |
- python_interpreter = sys.executable |
- is_python3 = bool(sys.version_info.major == 3) |
- |
- pathsep = os.pathsep |
- sep = os.sep |
- env = os.environ |
- |
- _orig_stdout = sys.stdout |
- _orig_stderr = sys.stderr |
- |
- def __init__(self): |
- self.logger = logging.getLogger() |
- self._orig_logging_handlers = None |
- self.stdout = sys.stdout |
- self.stderr = sys.stderr |
- self.stdin = sys.stdin |
- self.env = os.environ |
- self.platform = sys.platform |
- |
- def abspath(self, *comps): |
- return os.path.abspath(self.join(*comps)) |
- |
- def add_to_path(self, *comps): |
- absolute_path = self.abspath(*comps) |
- if absolute_path not in sys.path: |
- sys.path.append(absolute_path) |
- |
- def basename(self, path): |
- return os.path.basename(path) |
- |
- def call(self, argv, stdin=None, env=None): |
- if stdin: |
- stdin_pipe = subprocess.PIPE |
- else: |
- stdin_pipe = None |
- proc = subprocess.Popen(argv, stdout=subprocess.PIPE, |
- stderr=subprocess.PIPE, stdin=stdin_pipe, |
- env=env) |
- if stdin_pipe: |
- proc.stdin.write(stdin.encode('utf-8')) |
- stdout, stderr = proc.communicate() |
- |
- # pylint type checking bug - pylint: disable=E1103 |
- return proc.returncode, stdout.decode('utf-8'), stderr.decode('utf-8') |
- |
- def call_inline(self, argv, env=None): |
- if isinstance(self.stdout, _TeedStream): # pragma: no cover |
- ret, out, err = self.call(argv, env) |
- self.print_(out, end='') |
- self.print_(err, end='', stream=self.stderr) |
- return ret |
- return subprocess.call(argv, stdin=self.stdin, stdout=self.stdout, |
- stderr=self.stderr, env=env) |
- |
- def chdir(self, *comps): |
- return os.chdir(self.join(*comps)) |
- |
- def cpu_count(self): |
- return multiprocessing.cpu_count() |
- |
- def dirname(self, *comps): |
- return os.path.dirname(self.join(*comps)) |
- |
- def exists(self, *comps): |
- return os.path.exists(self.join(*comps)) |
- |
- def files_under(self, top): |
- all_files = [] |
- for root, _, files in os.walk(top): |
- for f in files: |
- relpath = self.relpath(os.path.join(root, f), top) |
- all_files.append(relpath) |
- return all_files |
- |
- def getcwd(self): |
- return os.getcwd() |
- |
- def getenv(self, key, default=None): |
- return self.env.get(key, default) |
- |
- def getpid(self): |
- return os.getpid() |
- |
- def for_mp(self): |
- return None |
- |
- def isdir(self, *comps): |
- return os.path.isdir(os.path.join(*comps)) |
- |
- def isfile(self, *comps): |
- return os.path.isfile(os.path.join(*comps)) |
- |
- def join(self, *comps): |
- return os.path.join(*comps) |
- |
- def maybe_mkdir(self, *comps): |
- path = self.abspath(self.join(*comps)) |
- if not self.exists(path): |
- os.makedirs(path) |
- |
- def mktempfile(self, delete=True): |
- return tempfile.NamedTemporaryFile(delete=delete) |
- |
- def mkdtemp(self, **kwargs): |
- return tempfile.mkdtemp(**kwargs) |
- |
- def mtime(self, *comps): |
- return os.stat(self.join(*comps)).st_mtime |
- |
- def print_(self, msg='', end='\n', stream=None): |
- stream = stream or self.stdout |
- stream.write(str(msg) + end) |
- stream.flush() |
- |
- def read_text_file(self, *comps): |
- return self._read(comps, 'r') |
- |
- def read_binary_file(self, *comps): |
- return self._read(comps, 'rb') |
- |
- def _read(self, comps, mode): |
- path = self.join(*comps) |
- with open(path, mode) as f: |
- return f.read() |
- |
- def realpath(self, *comps): |
- return os.path.realpath(os.path.join(*comps)) |
- |
- def relpath(self, path, start): |
- return os.path.relpath(path, start) |
- |
- def remove(self, *comps): |
- os.remove(self.join(*comps)) |
- |
- def rmtree(self, path): |
- shutil.rmtree(path, ignore_errors=True) |
- |
- def splitext(self, path): |
- return os.path.splitext(path) |
- |
- def time(self): |
- return time.time() |
- |
- def write_text_file(self, path, contents): |
- return self._write(path, contents, mode='w') |
- |
- def write_binary_file(self, path, contents): |
- return self._write(path, contents, mode='wb') |
- |
- def _write(self, path, contents, mode): |
- with open(path, mode) as f: |
- f.write(contents) |
- |
- def fetch(self, url, data=None, headers=None): |
- headers = headers or {} |
- return urlopen(Request(url, data.encode('utf8'), headers)) |
- |
- def terminal_width(self): |
- """Returns 0 if the width cannot be determined.""" |
- try: |
- if sys.platform == 'win32': # pragma: win32 |
- # From http://code.activestate.com/recipes/ \ |
- # 440694-determine-size-of-console-window-on-windows/ |
- from ctypes import windll, create_string_buffer |
- |
- STDERR_HANDLE = -12 |
- handle = windll.kernel32.GetStdHandle(STDERR_HANDLE) |
- |
- SCREEN_BUFFER_INFO_SZ = 22 |
- buf = create_string_buffer(SCREEN_BUFFER_INFO_SZ) |
- |
- if windll.kernel32.GetConsoleScreenBufferInfo(handle, buf): |
- import struct |
- fields = struct.unpack("hhhhHhhhhhh", buf.raw) |
- left = fields[5] |
- right = fields[7] |
- |
- # Note that we return 1 less than the width since writing |
- # into the rightmost column automatically performs a |
- # line feed. |
- return right - left |
- return 0 |
- else: # pragma: no win32 |
- import fcntl |
- import struct |
- import termios |
- packed = fcntl.ioctl(self.stderr.fileno(), |
- termios.TIOCGWINSZ, '\0' * 8) |
- _, columns, _, _ = struct.unpack('HHHH', packed) |
- return columns |
- except Exception: |
- return 0 |
- |
- def _tap_output(self): |
- self.stdout = sys.stdout = _TeedStream(self.stdout) |
- self.stderr = sys.stderr = _TeedStream(self.stderr) |
- |
- def _untap_output(self): |
- assert isinstance(self.stdout, _TeedStream) |
- self.stdout = sys.stdout = self.stdout.stream |
- self.stderr = sys.stderr = self.stderr.stream |
- |
- def capture_output(self, divert=True): |
- self._tap_output() |
- self._orig_logging_handlers = self.logger.handlers |
- if self._orig_logging_handlers: |
- self.logger.handlers = [logging.StreamHandler(self.stderr)] |
- self.stdout.capture(divert) |
- self.stderr.capture(divert) |
- |
- def restore_output(self): |
- assert isinstance(self.stdout, _TeedStream) |
- out, err = (self.stdout.restore(), self.stderr.restore()) |
- self.logger.handlers = self._orig_logging_handlers |
- self._untap_output() |
- return out, err |
- |
- |
-class _TeedStream(io.StringIO): |
- |
- def __init__(self, stream): |
- super(_TeedStream, self).__init__() |
- self.stream = stream |
- self.capturing = False |
- self.diverting = False |
- |
- def write(self, msg, *args, **kwargs): |
- if self.capturing: |
- if (sys.version_info.major == 2 and |
- isinstance(msg, str)): # pragma: python2 |
- msg = unicode(msg) |
- super(_TeedStream, self).write(msg, *args, **kwargs) |
- if not self.diverting: |
- self.stream.write(msg, *args, **kwargs) |
- |
- def flush(self): |
- if self.capturing: |
- super(_TeedStream, self).flush() |
- if not self.diverting: |
- self.stream.flush() |
- |
- def capture(self, divert=True): |
- self.truncate(0) |
- self.capturing = True |
- self.diverting = divert |
- |
- def restore(self): |
- msg = self.getvalue() |
- self.truncate(0) |
- self.capturing = False |
- self.diverting = False |
- return msg |