annotate scripts/schema-dump.py @ 5507:0db3779702d9

access exception args in a Python 3 compatible way
author Christof Meerwald <cmeerw@cmeerw.org>
date Fri, 17 Aug 2018 19:44:12 +0100
parents ce171c81d823
children ed5c19fca083
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4937
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
1 #!/usr/bin/env python
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
2 # -*- coding: utf-8 -*-
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
3 """
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
4 Use recently documented XML-RPC API to dump
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
5 Roundup data schema in human readable form.
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
6
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
7 Future development may cover:
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
8 [ ] unreadable dump formats
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
9 [ ] access to local database
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
10 [ ] lossless dump/restore cycle
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
11 [ ] data dump and filtering with preserved
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
12 """
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
13 __license__ = "Public Domain"
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
14 __version__ = "1.0"
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
15 __authors__ = [
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
16 "anatoly techtonik <techtonik@gmail.com>"
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
17 ]
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
18
5487
ce171c81d823 Use print_function import everywhere using print.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5408
diff changeset
19 from __future__ import print_function
4937
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
20 import os
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
21 import sys
5408
e46ce04d5bbc Python 3 preparation: update xmlrpclib / SimpleXMLRPCServer imports.
Joseph Myers <jsm@polyomino.org.uk>
parents: 4938
diff changeset
22 from roundup.anypy import xmlrpc_
4937
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
23 import pprint
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
24 import textwrap
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
25 from optparse import OptionParser
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
26
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
27 sname = os.path.basename(sys.argv[0])
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
28 usage = """\
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
29 usage: %s [options] URL
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
30
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
31 URL is XML-RPC endpoint for your tracker, such as:
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
32
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
33 http://localhost:8917/demo/xmlrpc
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
34
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
35 options:
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
36 --pprint (default)
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
37 --json
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
38 --yaml
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
39 --raw
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
40
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
41 -h --help
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
42 --version
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
43 """ % sname
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
44
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
45 def format_pprint(var):
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
46 return pprint.pformat(var)
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
47
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
48 def format_json(var):
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
49 jout = pprint.pformat(var)
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
50 jout = jout.replace('"', "\\'") # " to \'
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
51 jout = jout.replace("'", '"') # ' to "
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
52 jout = jout.replace('\\"', "'") # \" to '
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
53 return jout
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
54
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
55 def format_yaml(var):
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
56 out = pprint.pformat(var)
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
57 out = out.replace('{', ' ')
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
58 out = out.replace('}', '')
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
59 out = textwrap.dedent(out)
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
60 out = out.replace("'", '')
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
61 out = out.replace(' [[', '\n [')
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
62 out = out.replace(']]', ']')
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
63 out = out.replace('],', '')
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
64 out = out.replace(']', '')
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
65 out2 = []
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
66 for line in out.splitlines():
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
67 if '[' in line:
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
68 line = ' ' + line.lstrip(' [')
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
69 line = line.replace('>', '')
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
70 line = line.replace('roundup.hyperdb.', '')
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
71 # expandtabs(16) with limit=1
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
72 n, v = line.split(', <')
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
73 if len(n) > 14:
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
74 indent = 0
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
75 else:
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
76 indent = 14 - len(n)
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
77 line = line.replace(', <', ': '+' '*indent)
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
78 line.split(",")
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
79 out2.append(line)
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
80 out = '\n'.join(out2)
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
81 return out
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
82
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
83 if __name__ == "__main__":
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
84 if len(sys.argv) < 2 or "-h" in sys.argv or "--help" in sys.argv:
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
85 sys.exit(usage)
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
86 if "--version" in sys.argv:
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
87 sys.exit(sname + " " + __version__)
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
88
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
89 parser = OptionParser()
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
90 parser.add_option("--raw", action='store_true')
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
91 parser.add_option("--yaml", action='store_true')
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
92 parser.add_option("--json", action='store_true')
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
93 (options, args) = parser.parse_args()
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
94
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
95 url = args[0]
5408
e46ce04d5bbc Python 3 preparation: update xmlrpclib / SimpleXMLRPCServer imports.
Joseph Myers <jsm@polyomino.org.uk>
parents: 4938
diff changeset
96 roundup_server = xmlrpc_.client.ServerProxy(url, allow_none=True)
4937
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
97 schema = roundup_server.schema()
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
98 if options.raw:
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
99 print(str(schema))
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
100 elif options.yaml:
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
101 print(format_yaml(schema))
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
102 elif options.json:
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
103 print(format_json(schema))
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
104 else:
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
105 print(format_pprint(schema))
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
106
9369ade6c24b scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
107 print("")

Roundup Issue Tracker: http://roundup-tracker.org/