Mercurial > p > roundup > code
annotate scripts/schema-dump.py @ 5705:457fc482e6b1
Method PUT: ignore specification of protected properties which can not
be set. Filtering them out of the payload list. This lets the result
of a get using:
class/id?@protected=true&@verbose=0
be used as input to a PUT operation without having to strip the
protected properties.
Note this does not raise an error if the PUT protected property is
different from the value in the db. If the property is different but
the etag/if-match passes, the user attempted to set the protected
property and this should result in an error, but will not with this
patch.
Method DELETE class/id/attribute: raise error when trying to delete
protected or required attribute/property. Raise UsageError
when attribute doesn't exist.
Method PATCH class/id:
raise error when trying to replace/remove protected attribute/property
raise error when trying to remove required attribute/property
Catch KeyError at top level and turn into 400 error.
If payload has an attribute/property that does not exist, raise
UsageError which becomes a 400 error.
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Thu, 11 Apr 2019 20:54:39 -0400 |
| parents | ce171c81d823 |
| children | ed5c19fca083 |
| 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("") |
