11from copy import deepcopy
2- from typing import Optional
32
4- from . import widgets
53from jsonschema .validators import validator_for
6-
7-
8- # TODO
9- def compute_defaults (schema ):
10- if "default" in schema :
11- return schema ["default" ]
12-
13- schema_type = schema ["type" ]
14-
15- if schema_type == "object" :
16- return {k : compute_defaults (s ) for k , s in schema ["properties" ].items ()}
17- elif schema_type == "array" :
18- items_schema = schema ['items' ]
19- if isinstance (items_schema , dict ):
20- return []
21- return [compute_defaults (s ) for s in schema ["items" ]]
22-
23- return None
4+ \
5+ from . import widgets
6+ from .defaults import compute_defaults
247
258
269def get_widget_state (schema , state = None ):
@@ -35,13 +18,14 @@ def get_schema_type(schema: dict) -> str:
3518
3619class WidgetBuilder :
3720 default_widget_map = {
38- "boolean" : {"checkbox" : widgets .CheckboxWidget },
39- "object" : {"object" : widgets .ObjectWidget },
40- "number" : {"spin" : widgets .SpinDoubleWidget , "text" : widgets .TextWidget },
21+ "boolean" : {"checkbox" : widgets .CheckboxWidget , "enum" : widgets . EnumWidget },
22+ "object" : {"object" : widgets .ObjectWidget , "enum" : widgets . EnumWidget },
23+ "number" : {"spin" : widgets .SpinDoubleWidget , "text" : widgets .TextWidget , "enum" : widgets . EnumWidget },
4124 "string" : {"textarea" : widgets .TextAreaWidget , "text" : widgets .TextWidget , "password" : widgets .PasswordWidget ,
42- "filepath" : widgets .FilepathWidget , "colour" : widgets .ColorWidget },
43- "integer" : {"spin" : widgets .SpinWidget , "text" : widgets .TextWidget , "range" : widgets .IntegerRangeWidget },
44- "array" : {"array" : widgets .ArrayWidget }
25+ "filepath" : widgets .FilepathWidget , "colour" : widgets .ColorWidget , "enum" : widgets .EnumWidget },
26+ "integer" : {"spin" : widgets .SpinWidget , "text" : widgets .TextWidget , "range" : widgets .IntegerRangeWidget ,
27+ "enum" : widgets .EnumWidget },
28+ "array" : {"array" : widgets .ArrayWidget , "enum" : widgets .EnumWidget }
4529 }
4630
4731 default_widget_variants = {
@@ -86,6 +70,9 @@ def create_widget(self, schema: dict, ui_schema: dict, state=None) -> widgets.Wi
8670 except KeyError :
8771 default_variant = self .default_widget_variants [schema_type ]
8872
73+ if "enum" in schema :
74+ default_variant = "enum"
75+
8976 widget_variant = ui_schema .get ('ui:widget' , default_variant )
9077 widget_cls = self .widget_map [schema_type ][widget_variant ]
9178
0 commit comments