Mercurial > p > roundup > code
annotate scripts/schema-dump.py @ 5132:0142b4fb5a2d
issue2550648 - partial fix for problem in this issue. Ezio Melotti
reported that the expression editor allowed the user to generate an
expression using retired values. To align the expression editor with
the simple dropdown search item, retired values are now removed from
the expression editor.
Do we really want this though? Supposed a keyword is retired and I
want to search for an issue with that retired keyword? Do we have a
best policy document that says to remove retired keywords from all
places it could possibly be used? It could be argued that the simple
search dropdown is wrong and should allow selecting retired values.
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Fri, 08 Jul 2016 19:31:02 -0400 |
| parents | 27f592f3d696 |
| children | e46ce04d5bbc |
| 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 |
|
9369ade6c24b
scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
19 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
|
20 import sys |
|
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 xmlrpclib |
|
9369ade6c24b
scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
22 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
|
23 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
|
24 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
|
25 |
|
9369ade6c24b
scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
26 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
|
27 usage = """\ |
|
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: %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
|
29 |
|
9369ade6c24b
scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
30 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
|
31 |
|
9369ade6c24b
scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
32 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
|
33 |
|
9369ade6c24b
scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
34 options: |
|
9369ade6c24b
scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
35 --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
|
36 --json |
|
9369ade6c24b
scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
37 --yaml |
|
9369ade6c24b
scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
38 --raw |
|
9369ade6c24b
scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
39 |
|
9369ade6c24b
scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
40 -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
|
41 --version |
|
9369ade6c24b
scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
42 """ % sname |
|
9369ade6c24b
scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
43 |
|
9369ade6c24b
scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
44 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
|
45 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
|
46 |
|
9369ade6c24b
scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
47 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
|
48 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
|
49 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
|
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 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
|
53 |
|
9369ade6c24b
scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
54 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
|
55 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
|
56 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
|
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 = 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
|
59 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
|
60 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
|
61 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
|
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 out2 = [] |
|
9369ade6c24b
scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
65 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
|
66 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
|
67 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
|
68 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
|
69 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
|
70 # 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
|
71 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
|
72 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
|
73 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
|
74 else: |
|
9369ade6c24b
scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
75 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
|
76 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
|
77 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
|
78 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
|
79 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
|
80 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
|
81 |
|
9369ade6c24b
scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
82 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
|
83 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
|
84 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
|
85 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
|
86 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
|
87 |
|
9369ade6c24b
scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
88 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
|
89 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
|
90 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
|
91 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
|
92 (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
|
93 |
|
9369ade6c24b
scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
94 url = args[0] |
|
9369ade6c24b
scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
95 roundup_server = xmlrpclib.ServerProxy(url, allow_none=True) |
|
9369ade6c24b
scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
96 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
|
97 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
|
98 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
|
99 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
|
100 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
|
101 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
|
102 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
|
103 else: |
|
9369ade6c24b
scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
104 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
|
105 |
|
9369ade6c24b
scripts/schema-dump.py: New script to dump schema from tracker through XML-RPC
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
106 print("") |
