Hi, should this have been from __future__ import print_function ? Thanks, -Aaron On Thu, Oct 19, 2017 at 1:33 PM, CCTBX Commit via DLS Jenkins < [email protected]> wrote:
Repository : ssh://g18-sc-serv-04.diamond.ac.uk/cctbx On branch : master
------------------------------
commit d499b973be4c0443e607fbad13e495bb450938a3 Author: Markus Gerstel
Date: Thu Oct 19 21:33:54 2017 +0100 Add --print_statement checking capability to libtbx.find_clutter
------------------------------
d499b973be4c0443e607fbad13e495bb450938a3 libtbx/command_line/find_clutter.py | 12 +++++++++++- libtbx/file_clutter.py | 23 +++++++++++++++++++---- 2 files changed, 30 insertions(+), 5 deletions(-)
diff --git a/libtbx/command_line/find_clutter.py b/libtbx/command_line/find_clutter.py index 27baa6d7b..66f4b46eb 100644 --- a/libtbx/command_line/find_clutter.py +++ b/libtbx/command_line/find_clutter.py @@ -13,6 +13,7 @@ def run(args): only_dos = False only_future = False flag_absolute_import = False + flag_print_statement = False # paths = [] for arg in args: @@ -34,6 +35,8 @@ def run(args): only_future = True elif (arg == "--absolute_import"): flag_absolute_import = True + elif (arg == "--print_statement"): + flag_print_statement = True else: paths.append(arg) if (len(paths) == 0): paths = ["."] @@ -45,9 +48,12 @@ def run(args): n_too_many_from_future_import_division = 0 n_missing_from_future_import_absolute_import = 0 n_too_many_from_future_import_absolute_import = 0 + n_missing_from_future_import_print_statement = 0 + n_too_many_from_future_import_print_statement = 0 n_bad_indentation = 0 for info in gather(paths=paths, find_unused_imports=not flag_ni, - find_bad_indentation=flag_indentation, flag_absolute_import=flag_ absolute_import): + find_bad_indentation=flag_indentation, flag_absolute_import=flag_ absolute_import, + flag_print_statement=flag_print_statement): if (info.is_cluttered(flag_x=flag_x)): n_is_cluttered += 1 if (info.n_bare_excepts > 0): @@ -62,6 +68,10 @@ def run(args): n_missing_from_future_import_absolute_import += 1 elif info.n_from_future_import_absolute_import > 1: n_too_many_from_future_import_absolute_import += 1 + if info.n_from_future_import_print_statement == 0: + n_missing_from_future_import_print_statement += 1 + elif info.n_from_future_import_print_statement > 1: + n_too_many_from_future_import_print_statement += 1 if (info.bad_indentation is not None) and (flag_indentation) : n_bad_indentation += 1 info.show( diff --git a/libtbx/file_clutter.py b/libtbx/file_clutter.py index 8af972751..768f06491 100644 --- a/libtbx/file_clutter.py +++ b/libtbx/file_clutter.py @@ -11,9 +11,12 @@ class file_clutter(object): '^ from [ ]+ __future__ [ ]+ import [ \w,]+ division', re.VERBOSE) from_future_import_absolute_import_pat = re.compile( '^ from [ ]+ __future__ [ ]+ import [ \w,]+ absolute_import', re.VERBOSE) + from_future_import_print_statement_pat = re.compile( + '^ from [ ]+ __future__ [ ]+ import [ \w,]+ print_statement', re.VERBOSE)
def __init__(self, path, find_unused_imports=False, - find_bad_indentation=True, flag_absolute_import=False): + find_bad_indentation=True, flag_absolute_import=False, + flag_print_statement=False): self.path = path self.is_executable = os.access(path, os.X_OK) self.dos_format = False @@ -25,6 +28,8 @@ class file_clutter(object): self.n_from_future_import_division = None self.flag_absolute_import = flag_absolute_import self.n_from_future_import_absolute_import = None + self.flag_print_statement = flag_print_statement + self.n_from_future_import_print_statement = None self.bad_indentation = None self.file_should_be_empty = False bytes = open(path, "rb").read() @@ -45,6 +50,7 @@ class file_clutter(object): if (path.endswith(".py")): self.n_from_future_import_division = 0 self.n_from_future_import_absolute_import = 0 + self.n_from_future_import_print_statement = 0 py_lines = bytes.splitlines() self.file_should_be_empty = True for line in py_lines: @@ -54,6 +60,8 @@ class file_clutter(object): self.n_from_future_import_division += 1 if self.from_future_import_absolute_import_pat.search(line): self.n_from_future_import_absolute_import += 1 + if self.from_future_import_print_statement_pat.search(line): + self.n_from_future_import_print_statement += 1 ls = line.strip() if ( ls.startswith("except") and ls[6:].strip().startswith(":") @@ -103,7 +111,8 @@ class file_clutter(object): if (self.has_unused_imports()): sapp("unused imports=%d" % len(self.unused_imports)) if self.file_should_be_empty: - if self.n_from_future_import_division == 0 and self.n_from_future_import_absolute_import == 0: + if self.n_from_future_import_division == 0 and self.n_from_future_import_absolute_import == 0 and \ + self.n_from_future_import_print_statement: sapp("file is empty, should be 0 byte file") else: sapp("file contains only 'from __future__ import' and should be empty instead") @@ -116,6 +125,11 @@ class file_clutter(object): sapp("missing 'from __future__ import absolute_import'") elif self.n_from_future_import_absolute_import > 1: sapp("more than one appearance of 'from __future__ import absolute_import'") + if self.flag_print_statement and not self.file_should_be_empty: + if self.n_from_future_import_print_statement == 0: + sapp("missing 'from __future__ import print_statement'") + elif self.n_from_future_import_print_statement > 1: + sapp("more than one appearance of 'from __future__ import print_statement'") if (self.bad_indentation is not None) and (flag_indentation) : n_tab, n_space = self.bad_indentation sapp("non-standard indentation: %d space, %d tab" % (n_space, n_tab)) @@ -144,11 +158,12 @@ def is_text_file(file_name): if (name.endswith(extension)): return True return False
-def gather(paths, find_unused_imports=False, find_bad_indentation=False, flag_absolute_import=False): +def gather(paths, find_unused_imports=False, find_bad_indentation=False, flag_absolute_import=False, flag_print_statement=False): clutter = [] def capp(): clutter.append(file_clutter(path, find_unused_imports, - find_bad_indentation=find_bad_indentation, flag_absolute_import=flag_absolute_import)) + find_bad_indentation=find_bad_indentation, flag_absolute_import=flag_absolute_import, + flag_print_statement=flag_print_statement)) for path in paths: if (not os.path.exists(path)): print >> sys.stderr, "No such file or directory:", path