Fix pylint warnings.
Change-Id: I8ef482776bcb5ec89afde39f215bd52c950a4b1b
diff --git a/pw_cli/py/pw_cli/__init__.py b/pw_cli/py/pw_cli/__init__.py
index e0c7f08..2740eab 100644
--- a/pw_cli/py/pw_cli/__init__.py
+++ b/pw_cli/py/pw_cli/__init__.py
@@ -11,6 +11,7 @@
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.
+"""Auto-load default plugins for pw_cli."""
# Note that these imports will trigger plugin registrations.
import pw_cli.log
diff --git a/pw_cli/py/pw_cli/__main__.py b/pw_cli/py/pw_cli/__main__.py
index 890bd59..eb4277f 100644
--- a/pw_cli/py/pw_cli/__main__.py
+++ b/pw_cli/py/pw_cli/__main__.py
@@ -41,6 +41,8 @@
def main(raw_args=None):
+ """Entry point for pw command."""
+
if raw_args is None:
raw_args = sys.argv[1:]
@@ -79,7 +81,7 @@
for module in pkgutil.iter_modules():
if module.name.startswith('pw_'):
_LOG.debug('Found module that may have plugins: %s', module.name)
- plugin = importlib.__import__(module.name)
+ unused_plugin = importlib.__import__(module.name)
# Pull plugins out of the registry and set them up with the parser.
subparsers = parser.add_subparsers(help='pw subcommand to run')
@@ -105,10 +107,12 @@
del args_as_dict['loglevel']
# Run the command and exit with the appropriate status.
+ # pylint: disable=protected-access
if args._run_async:
sys.exit(asyncio.run(args._command(**args_as_dict)))
else:
sys.exit(args._command(**args_as_dict))
+ # pylint: enable=protected-access
if __name__ == "__main__":
diff --git a/pw_cli/py/pw_cli/color.py b/pw_cli/py/pw_cli/color.py
index 4cedc6d..87e0329 100644
--- a/pw_cli/py/pw_cli/color.py
+++ b/pw_cli/py/pw_cli/color.py
@@ -11,6 +11,7 @@
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.
+"""Color codes for use by rest of pw_cli."""
def _make_color(*codes):
@@ -24,6 +25,7 @@
# TODO(keir): Totally replace this Color object with something more complete
# like the 'colorful' module.
+# pylint: disable=too-few-public-methods
class Color:
"""Helpers to surround text with ASCII color escapes"""
red = _make_color(31, 1)
@@ -37,3 +39,6 @@
magenta = _make_color(35, 1)
bold_white = _make_color(37, 1)
black_on_white = _make_color(30, 47) # black fg white bg
+
+
+# pylint: enable=too-few-public-methods
diff --git a/pw_cli/py/pw_cli/log.py b/pw_cli/py/pw_cli/log.py
index f4f859d..e5094b5 100644
--- a/pw_cli/py/pw_cli/log.py
+++ b/pw_cli/py/pw_cli/log.py
@@ -11,6 +11,7 @@
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.
+"""Configure the system logger for the default pw command log format."""
import logging
import os
@@ -40,19 +41,19 @@
def install():
"""Configure the system logger for the default pw command log format."""
- PW_SUBPROCESS = os.getenv('PW_SUBPROCESS')
- if PW_SUBPROCESS is None:
+ pw_subprocess = os.getenv('PW_SUBPROCESS')
+ if pw_subprocess is None:
# This applies a gray background to the time to make the log lines
# distinct from other input, in a way that's easier to see than plain
# colored text.
timestamp_fmt = _Color.black_on_white('%(asctime)s') + ' '
- elif PW_SUBPROCESS == '1':
+ elif pw_subprocess == '1':
# If the logger is being run in the context of a pw subprocess, the
# time and date are omitted (since pw_cli.process will provide them).
timestamp_fmt = ''
else:
raise ValueError(
- f'Invalid environment variable PW_SUBPROCESS={PW_SUBPROCESS}')
+ f'Invalid environment variable PW_SUBPROCESS={pw_subprocess}')
logging.basicConfig(format=timestamp_fmt + '%(levelname)s %(message)s',
datefmt='%Y%m%d %H:%M:%S',
@@ -60,6 +61,7 @@
# Shorten all the log levels to 3 characters for column-aligned logs.
# Color the logs using ANSI codes.
+ # pylint: disable=bad-whitespace
# yapf: disable
logging.addLevelName(logging.CRITICAL, _Color.bold_red('CRT'))
logging.addLevelName(logging.ERROR, _Color.red ('ERR'))
@@ -68,6 +70,7 @@
logging.addLevelName(LOGLEVEL_STDOUT, _Color.cyan ('OUT'))
logging.addLevelName(logging.DEBUG, _Color.blue ('DBG'))
# yapf: enable
+ # pylint: enable=bad-whitespace
# Note: normally this shouldn't be done at the top level without a try/catch
diff --git a/pw_cli/py/pw_cli/plugins.py b/pw_cli/py/pw_cli/plugins.py
index 5de7970..5b5a4cf 100644
--- a/pw_cli/py/pw_cli/plugins.py
+++ b/pw_cli/py/pw_cli/plugins.py
@@ -11,6 +11,7 @@
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.
+"""Registry for plugins."""
import argparse
import logging
@@ -35,7 +36,7 @@
def register(
name: str,
command_function: Callable,
- help: str = '',
+ help: str = '', # pylint: disable=redefined-builtin
define_args_function: DefineArgsFunction = lambda _: None,
) -> None:
registry.append(
diff --git a/pw_cli/py/pw_cli/watch.py b/pw_cli/py/pw_cli/watch.py
index 5d195a8..2c81990 100755
--- a/pw_cli/py/pw_cli/watch.py
+++ b/pw_cli/py/pw_cli/watch.py
@@ -11,6 +11,7 @@
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.
+"""Rebuild every time a file is chanegd."""
import argparse
import enum
@@ -30,7 +31,6 @@
import pw_cli.plugins
from pw_cli.color import Color as _Color
-import logging
_LOG = logging.getLogger(__name__)
_PASS_MESSAGE = """
@@ -70,19 +70,24 @@
sys.exit(1)
+# pylint: disable=logging-format-interpolation
+
+
class PigweedBuildWatcher(FileSystemEventHandler):
+ """Process filesystem events and launch builds if necessary."""
def __init__(self,
patterns=None,
ignore_patterns=None,
case_sensitive=False,
- build_dirs=[]):
+ build_dirs=None):
super().__init__()
self.patterns = patterns
self.ignore_patterns = ignore_patterns
self.case_sensitive = case_sensitive
self.state = _State.WAITING_FOR_FILE_CHANGE_EVENT
- self.build_dirs = build_dirs
+ self.build_dirs = build_dirs or []
+ self.cooldown_finish_time = None
def path_matches(self, path):
"""Returns true if path matches according to the watcher patterns"""
@@ -109,10 +114,10 @@
for path in paths:
if self.path_matches(path):
_LOG.debug('Match for path: %s', path)
- self.on_any_event()
+ self.on_any_event(event)
def run_builds(self):
- # Run all the builds in serial and capture pass/fail for each.
+ """Run all the builds in serial and capture pass/fail for each."""
builds_succeeded = []
num_builds = len(self.build_dirs)
_LOG.info(f'Starting build with {num_builds} directories')
@@ -158,7 +163,7 @@
else:
print(_Color.red(_FAIL_MESSAGE))
- def on_any_event(self):
+ def on_any_event(self, unused_event=None):
if self.state == _State.WAITING_FOR_FILE_CHANGE_EVENT:
self.run_builds()
@@ -210,6 +215,8 @@
def watch(build_dir='', patterns=None, ignore_patterns=None):
+ """TODO(keir) docstring"""
+
_LOG.info('Starting Pigweed build watcher')
# If no build directory was specified, search the tree for GN build
@@ -230,11 +237,13 @@
_die("No build dirs found. Did you forget to 'gn gen out'?")
# Verify that the build output directories exist.
+ # pylint: disable=redefined-argument-from-local
for i, build_dir in enumerate(build_dirs, 1):
if not os.path.isdir(build_dir):
_die("Build directory doesn't exist: %s", build_dir)
else:
_LOG.info(f'Will build [{i}/{len(build_dirs)}]: {build_dir}')
+ # pylint: enable=redefined-argument-from-local
_LOG.debug('Patterns: %s', patterns)