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)
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)
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
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)
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
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