fix: linter errors

This commit is contained in:
Noortheen Raja 2021-01-15 02:21:15 +05:30
parent 0b20e68e12
commit 88478aafc4
4 changed files with 25 additions and 12 deletions

View file

@ -1,21 +1,25 @@
"""Cache files manager""" """Cache files manager."""
import hashlib import hashlib
import marshal
import os import os
import pickle
class Cacher(object): class Cacher(object):
"""Class to implement saving/loading cache for given file."""
def __init__(self, file_name, cache_path): def __init__(self, file_name, cache_path):
# type: (str, str) -> None # type: (str, str) -> None
"""Init cache class for the given file."""
self.file_name = file_name self.file_name = file_name
enc = hashlib.md5(file_name.encode()) checksum = hashlib.md5(file_name.encode()) # nosec
self.cache_path = os.path.join(cache_path, str(enc.hexdigest())) self.cache_path = os.path.join(cache_path, str(checksum.hexdigest()))
def get(self): def get(self):
"""Get cached result from the cache_path if available and valid."""
if not os.path.exists(self.cache_path): if not os.path.exists(self.cache_path):
return return
with open(self.cache_path, "rb") as fr: with open(self.cache_path, "rb") as fr:
mtime, results = pickle.load(fr) mtime, results = marshal.load(fr) # nosec
# if the mtime doesn't change then return cache. # if the mtime doesn't change then return cache.
# otherwise it is invalid # otherwise it is invalid
current_mtime = os.path.getmtime(self.file_name) current_mtime = os.path.getmtime(self.file_name)
@ -23,7 +27,7 @@ class Cacher(object):
return results return results
def save(self, results): def save(self, results):
"""saves the given result to the cache file""" """Save the given result to the cache file."""
with open(self.cache_path, "wb") as fw: with open(self.cache_path, "wb") as fw:
current_mtime = os.path.getmtime(self.file_name) current_mtime = os.path.getmtime(self.file_name)
pickle.dump((current_mtime, results), fw) marshal.dump((current_mtime, results), fw)

View file

@ -13,8 +13,8 @@ try:
except ImportError: except ImportError:
multiprocessing = None # type: ignore multiprocessing = None # type: ignore
from flake8 import defaults
from flake8 import cacher from flake8 import cacher
from flake8 import defaults
from flake8 import exceptions from flake8 import exceptions
from flake8 import processor from flake8 import processor
from flake8 import utils from flake8 import utils
@ -585,7 +585,7 @@ class FileChecker(object):
self.run_logical_checks() self.run_logical_checks()
def run_checks(self): def run_checks(self):
"""cached wrapper of self.run_checks""" """Cache wrapper of self.run_checks."""
# handle both cases where cache is enabled/disabled or invalid # handle both cases where cache is enabled/disabled or invalid
cache_available = False cache_available = False
if self.options.cache: if self.options.cache:

View file

@ -12,6 +12,7 @@ def options_from(**kwargs):
kwargs.setdefault('verbose', False) kwargs.setdefault('verbose', False)
kwargs.setdefault('stdin_display_name', 'stdin') kwargs.setdefault('stdin_display_name', 'stdin')
kwargs.setdefault('disable_noqa', False) kwargs.setdefault('disable_noqa', False)
kwargs.setdefault('cache_location', ".cache/flake8")
return argparse.Namespace(**kwargs) return argparse.Namespace(**kwargs)

View file

@ -1,4 +1,6 @@
"""Unit tests for the FileChecker class.""" """Unit tests for the FileChecker class."""
import argparse
import mock import mock
import pytest import pytest
@ -6,6 +8,12 @@ import flake8
from flake8 import checker from flake8 import checker
def options(**kwargs):
"""Generate argparse.Namespace for our Application."""
kwargs.setdefault('cache_location', ".cache/flake8")
return argparse.Namespace(**kwargs)
@mock.patch('flake8.processor.FileProcessor') @mock.patch('flake8.processor.FileProcessor')
def test_run_ast_checks_handles_SyntaxErrors(FileProcessor): # noqa: N802,N803 def test_run_ast_checks_handles_SyntaxErrors(FileProcessor): # noqa: N802,N803
"""Stress our SyntaxError handling. """Stress our SyntaxError handling.
@ -16,7 +24,7 @@ def test_run_ast_checks_handles_SyntaxErrors(FileProcessor): # noqa: N802,N803
FileProcessor.return_value = processor FileProcessor.return_value = processor
processor.build_ast.side_effect = SyntaxError('Failed to build ast', processor.build_ast.side_effect = SyntaxError('Failed to build ast',
('', 1, 5, 'foo(\n')) ('', 1, 5, 'foo(\n'))
file_checker = checker.FileChecker(__file__, checks={}, options=object()) file_checker = checker.FileChecker(__file__, checks={}, options=options())
with mock.patch.object(file_checker, 'report') as report: with mock.patch.object(file_checker, 'report') as report:
file_checker.run_ast_checks() file_checker.run_ast_checks()
@ -31,14 +39,14 @@ def test_run_ast_checks_handles_SyntaxErrors(FileProcessor): # noqa: N802,N803
def test_repr(*args): def test_repr(*args):
"""Verify we generate a correct repr.""" """Verify we generate a correct repr."""
file_checker = checker.FileChecker( file_checker = checker.FileChecker(
'example.py', checks={}, options=object(), 'example.py', checks={}, options=options(),
) )
assert repr(file_checker) == 'FileChecker for example.py' assert repr(file_checker) == 'FileChecker for example.py'
def test_nonexistent_file(): def test_nonexistent_file():
"""Verify that checking non-existent file results in an error.""" """Verify that checking non-existent file results in an error."""
c = checker.FileChecker("foobar.py", checks={}, options=object()) c = checker.FileChecker("foobar.py", checks={}, options=options())
assert c.processor is None assert c.processor is None
assert not c.should_process assert not c.should_process