|
1 | 1 | #!/usr/bin/env python |
| 2 | +# -*- coding: utf-8 -*- |
2 | 3 | import logging |
3 | 4 | from formbar.config import Config, Field, parse |
4 | 5 | import sys, argparse |
@@ -40,14 +41,64 @@ def print_fieldnames(config, args): |
40 | 41 | print "\n".join(out) |
41 | 42 |
|
42 | 43 |
|
| 44 | +def _render_options(options): |
| 45 | + out = [] |
| 46 | + for o in options: |
| 47 | + out.append(u"{}) {}".format(o[1], o[0])) |
| 48 | + return u"\n".join(out) |
| 49 | + |
| 50 | + |
| 51 | +def _render_renderer(field): |
| 52 | + if field.renderer: |
| 53 | + return field.renderer.type |
| 54 | + return "" |
| 55 | + |
| 56 | + |
| 57 | +def _render_rules(field): |
| 58 | + out = [] |
| 59 | + for r in field.get_rules(): |
| 60 | + if r.required or r.desired: |
| 61 | + continue |
| 62 | + out.append(u"{},{},{}".format(r._expression, r.msg, r.triggers)) |
| 63 | + return u"\n".join(out) |
| 64 | + |
| 65 | + |
| 66 | +def _render_conditions(config, field): |
| 67 | + out = [] |
| 68 | + for cond in config.get_elements('if'): |
| 69 | + for cond_field in cond.findall('field'): |
| 70 | + if cond_field.attrib.get("ref") == field.id: |
| 71 | + out.append(cond.attrib.get("expr")) |
| 72 | + return u"\n".join(out) |
| 73 | + |
| 74 | + |
43 | 75 | def print_fields(config, args): |
44 | 76 | """Print infos on fields in CSV""" |
45 | 77 | fields = [field for field in _get_fields(config) if field.type is not "info" and filter_tag(field, args.tags)] |
46 | | - print "Name,Label,Number,Typ,Required,Desired".format(field.name, field.label) |
| 78 | + out = [] |
| 79 | + out.append('"ID","Name","Label","Number","Typ","Required","Desired","Help","Renderer","Options","Rules","Conditions","Comment"') |
47 | 80 | for field in fields: |
48 | 81 | if (not args.filtertype |
49 | 82 | or field.type == args.filtertype): |
50 | | - print '"{}","{}","{}","{}",{},{}'.format(field.name, field.label, field.number, field.type, field.required, field.desired) |
| 83 | + out.append(u'"{}","{}","{}","{}","{}","{}","{}","{}","{}","{}","{}","{}",""'.format( |
| 84 | + field.id, |
| 85 | + field.name, |
| 86 | + field.label, |
| 87 | + field.number, |
| 88 | + field.type or "string", |
| 89 | + field.required, |
| 90 | + field.desired, |
| 91 | + field.help or "", |
| 92 | + _render_renderer(field), |
| 93 | + _render_options(field.options), |
| 94 | + _render_rules(field), |
| 95 | + _render_conditions(config, field) |
| 96 | + ) |
| 97 | + ) |
| 98 | + if args.out: |
| 99 | + args.out.write("\n".join(out).encode("UTF8")) |
| 100 | + else: |
| 101 | + print "\n".join(out) |
51 | 102 |
|
52 | 103 |
|
53 | 104 | def print_rules(config, args): |
@@ -126,6 +177,7 @@ def main(args): |
126 | 177 | parser.add_argument('--print-type', dest='printtype', action="store_true") |
127 | 178 | parser.add_argument('--tags', metavar='tags', help='Only choose fields with given tags. If empty all fields are returned.', default="") |
128 | 179 | parser.add_argument('--aslist', dest='aslist', action="store_true") |
| 180 | + parser.add_argument('--out', metavar='out', type=argparse.FileType('w'), help='Output') |
129 | 181 | args = parser.parse_args() |
130 | 182 | main(args) |
131 | 183 | sys.exit(0) |
0 commit comments