[cctbxbb] [git/cctbx] master: Add --print_statement checking capability to libtbx.find_clutter (d499b973b)

markus.gerstel at diamond.ac.uk markus.gerstel at diamond.ac.uk
Thu Oct 19 14:04:34 PDT 2017


d'oh
________________________________
From: cctbxbb-bounces at phenix-online.org [cctbxbb-bounces at phenix-online.org] on behalf of Aaron Brewster [asbrewster at lbl.gov]
Sent: Thursday, October 19, 2017 22:01
To: cctbx mailing list
Subject: Re: [cctbxbb] [git/cctbx] master: Add --print_statement checking capability to libtbx.find_clutter (d499b973b)

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 <graeme.winter at gmail.com<mailto:graeme.winter at gmail.com>> wrote:
Repository : ssh://g18-sc-serv-04.diamond.ac.uk/cctbx<http://g18-sc-serv-04.diamond.ac.uk/cctbx>
On branch  : master

________________________________


commit d499b973be4c0443e607fbad13e495bb450938a3
Author: Markus Gerstel <markus.gerstel at diamond.ac.uk<mailto:markus.gerstel at diamond.ac.uk>>
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


-- 
This e-mail and any attachments may contain confidential, copyright and or privileged material, and are for the use of the intended addressee only. If you are not the intended addressee or an authorised recipient of the addressee please notify us of receipt by returning the e-mail and do not use, copy, retain, distribute or disclose the information in or attached to the e-mail.
Any opinions expressed within this e-mail are those of the individual and not necessarily of Diamond Light Source Ltd. 
Diamond Light Source Ltd. cannot guarantee that this e-mail or any attachments are free from viruses and we cannot accept liability for any damage which you may sustain as a result of software viruses which may be transmitted in or with the message.
Diamond Light Source Limited (company no. 4375679). Registered in England and Wales with its registered office at Diamond House, Harwell Science and Innovation Campus, Didcot, Oxfordshire, OX11 0DE, United Kingdom




More information about the cctbxbb mailing list