def register_custom_types(): """Extend TYPE_REGISTRY with the declarations from bungeni_custom/types.xml. This is called prior to loading of the workflows for these custom types. Returns (type_key, TI) for the newly created TI instance. """ def parse_elem(type_elem): type_key = misc.xml_attr_str(type_elem, "name") workflow_key = misc.xml_attr_str(type_elem, "workflow", default=type_key) archetype_key = type_elem.tag # !+archetype? move to types? return type_key, workflow_key, archetype_key def enabled_elems(elems): for elem in elems: if misc.xml_attr_bool(elem, "enabled", default=True): yield elem # load XML file etypes = etree.fromstring(misc.read_file(capi.get_path_for("types.xml"))) # register enabled types - ignoring not enabled types from bungeni.alchemist import type_info for edoc in enabled_elems(etypes.iterchildren("doc")): type_key, ti = type_info.register_new_custom_type(*parse_elem(edoc)) # group/member types for egroup in enabled_elems(etypes.iterchildren("group")): type_key, ti = type_info.register_new_custom_type(*parse_elem(egroup)) for emember in enabled_elems(egroup.iterchildren("member")): type_key, ti = type_info.register_new_custom_type( *parse_elem(emember))
def register_custom_types(): """Extend TYPE_REGISTRY with the declarations from bungeni_custom/types.xml. This is called prior to loading of the workflows for these custom types. Returns (type_key, TI) for the newly created TI instance. """ def parse_elem(type_elem): type_key = misc.xml_attr_str(type_elem, "name") workflow_key = misc.xml_attr_str(type_elem, "workflow", default=type_key) archetype_key = type_elem.tag # !+archetype? move to types? return type_key, workflow_key, archetype_key def enabled_elems(elems): for elem in elems: if misc.xml_attr_bool(elem, "enabled", default=True): yield elem # load XML file etypes = etree.fromstring(misc.read_file(capi.get_path_for("types.xml"))) # register enabled types - ignoring not enabled types from bungeni.alchemist import type_info for edoc in enabled_elems(etypes.iterchildren("doc")): type_key, ti = type_info.register_new_custom_type(*parse_elem(edoc)) # group/member types for egroup in enabled_elems(etypes.iterchildren("group")): type_key, ti = type_info.register_new_custom_type(*parse_elem(egroup)) for emember in enabled_elems(egroup.iterchildren("member")): type_key, ti = type_info.register_new_custom_type(*parse_elem(emember))
def register_custom_types(): """Extend TYPE_REGISTRY with the declarations from bungeni_custom/types.xml. This is called prior to loading of the workflows for these custom types. Returns (type_key, TI) for the newly created TI instance. """ xas, xab = misc.xml_attr_str, misc.xml_attr_bool tag_archetype_key_mapping = { "doc": "doc", "event": "event", "group": "group", "member": "group_member" } def parse_elem(type_elem): type_key = xas(type_elem, "name") workflow_key = xas(type_elem, "workflow") descriptor_key = xas(type_elem, "descriptor") sys_archetype_key = tag_archetype_key_mapping[type_elem.tag] custom_archetype_key = xas(type_elem, "archetype") label = xas(type_elem, "label", None) container_label = xas(type_elem, "container_label", None) return (type_key, sys_archetype_key, custom_archetype_key, workflow_key, descriptor_key, label, container_label) def enabled_elems(elems): for elem in elems: if xab(elem, "enabled", default=True): yield elem # load types.xml file_path = capi.get_path_for("types.xml") etypes = capi.schema.validate_file_rng("types", file_path) # register enabled types - ignoring not enabled types from bungeni.alchemist import type_info # custom "event" types (must be loaded prior to custom "doc" types) for etype in enabled_elems(etypes.iterchildren("event")): type_key, ti = type_info.register_new_custom_type(*parse_elem(etype)) # custom "doc" types for etype in enabled_elems(etypes.iterchildren("doc")): type_key, ti = type_info.register_new_custom_type(*parse_elem(etype)) # group/member types for egroup in enabled_elems(etypes.iterchildren("group")): group_type_key, ti = type_info.register_new_custom_type(*parse_elem(egroup)) ti.domain_model.privilege_extent = xas(egroup, "privilege_extent", "group") for emember in enabled_elems(egroup.iterchildren("member")): type_key, ti = type_info.register_new_custom_type(*parse_elem(emember)) ti.within_type_key = group_type_key # SYSTEM WIDE settings (set on class attributes on capi) capi.__class__.bicameral = xab(etypes, "bicameral") capi.__class__.country_code = xas(etypes, "country_code") capi.__class__.legislature_type_key = xas(etypes, "legislature_type") capi.__class__.chamber_type_key = xas(etypes, "chamber_type") # sanity checks for tk in (capi.chamber_type_key, capi.legislature_type_key): ti = capi.get_type_info(tk) # KeyError assert ti.sys_archetype_key == "group", \ "Value %r specified for %r must be a %r" % (tk, attr, "group")
def register_custom_types(): """Extend TYPE_REGISTRY with the declarations from bungeni_custom/types.xml. This is called prior to loading of the workflows for these custom types. Returns (type_key, TI) for the newly created TI instance. """ xas, xab = misc.xml_attr_str, misc.xml_attr_bool tag_archetype_key_mapping = { "doc": "doc", "event": "event", "group": "group", "member": "group_member" } def parse_elem(type_elem): type_key = xas(type_elem, "name") workflow_key = xas(type_elem, "workflow") descriptor_key = xas(type_elem, "descriptor") sys_archetype_key = tag_archetype_key_mapping[type_elem.tag] custom_archetype_key = xas(type_elem, "archetype") label = xas(type_elem, "label", None) container_label = xas(type_elem, "container_label", None) return (type_key, sys_archetype_key, custom_archetype_key, workflow_key, descriptor_key, label, container_label) def enabled_elems(elems): for elem in elems: if xab(elem, "enabled", default=True): yield elem # load types.xml file_path = capi.get_path_for("types.xml") etypes = capi.schema.validate_file_rng("types", file_path) # register enabled types - ignoring not enabled types from bungeni.alchemist import type_info # custom "event" types (must be loaded prior to custom "doc" types) for etype in enabled_elems(etypes.iterchildren("event")): type_key, ti = type_info.register_new_custom_type(*parse_elem(etype)) # custom "doc" types for etype in enabled_elems(etypes.iterchildren("doc")): type_key, ti = type_info.register_new_custom_type(*parse_elem(etype)) # group/member types for egroup in enabled_elems(etypes.iterchildren("group")): group_type_key, ti = type_info.register_new_custom_type( *parse_elem(egroup)) ti.domain_model.privilege_extent = xas(egroup, "privilege_extent", "group") for emember in enabled_elems(egroup.iterchildren("member")): type_key, ti = type_info.register_new_custom_type( *parse_elem(emember)) ti.within_type_key = group_type_key # SYSTEM WIDE settings (set on class attributes on capi) capi.__class__.bicameral = xab(etypes, "bicameral") capi.__class__.country_code = xas(etypes, "country_code") capi.__class__.legislature_type_key = xas(etypes, "legislature_type") capi.__class__.chamber_type_key = xas(etypes, "chamber_type") # sanity checks for tk in (capi.chamber_type_key, capi.legislature_type_key): ti = capi.get_type_info(tk) # KeyError assert ti.sys_archetype_key == "group", \ "Value %r specified for %r must be a %r" % (tk, attr, "group")