def new_descriptor_fields(edescriptor): """(Re-)build (in desired order) all fields from newly loaded descriptor configuration. # !+ what about "removed" fields from a sys-descriptor config? """ type_key = xas(edescriptor, "name") fields = [] for f_elem in edescriptor.findall("field"): name = xas(f_elem, "name") # custom_localizable_directives clocs = [] for cloc_elem in f_elem.getchildren(): modes = xas(cloc_elem, "modes") roles = capi.schema.qualified_roles( xas(cloc_elem, "roles", ROLES_DEFAULT)) tag = cloc_elem.tag if tag == "show": clocs.append(show(modes=modes, roles=roles)) elif tag == "hide": clocs.append(hide(modes=modes, roles=roles)) elif isinstance(tag, basestring): raise ValueError( "Unknown directive %r in field %r in descriptor %r" % (cloc_elem.tag, name, type_key)) else: pass # xml comment, ... fields.append( field.F( name=name, label=xas(f_elem, "label"), description=xas(f_elem, "description"), required=xab(f_elem, "required"), localizable=clocs, value_type=xas(f_elem, "value_type"), render_type=xas(f_elem, "render_type"), vocabulary=xas(f_elem, "vocabulary"), extended=xas(f_elem, "extended"), derived=xas(f_elem, "derived"), )) return fields
def new_descriptor_fields(edescriptor): """(Re-)build (in desired order) all fields from newly loaded descriptor configuration. # !+ what about "removed" fields from a sys-descriptor config? """ type_key = xas(edescriptor, "name") fields = [] for f_elem in edescriptor.findall("field"): name = xas(f_elem, "name") # custom_localizable_directives clocs = [] for cloc_elem in f_elem.getchildren(): modes = xas(cloc_elem, "modes") roles = capi.schema.qualified_roles(xas(cloc_elem, "roles", ROLES_DEFAULT).split()) tag = cloc_elem.tag if tag == "show": clocs.append(show(modes=modes, roles=roles)) elif tag == "hide": clocs.append(hide(modes=modes, roles=roles)) elif isinstance(tag, basestring): raise ValueError( "Unknown directive %r in field %r in descriptor %r" % ( cloc_elem.tag, name, type_key)) else: pass # xml comment, ... fields.append(field.F( name=name, label=xas(f_elem, "label"), description=xas(f_elem, "description"), required=xab(f_elem, "required"), localizable=clocs, value_type=xas(f_elem, "value_type"), render_type=xas(f_elem, "render_type"), vocabulary=xas(f_elem, "vocabulary"), extended=xas(f_elem, "extended"), derived=xas(f_elem, "derived"), )) return fields