diff env/bin/prov-convert @ 0:26e78fe6e8c4 draft

"planemo upload commit c699937486c35866861690329de38ec1a5d9f783"
author shellac
date Sat, 02 May 2020 07:14:21 -0400
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/env/bin/prov-convert	Sat May 02 07:14:21 2020 -0400
@@ -0,0 +1,152 @@
+#!/Users/pldms/Development/Projects/2020/david-matthews-galaxy/guppy_basecaller/env/bin/python3
+# encoding: utf-8
+"""
+convert -- Convert PROV-JSON to RDF, PROV-N, PROV-XML, or graphical formats (SVG, PDF, PNG)
+
+@author:     Trung Dong Huynh
+
+@copyright:  2016 University of Southampton, United Kingdom. All rights reserved.
+
+@license:    MIT License
+
+@contact:    trungdong@donggiang.com
+@deffield    updated: 2016-10-19
+"""
+
+from argparse import ArgumentParser, RawDescriptionHelpFormatter, FileType
+import os
+import sys
+import logging
+import traceback
+import six
+
+from prov.model import ProvDocument
+from prov import serializers
+
+
+logger = logging.getLogger(__name__)
+
+__all__ = []
+__version__ = 0.1
+__date__ = '2014-03-14'
+__updated__ = '2016-10-19'
+
+DEBUG = 0
+TESTRUN = 0
+PROFILE = 0
+
+GRAPHVIZ_SUPPORTED_FORMATS = {
+    'bmp', 'canon', 'cmap', 'cmapx', 'cmapx_np', 'dot', 'eps', 'fig', 'gtk', 'gv', 'ico', 'imap', 'imap_np', 'ismap',
+    'jpe', 'jpeg', 'jpg', 'pdf', 'plain', 'plain-ext', 'png', 'ps', 'ps2', 'svg', 'svgz', 'tif', 'tiff', 'tk',
+    'vml', 'vmlz', 'x11', 'xdot', 'xlib'
+}
+
+
+@six.python_2_unicode_compatible
+class CLIError(Exception):
+    """Generic exception to raise and log different fatal errors."""
+    def __init__(self, msg):
+        super(CLIError).__init__(type(self))
+        self.msg = "E: %s" % msg
+
+    def __str__(self):
+        return self.msg
+
+
+def convert_file(infile, outfile, output_format):
+    prov_doc = ProvDocument.deserialize(infile)
+
+    # Formats not supported by prov.serializers
+    if output_format == 'provn':
+        outfile.write(prov_doc.get_provn().encode())
+    elif output_format in GRAPHVIZ_SUPPORTED_FORMATS:
+        from prov.dot import prov_to_dot
+        dot = prov_to_dot(prov_doc)
+        content = dot.create(format=output_format)
+        outfile.write(content)
+    else:
+        # Try supported serializers:
+        try:
+            prov_doc.serialize(outfile, format=output_format)
+        except serializers.DoNotExist:
+            raise CLIError('Output format "%s" is not supported.' % output_format)
+
+
+def main(argv=None):  # IGNORE:C0111
+    """Command line options."""
+
+    if argv is None:
+        argv = sys.argv
+    else:
+        sys.argv.extend(argv)
+
+    program_name = os.path.basename(sys.argv[0])
+    program_version = "v%s" % __version__
+    program_build_date = str(__updated__)
+    program_version_message = '%%(prog)s %s (%s)' % (program_version, program_build_date)
+    program_shortdesc = __import__('__main__').__doc__.split("\n")[1]
+    program_license = '''%s
+
+  Created by Trung Dong Huynh on %s.
+  Copyright 2016 University of Southampton. All rights reserved.
+
+  Licensed under the MIT License
+  https://github.com/trungdong/prov/blob/master/LICENSE
+
+  Distributed on an "AS IS" basis without warranties
+  or conditions of any kind, either express or implied.
+
+USAGE
+''' % (program_shortdesc, str(__date__))
+
+    try:
+        # Setup argument parser
+        parser = ArgumentParser(description=program_license, formatter_class=RawDescriptionHelpFormatter)
+        parser.add_argument('-f', '--format', dest='format', action='store', default='json',
+                            help='output format: json, xml, provn, or one supported by GraphViz (e.g. svg, pdf)')
+        parser.add_argument('infile', nargs='?', type=FileType('r'), default=sys.stdin)
+        parser.add_argument('outfile', nargs='?', type=FileType('wb'), default=sys.stdout)
+        parser.add_argument('-V', '--version', action='version', version=program_version_message)
+
+        args = None
+        try:
+            # Process arguments
+            args = parser.parse_args()
+            convert_file(args.infile, args.outfile, args.format.lower())
+        finally:
+            if args:
+                if args.infile:
+                    args.infile.close()
+                if args.outfile:
+                    args.outfile.close()
+
+        return 0
+    except KeyboardInterrupt:
+        # handle keyboard interrupt
+        return 0
+    except Exception as e:
+        if DEBUG or TESTRUN:
+            traceback.print_exc()
+            raise e
+        indent = len(program_name) * " "
+        sys.stderr.write(program_name + ": " + str(e) + "\n")
+        sys.stderr.write(indent + "  for help use --help")
+        return 2
+
+if __name__ == "__main__":
+    logging.basicConfig(level=(logging.DEBUG if DEBUG else logging.INFO))
+    if TESTRUN:
+        import doctest
+        doctest.testmod()
+    if PROFILE:
+        import cProfile
+        import pstats
+        profile_filename = 'converter_profile.txt'
+        cProfile.run('main()', profile_filename)
+        statsfile = open("profile_stats.txt", "wb")
+        p = pstats.Stats(profile_filename, stream=statsfile)
+        stats = p.strip_dirs().sort_stats('cumulative')
+        stats.print_stats()
+        statsfile.close()
+        sys.exit(0)
+    sys.exit(main())
\ No newline at end of file