comparison env/bin/prov-compare @ 0:26e78fe6e8c4 draft

"planemo upload commit c699937486c35866861690329de38ec1a5d9f783"
author shellac
date Sat, 02 May 2020 07:14:21 -0400
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:26e78fe6e8c4
1 #!/Users/pldms/Development/Projects/2020/david-matthews-galaxy/guppy_basecaller/env/bin/python3
2 # encoding: utf-8
3 """
4 prov-compare -- Compare two PROV-JSON, PROV-XML, or RDF (PROV-O) files for equivalence
5
6 @author: Trung Dong Huynh
7
8 @copyright: 2016 University of Southampton, United Kingdom. All rights reserved.
9
10 @license: MIT Licence
11
12 @contact: trungdong@donggiang.com
13 @deffield updated: 2016-10-19
14 """
15
16 from argparse import ArgumentParser, RawDescriptionHelpFormatter, FileType
17 import os
18 import sys
19 import logging
20 import traceback
21 import six
22
23 from prov.model import ProvDocument
24
25
26 logger = logging.getLogger(__name__)
27
28 __all__ = []
29 __version__ = 0.1
30 __date__ = '2015-06-16'
31 __updated__ = '2016-10-19'
32
33 DEBUG = 0
34 TESTRUN = 0
35 PROFILE = 0
36
37
38 @six.python_2_unicode_compatible
39 class CLIError(Exception):
40 """Generic exception to raise and log different fatal errors."""
41 def __init__(self, msg):
42 super(CLIError).__init__(type(self))
43 self.msg = "E: %s" % msg
44
45 def __str__(self):
46 return self.msg
47
48
49 def main(argv=None): # IGNORE:C0111
50 """Command line options."""
51
52 if argv is None:
53 argv = sys.argv
54 else:
55 sys.argv.extend(argv)
56
57 program_name = os.path.basename(sys.argv[0])
58 program_version = "v%s" % __version__
59 program_build_date = str(__updated__)
60 program_version_message = '%%(prog)s %s (%s)' % (program_version, program_build_date)
61 program_shortdesc = __import__('__main__').__doc__.split("\n")[1]
62 program_license = '''%s
63
64 Created by Trung Dong Huynh on %s.
65 Copyright 2016 University of Southampton. All rights reserved.
66
67 Licensed under the MIT License
68 https://github.com/trungdong/prov/blob/master/LICENSE
69
70 Distributed on an "AS IS" basis without warranties
71 or conditions of any kind, either express or implied.
72
73 USAGE
74 ''' % (program_shortdesc, str(__date__))
75
76 try:
77 # Setup argument parser
78 parser = ArgumentParser(description=program_license, formatter_class=RawDescriptionHelpFormatter)
79 parser.add_argument('file1', nargs='?', type=FileType('r'))
80 parser.add_argument('file2', nargs='?', type=FileType('r'))
81 parser.add_argument('-f', '--format1', dest='format1', action='store', default='json',
82 help='File 1\'s format: json or xml')
83 parser.add_argument('-F', '--format2', dest='format2', action='store', default='json',
84 help='File 2\'s format: json or xml')
85 parser.add_argument('-V', '--version', action='version', version=program_version_message)
86
87 args = None
88 try:
89 # Process arguments
90 args = parser.parse_args()
91 doc1 = ProvDocument.deserialize(args.file1, format=args.format1.lower())
92 doc2 = ProvDocument.deserialize(args.file2, format=args.format2.lower())
93 return doc1 != doc2
94
95 finally:
96 if args:
97 if args.file1:
98 args.file1.close()
99 if args.file2:
100 args.file2.close()
101
102 except Exception as e:
103 if DEBUG or TESTRUN:
104 traceback.print_exc()
105 raise e
106 indent = len(program_name) * " "
107 sys.stderr.write(program_name + ": " + str(e) + "\n")
108 sys.stderr.write(indent + " for help use --help")
109 return 2
110
111 if __name__ == "__main__":
112 logging.basicConfig(level=(logging.DEBUG if DEBUG else logging.INFO))
113 if TESTRUN:
114 import doctest
115 doctest.testmod()
116 if PROFILE:
117 import cProfile
118 import pstats
119 profile_filename = 'prov_compare_profile.txt'
120 cProfile.run('main()', profile_filename)
121 statsfile = open("profile_stats.txt", "wb")
122 p = pstats.Stats(profile_filename, stream=statsfile)
123 stats = p.strip_dirs().sort_stats('cumulative')
124 stats.print_stats()
125 statsfile.close()
126 sys.exit(0)
127 sys.exit(main())