Skip to content
This repository was archived by the owner on May 29, 2024. It is now read-only.

Commit 1fdbfd3

Browse files
committed
Merge branch 'master' into feature/FormDataprovider
2 parents 190d8ea + 3887312 commit 1fdbfd3

4 files changed

Lines changed: 65 additions & 4 deletions

File tree

contrib/generate.py

Lines changed: 54 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#!/usr/bin/env python
2+
# -*- coding: utf-8 -*-
23
import logging
34
from formbar.config import Config, Field, parse
45
import sys, argparse
@@ -40,14 +41,64 @@ def print_fieldnames(config, args):
4041
print "\n".join(out)
4142

4243

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+
4375
def print_fields(config, args):
4476
"""Print infos on fields in CSV"""
4577
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"')
4780
for field in fields:
4881
if (not args.filtertype
4982
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)
51102

52103

53104
def print_rules(config, args):
@@ -126,6 +177,7 @@ def main(args):
126177
parser.add_argument('--print-type', dest='printtype', action="store_true")
127178
parser.add_argument('--tags', metavar='tags', help='Only choose fields with given tags. If empty all fields are returned.', default="")
128179
parser.add_argument('--aslist', dest='aslist', action="store_true")
180+
parser.add_argument('--out', metavar='out', type=argparse.FileType('w'), help='Output')
129181
args = parser.parse_args()
130182
main(args)
131183
sys.exit(0)

formbar/config.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -664,6 +664,7 @@ def required_rule(self, rules):
664664
expr = "bool($%s)" % self.name
665665
mode = "pre"
666666
rule = Rule(expr, required_msg, mode)
667+
rule.required = True
667668
rules.append(rule)
668669

669670
def desired_rule(self, rules):
@@ -672,6 +673,7 @@ def desired_rule(self, rules):
672673
mode = "pre"
673674
triggers = "warning"
674675
rule = Rule(expr, desired_msg, mode, triggers)
676+
rule.desired = True
675677
rules.append(rule)
676678

677679
def get_rules(self):

formbar/converters.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ def to_integer(value):
208208
"""Converts a given string value into a 4 byte integer value. If
209209
the given value is larger the a 4 byte integer a OverflowError is
210210
raised."""
211-
if value == "":
211+
if value == "" or value is None:
212212
return None
213213
try:
214214
value = int(value)

formbar/templates/form.mako

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,14 @@
5858
% elif child.tag == "page":
5959
${self.render_outline_element(form, child)}
6060
% elif child.tag == "if" and child[0].tag == "page" and child.attrib.get("static") != "true":
61-
<div id="${id(child)}" class="formbar-conditional ${child.attrib.get('type')}" reset-value="${child.attrib.get('reset-value', 'false')}" expr="${child.attrib.get('expr')}">
61+
<%
62+
is_active = Rule(child.attrib.get("expr")).evaluate(form.merged_data)
63+
if is_active:
64+
css_class = "active"
65+
else:
66+
css_class = "inactive {} {}".format(child.attrib.get('type'), '' if is_readonly else 'hidden')
67+
%>
68+
<div id="${id(child)}" class="formbar-conditional ${css_class}" reset-value="${child.attrib.get('reset-value', 'false')}" expr="${child.attrib.get('expr')}">
6269
% endif
6370
% if child.attrib.get("static") != "true" or Rule(child.attrib.get("expr")).evaluate(form.merged_data):
6471
${self.render_recursive_outline(form, child)}

0 commit comments

Comments
 (0)