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

1from coreschema import Object, Array, String, Integer, Number, Boolean, Enum 

2import jinja2 

3 

4 

5env = jinja2.Environment(loader=jinja2.PackageLoader('coreschema', 'templates')) 

6 

7 

8# TODO: required 

9# TODO: initial values, errors, input control 

10 

11 

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 }) 

20 

21 

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' 

44 

45 

46def get_textarea_value(schema): 

47 if isinstance(schema, Array): 

48 return "[ ]" 

49 elif isinstance(schema, Object): 

50 return "{ }" 

51 return "" 

52 

53 

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'"