Ejemplo n.º 1
0
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))
Ejemplo n.º 2
0
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))
Ejemplo n.º 3
0
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")
Ejemplo n.º 4
0
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")