195640e3a20adea634b4df4ccf8c93f411184c438joi@chromium.org#!/usr/bin/env python 295640e3a20adea634b4df4ccf8c93f411184c438joi@chromium.org# Copyright (c) 2012 The Chromium Authors. All rights reserved. 301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org# Use of this source code is governed by a BSD-style license that can be 401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org# found in the LICENSE file. 501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org'''Base class and interface for tools. 701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org''' 801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 1001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgclass Tool(object): 1101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org '''Base class for all tools. Tools should use their docstring (i.e. the 1201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org class-level docstring) for the help they want to have printed when they 1301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org are invoked.''' 1401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 1501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org # 1601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org # Interface (abstract methods) 1701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org # 1801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 1901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org def ShortDescription(self): 2001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org '''Returns a short description of the functionality of the tool.''' 2101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org raise NotImplementedError() 2201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 2301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org def Run(self, global_options, my_arguments): 2401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org '''Runs the tool. 2501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 2601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org Args: 2701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org global_options: object grit_runner.Options 2801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org my_arguments: [arg1 arg2 ...] 2901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 3001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org Return: 3101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 0 for success, non-0 for error 3201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org ''' 3301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org raise NotImplementedError() 3401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 3501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org # 3601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org # Base class implementation 3701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org # 3801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 3901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org def __init__(self): 4001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org self.o = None 4101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 4201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org def SetOptions(self, opts): 4301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org self.o = opts 4401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 4501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org def Out(self, text): 4601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org '''Always writes out 'text'.''' 4701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org self.o.output_stream.write(text) 4801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 4901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org def VerboseOut(self, text): 5001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org '''Writes out 'text' if the verbose option is on.''' 5101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org if self.o.verbose: 5201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org self.o.output_stream.write(text) 5301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 5401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org def ExtraVerboseOut(self, text): 5501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org '''Writes out 'text' if the extra-verbose option is on. 5601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org ''' 5701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org if self.o.extra_verbose: 5801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org self.o.output_stream.write(text) 59