Exemple #1
0
def append_events(ip, events, filename):
    if not filename:
        ip_obj = InformationPackage.objects.get(pk=ip)
        filename = os.path.join(ip_obj.object_path,
                                ip_obj.get_events_file_path())
    generator = XMLGenerator(filepath=filename)
    template = get_event_element_spec()

    if not events:
        events = EventIP.objects.filter(linkingObjectIdentifierValue=ip)
    id_types = {}

    for id_type in ['event', 'linking_agent', 'linking_object']:
        entity = '%s_identifier_type' % id_type
        id_types[id_type] = Parameter.objects.cached('entity', entity, 'value')

    target = generator.find_element('premis')
    for event in events.iterator():
        ip = InformationPackage.objects.get(
            pk=event.linkingObjectIdentifierValue)
        objid = ip.object_identifier_value

        data = {
            "eventIdentifierType":
            id_types['event'],
            "eventIdentifierValue":
            str(event.eventIdentifierValue),
            "eventType":
            (str(event.eventType.code)
             if event.eventType.code is not None and event.eventType.code != ''
             else str(event.eventType.eventType)),
            "eventDateTime":
            str(event.eventDateTime),
            "eventDetail":
            event.eventType.eventDetail,
            "eventOutcome":
            str(event.eventOutcome),
            "eventOutcomeDetailNote":
            event.eventOutcomeDetailNote,
            "linkingAgentIdentifierType":
            id_types['linking_agent'],
            "linkingAgentIdentifierValue":
            event.linkingAgentIdentifierValue,
            "linkingAgentRole":
            event.linkingAgentRole,
            "linkingObjectIdentifierType":
            id_types['linking_object'],
            "linkingObjectIdentifierValue":
            objid,
        }

        generator.insert_from_specification(target, template, data)

    generator.write(filename)
Exemple #2
0
    def run(self, filename=None, elementToAppendTo=None, spec=None, info=None, index=None):
        if spec is None:
            spec = {}

        if info is None:
            info = {}

        generator = XMLGenerator(filepath=filename)
        target = generator.find_element(elementToAppendTo)
        generator.insert_from_specification(target, spec, data=info, index=index)
        generator.write(filename)
Exemple #3
0
    def run(self):
        ip = self.get_information_package()
        info = {
            'FIDType': "UUID",
            'FID': ip.object_identifier_value,
            'FFormatName': ip.get_container_format().upper(),
            'FLocationType': 'URI',
            'FName': ip.object_path,
        }
        spec = get_premis_ip_object_element_spec()
        info = fill_specification_data(info, ip=ip)
        xmlfile = os.path.join(ip.object_path, ip.get_events_file_path())

        generator = XMLGenerator(filepath=xmlfile)
        target = generator.find_element('premis')
        generator.insert_from_specification(target, spec, data=info, index=0)
        generator.write(xmlfile)
Exemple #4
0
def InsertXML(self, filename=None, elementToAppendTo=None, spec=None, info=None, index=None):
    """
    Inserts XML to the specifed file
    """
    if spec is None:
        spec = {}

    if info is None:
        info = {}

    generator = XMLGenerator(filepath=filename)
    target = generator.find_element(elementToAppendTo)
    generator.insert_from_specification(target, spec, data=info, index=index)
    generator.write(filename)

    msg = "Inserted XML to element %s in %s" % (elementToAppendTo, filename)
    self.create_success_event(msg)