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

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
toirl committed Sep 25, 2017
2 parents b010f48 + 99e5c2f commit 3887312
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 3 deletions.
56 changes: 54 additions & 2 deletions contrib/generate.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import logging
from formbar.config import Config, Field, parse
import sys, argparse
Expand Down Expand Up @@ -40,14 +41,64 @@ def print_fieldnames(config, args):
print "\n".join(out)


def _render_options(options):
out = []
for o in options:
out.append(u"{}) {}".format(o[1], o[0]))
return u"\n".join(out)


def _render_renderer(field):
if field.renderer:
return field.renderer.type
return ""


def _render_rules(field):
out = []
for r in field.get_rules():
if r.required or r.desired:
continue
out.append(u"{},{},{}".format(r._expression, r.msg, r.triggers))
return u"\n".join(out)


def _render_conditions(config, field):
out = []
for cond in config.get_elements('if'):
for cond_field in cond.findall('field'):
if cond_field.attrib.get("ref") == field.id:
out.append(cond.attrib.get("expr"))
return u"\n".join(out)


def print_fields(config, args):
"""Print infos on fields in CSV"""
fields = [field for field in _get_fields(config) if field.type is not "info" and filter_tag(field, args.tags)]
print "Name,Label,Number,Typ,Required,Desired".format(field.name, field.label)
out = []
out.append('"ID","Name","Label","Number","Typ","Required","Desired","Help","Renderer","Options","Rules","Conditions","Comment"')
for field in fields:
if (not args.filtertype
or field.type == args.filtertype):
print '"{}","{}","{}","{}",{},{}'.format(field.name, field.label, field.number, field.type, field.required, field.desired)
out.append(u'"{}","{}","{}","{}","{}","{}","{}","{}","{}","{}","{}","{}",""'.format(
field.id,
field.name,
field.label,
field.number,
field.type or "string",
field.required,
field.desired,
field.help or "",
_render_renderer(field),
_render_options(field.options),
_render_rules(field),
_render_conditions(config, field)
)
)
if args.out:
args.out.write("\n".join(out).encode("UTF8"))
else:
print "\n".join(out)


def print_rules(config, args):
Expand Down Expand Up @@ -126,6 +177,7 @@ def main(args):
parser.add_argument('--print-type', dest='printtype', action="store_true")
parser.add_argument('--tags', metavar='tags', help='Only choose fields with given tags. If empty all fields are returned.', default="")
parser.add_argument('--aslist', dest='aslist', action="store_true")
parser.add_argument('--out', metavar='out', type=argparse.FileType('w'), help='Output')
args = parser.parse_args()
main(args)
sys.exit(0)
2 changes: 2 additions & 0 deletions formbar/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -664,6 +664,7 @@ def required_rule(self, rules):
expr = "bool($%s)" % self.name
mode = "pre"
rule = Rule(expr, required_msg, mode)
rule.required = True
rules.append(rule)

def desired_rule(self, rules):
Expand All @@ -672,6 +673,7 @@ def desired_rule(self, rules):
mode = "pre"
triggers = "warning"
rule = Rule(expr, desired_msg, mode, triggers)
rule.desired = True
rules.append(rule)

def get_rules(self):
Expand Down
2 changes: 1 addition & 1 deletion formbar/converters.py
Original file line number Diff line number Diff line change
Expand Up @@ -208,7 +208,7 @@ def to_integer(value):
"""Converts a given string value into a 4 byte integer value. If
the given value is larger the a 4 byte integer a OverflowError is
raised."""
if value == "":
if value == "" or value is None:
return None
try:
value = int(value)
Expand Down

0 comments on commit 3887312

Please sign in to comment.