Merge pull request #85 from gdevenyi/gh-pages
[rnaseq-cwl-training.git] / bin / util.py
index df350e7a7895bdfc656b1e64c3a66eead0a715d0..e59866f8c1cec97b77b7d09307cb6ed6e93b2bd2 100644 (file)
@@ -2,6 +2,7 @@ import sys
 import os
 import json
 from subprocess import Popen, PIPE
+from __future__ import print_function
 
 # Import this way to produce a more useful error message.
 try:
@@ -11,11 +12,21 @@ except ImportError:
     sys.exit(1)
 
 
+# Things an image file's name can end with.
+IMAGE_FILE_SUFFIX = {
+    '.gif',
+    '.jpg',
+    '.png',
+    '.svg'
+}
+
+# Files that shouldn't be present.
 UNWANTED_FILES = [
     '.nojekyll'
 ]
 
-
+# Marker to show that an expected value hasn't been provided.
+# (Can't use 'None' because that might be a legitimate value.)
 REPORTER_NOT_SET = []
 
 class Reporter(object):
@@ -52,26 +63,39 @@ class Reporter(object):
     def add(self, location, fmt, *args):
         """Append error unilaterally."""
 
-        if isinstance(location, type(None)):
-            coords = ''
-        elif isinstance(location, str):
-            coords = '{0}: '.format(location)
-        elif isinstance(location, tuple):
-            filename, line_number = location
-            coords = '{0}:{1}: '.format(*location)
-        else:
-            assert False, 'Unknown location "{0}"/{1}'.format(location, type(location))
-
-        self.messages.append(coords + fmt.format(*args))
+        self.messages.append((location, fmt.format(*args)))
 
 
     def report(self, stream=sys.stdout):
-        """Report all messages."""
+        """Report all messages in order."""
 
         if not self.messages:
             return
-        for m in sorted(self.messages):
-            print(m, file=stream)
+
+        def pretty(item):
+            location, message = item
+            if isinstance(location, type(None)):
+                return message
+            elif isinstance(location, str):
+                return location + ': ' + message
+            elif isinstance(location, tuple):
+                return '{0}:{1}: '.format(*location) + message
+            else:
+                assert False, 'Unknown item "{0}"'.format(item)
+
+        def key(item):
+            location, message = item
+            if isinstance(location, type(None)):
+                return ('', -1, message)
+            elif isinstance(location, str):
+                return (location, -1, message)
+            elif isinstance(location, tuple):
+                return (location[0], location[1], message)
+            else:
+                assert False, 'Unknown item "{0}"'.format(item)
+
+        for m in sorted(self.messages, key=key):
+            print(pretty(m), file=stream)
 
 
 def read_markdown(parser, path):