示例#1
0
def objectToPremisEventXML(eventObject):
    """
    Event Django Object -> XML
    """

    eventXML = etree.Element("%sevent" % PREMIS, nsmap=PREMIS_NSMAP)
    for fieldName, chain in translateDict.iteritems():
        if not hasattr(eventObject, fieldName):
            continue
        baseName = chain[0]
        baseNode = getNodeByName(eventXML, baseName)
        chain = chain[1:]
        if baseNode is None:
            baseNode = etree.SubElement(eventXML, PREMIS + baseName)
        for i in range(len(chain)):
            chainItem = chain[i]
            parentNode = baseNode
            baseNode = getNodeByName(eventXML, chainItem)
            if baseNode is None:
                baseNode = etree.SubElement(parentNode, PREMIS + chainItem)
        try:
            baseNode.text = getattr(eventObject, fieldName)
        except TypeError, t:
            value = getattr(eventObject, fieldName)
            if type(value) == datetime:
                baseNode.text = value.strftime(dateFormat)
示例#2
0
def test_getNodeByName_raises_exception_without_name_param():
    """
    Check that an exception is raised if the element name is not
    passed to the function.
    """
    with pytest.raises(Exception) as e:
        bagatom.getNodeByName('node', None)

    assert 'Unspecified name to find node for.' == str(e.value)
示例#3
0
def test_getNodeByName_raises_exception_without_node_param():
    """
    Check that an exception is raised if the node is not passed
    to the function.
    """
    with pytest.raises(Exception) as e:
        bagatom.getNodeByName(None, 'element')

    assert 'Cannot search for a child' in str(e.value)
def objectToPremisEventXML(eventObject):
    """
    Event Django Object -> XML
    """

    eventXML = etree.Element("%sevent" % PREMIS, nsmap=PREMIS_NSMAP)
    for fieldName, chain in translateDict.iteritems():
        if not hasattr(eventObject, fieldName):
            continue
        baseName = chain[0]
        baseNode = getNodeByName(eventXML, baseName)
        chain = chain[1:]
        if baseNode is None:
            baseNode = etree.SubElement(eventXML, PREMIS + baseName)
        for i in range(len(chain)):
            chainItem = chain[i]
            parentNode = baseNode
            baseNode = getNodeByName(eventXML, chainItem)
            if baseNode is None:
                baseNode = etree.SubElement(parentNode, PREMIS + chainItem)
        try:
            baseNode.text = getattr(eventObject, fieldName)
        except TypeError:
            value = getattr(eventObject, fieldName)
            if isinstance(value, datetime):
                if value.tzinfo is None:
                    value = localize_datetime(value)
                baseNode.text = xsDateTime_format(value)
    linking_objects = eventObject.linking_objects.all()
    for linking_object in linking_objects:
        linkObjectIDXML = etree.SubElement(
            eventXML, PREMIS + "linkingObjectIdentifier"
        )
        linkObjectIDTypeXML = etree.SubElement(
            linkObjectIDXML, PREMIS + "linkingObjectIdentifierType"
        )
        linkObjectIDTypeXML.text = linking_object.object_type
        linkObjectIDValueXML = etree.SubElement(
            linkObjectIDXML, PREMIS + "linkingObjectIdentifierValue"
        )
        linkObjectIDValueXML.text = linking_object.object_identifier
        linkObjectIDRoleXML = etree.SubElement(
            linkObjectIDXML, PREMIS + "linkingObjectRole"
        )
        linkObjectIDRoleXML.text = linking_object.object_role
    return eventXML
示例#5
0
def doSimpleXMLAssignment(recordObject, fieldName, node, chain):
    """
    """

    if type(chain) != type([]) and type(chain) != type(()):
        chain = [chain]
    currentNode = getNodeByName(node, chain[0])
    chain = chain[1:]
    for i in range(len(chain)):
        chainItem = chain[i]
        currentNode = getNodeByName(currentNode, chainItem)
    if currentNode is not None and currentNode.text:
        value = currentNode.text.strip()
    else:
        value = None
    if value:
        setattr(recordObject, fieldName, value)
示例#6
0
def test_getNodeByName_returns_None(note_xml):
    """
    Verify getNodeByName returns None when the desired element does
    not exist in the tree.
    """
    root = etree.fromstring(note_xml)
    node = bagatom.getNodeByName(root, 'entry')
    assert node is None
示例#7
0
def test_getNodeByName_returns_node(note_xml):
    """
    Check that getNodeByName returns an etree._Element and that
    the returned element matches the root child element.
    """
    root = etree.fromstring(note_xml)
    to_node = root.getchildren()[0]
    node = bagatom.getNodeByName(root, 'to')

    assert isinstance(node, etree._Element)
    assert node is to_node