Coverage for /var/srv/projects/api.amasfac.comuna18.com/tmp/venv/lib/python3.9/site-packages/coreschema/encodings/html.py: 9%
44 statements
« prev ^ index » next coverage.py v6.4.4, created at 2023-07-17 14:22 -0600
« prev ^ index » next coverage.py v6.4.4, created at 2023-07-17 14:22 -0600
1from coreschema import Object, Array, String, Integer, Number, Boolean, Enum
2import jinja2
5env = jinja2.Environment(loader=jinja2.PackageLoader('coreschema', 'templates'))
8# TODO: required
9# TODO: initial values, errors, input control
12def render_to_form(schema):
13 template = env.get_template('form.html')
14 return template.render({
15 'parent': schema,
16 'determine_html_template': determine_html_template,
17 'get_textarea_value': get_textarea_value,
18 'get_attrs': get_attrs
19 })
22def determine_html_template(schema):
23 if isinstance(schema, Array):
24 if schema.unique_items and isinstance(schema.items, Enum):
25 # Actually only for *unordered* input
26 return 'bootstrap3/inputs/select_multiple.html'
27 # TODO: Comma seperated inputs
28 return 'bootstrap3/inputs/textarea.html'
29 elif isinstance(schema, Object):
30 # TODO: Fieldsets
31 return 'bootstrap3/inputs/textarea.html'
32 elif isinstance(schema, Number):
33 return 'bootstrap3/inputs/input.html'
34 elif isinstance(schema, Boolean):
35 # TODO: nullable boolean
36 return 'bootstrap3/inputs/checkbox.html'
37 elif isinstance(schema, Enum):
38 # TODO: display values
39 return 'bootstrap3/inputs/select.html'
40 # String:
41 if schema.format == 'textarea':
42 return 'bootstrap3/inputs/textarea.html'
43 return 'bootstrap3/inputs/input.html'
46def get_textarea_value(schema):
47 if isinstance(schema, Array):
48 return "[ ]"
49 elif isinstance(schema, Object):
50 return "{ }"
51 return ""
54def get_attrs(schema):
55 if isinstance(schema, Array):
56 # TODO: Add data-child-type and use with selects
57 return "data-empty=[] data-type='array'"
58 elif isinstance(schema, Object):
59 return "data-empty={} data-type='object'"
60 elif isinstance(schema, Integer):
61 return "data-empty=null data-type='integer' type='number' step=1"
62 elif isinstance(schema, Number):
63 return "data-empty=null data-type='number' type='number' step=any"
64 elif isinstance(schema, Boolean):
65 return "data-empty=false data-type='boolean'"
66 elif isinstance(schema, Enum):
67 # TODO: Non-string Enum
68 return "data-empty='' data-type='string'"
69 # String:
70 if schema.format:
71 # TODO: Only include valid HTML5 formats.
72 # Coerce datetime to datetime-local.
73 return "data-empty='' data-type='string' type='%s'" % schema.format
74 return "data-empty='' data-type='string'"