Example #1
0
def add2group(groupcsid, list_of_objects, http_parms):

    uri = 'relations'

    if len(list_of_objects) == 0:
        return ['no objects added to the group.']

    messages = []
    seen = {}
    duplicates = {}

    for object in list_of_objects:
        # messages.append("posting group2obj to relations REST API...")

        if object in seen:
            # it's a duplicate, skip it
            duplicates[object] = True
            messages.append('duplicate item %s not added again' % object)
            continue
        else:
            seen[object] = True

        # "urn:cspace:institution.cspace.berkeley.edu:group:id(%s)" % groupCSID
        groupElements = {}
        groupElements['objectDocumentType'] = 'CollectionObject'
        groupElements['subjectDocumentType'] = 'Group'
        groupElements['objectCsid'] = object
        groupElements['subjectCsid'] = groupcsid

        payload = relationsPayload(groupElements)
        (url, data, csid, elapsedtime) = postxml('POST', uri, http_parms.realm,
                                                 http_parms.server,
                                                 http_parms.username,
                                                 http_parms.password, payload)
        # elapsedtimetotal += elapsedtime
        # messages.append('got relation csid %s elapsedtime %s ' % (csid, elapsedtime))
        groupElements['group2objCSID'] = csid
        # messages.append("relations REST API post succeeded...")

        # reverse the roles
        # messages.append("posting obj2group to relations REST API...")
        temp = groupElements['objectCsid']
        groupElements['objectCsid'] = groupElements['subjectCsid']
        groupElements['subjectCsid'] = temp
        groupElements['objectDocumentType'] = 'Group'
        groupElements['subjectDocumentType'] = 'CollectionObject'
        payload = relationsPayload(groupElements)
        (url, data, csid, elapsedtime) = postxml('POST', uri, http_parms.realm,
                                                 http_parms.server,
                                                 http_parms.username,
                                                 http_parms.password, payload)

        # elapsedtimetotal += elapsedtime
        # messages.append('got relation csid %s elapsedtime %s ' % (csid, elapsedtime))
        groupElements['obj2groupCSID'] = csid
        # messages.append("relations REST API post succeeded...")

    messages.append('%s item(s) added to group' % len(list_of_objects))
    return messages
Example #2
0
def linkmedia(mediaElements, config, http_parms):

    messages = []
    objectCSID = mediaElements['objectCSID']
    mediaCSID = mediaElements['mediaCSID']
    uri = 'relations'

    #messages.append("posting media2obj to relations REST API...")
    mediaElements['objectCsid'] = objectCSID
    mediaElements['subjectCsid'] = mediaCSID
    # "urn:cspace:institution.cspace.berkeley.edu:media:id(%s)" % mediaCSID

    mediaElements['objectDocumentType'] = 'CollectionObject'
    mediaElements['subjectDocumentType'] = 'Media'

    payload = relationsPayload(mediaElements)
    (url, data, csid,
     elapsedtime1) = postxml('POST', uri, http_parms.realm, http_parms.server,
                             http_parms.username, http_parms.password, payload)
    # elapsedtimetotal += elapsedtime
    #messages.append('relation media2obj csid %s elapsedtime %s ' % (csid, elapsedtime))
    mediaElements['media2objCSID'] = csid
    #messages.append("relations REST API post succeeded...")

    # reverse the roles
    #messages.append("posting obj2media to relations REST API...")
    temp = mediaElements['objectCsid']
    mediaElements['objectCsid'] = mediaElements['subjectCsid']
    mediaElements['subjectCsid'] = temp
    mediaElements['objectDocumentType'] = 'Media'
    mediaElements['subjectDocumentType'] = 'CollectionObject'
    payload = relationsPayload(mediaElements)
    (url, data, csid,
     elapsedtime2) = postxml('POST', uri, http_parms.realm, http_parms.server,
                             http_parms.username, http_parms.password, payload)
    #messages.append('relation obj2media csid %s elapsedtime %s ' % (csid, elapsedtime))
    mediaElements['obj2mediaCSID'] = csid
    messages.append(
        "REST API post for two relations succeeded, elapsedtime %8.2f s." %
        (elapsedtime1 + elapsedtime2))
    for m in messages:
        print("   %s" % m)
    return mediaElements
Example #3
0
def create_group(grouptitle, http_parms):
    payload = """
        <document name="groups">
            <ns2:groups_common xmlns:ns2="http://collectionspace.org/services/group" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
                <title>%s</title>
            </ns2:groups_common>
        </document>
        """ % grouptitle

    (url, data, csid,
     elapsedtime) = postxml('POST', 'groups', http_parms.realm,
                            http_parms.server, http_parms.username,
                            http_parms.password, payload)
    return csid
Example #4
0
def uploadmedia(mediaElements, config, http_parms):

    if 'blobCSID' in mediaElements:

        uri = 'media'
        xobjectCSID = ''

        messages = []
        #messages.append("posting to media REST API...")
        payload = makePayload(media_payload, mediaElements,
                              http_parms.institution)
        (url, data, mediaCSID,
         elapsedtime) = postxml('POST', uri, http_parms.realm,
                                http_parms.server, http_parms.username,
                                http_parms.password, payload)
        messages.append('mediacsid %s elapsedtime %8.2f s.' %
                        (mediaCSID, elapsedtime))
        mediaElements['mediaCSID'] = mediaCSID

        # create a 'skeletal' accession (object) record if requested
        if mediaElements['handling'] == 'media+create+accession':
            payload = makePayload(object_payload, mediaElements,
                                  http_parms.institution)
            try:
                (url, data, xobjectCSID,
                 elapsedtime) = postxml('POST', 'collectionobjects',
                                        http_parms.realm, http_parms.server,
                                        http_parms.username,
                                        http_parms.password, payload)
            except:
                messages.append(
                    "Failed to create skeletal object record for %s." %
                    mediaElements['objectnumber'])
        else:
            pass

        # are we supposed to try to link this media record to a collectionobject?
        if mediaElements['handling'] in 'slide borndigital mediaonly'.split(
                ' '):
            mediaElements['objectCSID'] = 'N/A: %s' % mediaElements['handling']
        else:
            # try to relate media record to collection object if needed
            if mediaElements['handling'] == 'media+create+accession':
                objectCSID = xobjectCSID
            else:
                objectCSID = getCSID('objectnumber',
                                     mediaElements['objectnumber'], config)
            if objectCSID == [] or objectCSID is None:
                messages.append(
                    "could not get (i.e. find) objectnumber's csid: %s." %
                    mediaElements['objectnumber'])
                mediaElements['objectCSID'] = 'not found'
                # raise Exception("<span style='color:red'>Object Number not found: %s!</span>" % mediaElements['objectnumber'])
            else:
                mediaElements['objectCSID'] = objectCSID
                uri = 'relations'

                #messages.append("posting media2obj to relations REST API...")
                mediaElements['objectCsid'] = objectCSID
                mediaElements['subjectCsid'] = mediaCSID
                # "urn:cspace:institution.cspace.berkeley.edu:media:id(%s)" % mediaCSID

                mediaElements['objectDocumentType'] = 'CollectionObject'
                mediaElements['subjectDocumentType'] = 'Media'

                payload = relationsPayload(mediaElements)
                (url, data, csid, elapsedtime1) = postxml(
                    'POST', uri, http_parms.realm, http_parms.server,
                    http_parms.username, http_parms.password, payload)
                # elapsedtimetotal += elapsedtime
                #messages.append('relation media2obj csid %s elapsedtime %s ' % (csid, elapsedtime))
                mediaElements['media2objCSID'] = csid
                #messages.append("relations REST API post succeeded...")

                # reverse the roles
                #messages.append("posting obj2media to relations REST API...")
                temp = mediaElements['objectCsid']
                mediaElements['objectCsid'] = mediaElements['subjectCsid']
                mediaElements['subjectCsid'] = temp
                mediaElements['objectDocumentType'] = 'Media'
                mediaElements['subjectDocumentType'] = 'CollectionObject'
                payload = relationsPayload(mediaElements)
                (url, data, csid, elapsedtime2) = postxml(
                    'POST', uri, http_parms.realm, http_parms.server,
                    http_parms.username, http_parms.password, payload)
                #messages.append('relation obj2media csid %s elapsedtime %s ' % (csid, elapsedtime))
                mediaElements['obj2mediaCSID'] = csid
                messages.append(
                    "REST API post for two relations succeeded, elapsedtime %8.2f s."
                    % (elapsedtime1 + elapsedtime2))
        for m in messages:
            print("   %s" % m)
    return mediaElements
Example #5
0
                    pass
                    # postxml('POST', 'batch/563d0999-d29e-4888-b58d', http_parms.realm, http_parms.server, http_parms.username, http_parms.password, primary_payload)
                except:
                    print("batch job to set primary image failed.")

            outputfh.writerow(r)
        except:
            print("%s" % traceback.format_exc())
            print(
                "MEDIA: create failed for blob or media. objectnumber %s, %8.2f s."
                % (mediaElements['objectnumber'],
                   (time.time() - elapsedtimetotal)))
            # delete the blob if we did not manage to make a media record for it...
            try:
                (url, data, deletedCSID, elapsedtime) = postxml(
                    'DELETE', 'blobs/%s' % mediaElements['blobCSID'],
                    http_parms.realm, http_parms.server, http_parms.username,
                    http_parms.password, '')
                print("MEDIA: deleted blob %s" % mediaElements['blobCSID'])
            except:
                try:
                    print("MEDIA: failed to delete blob %s" %
                          mediaElements['blobCSID'])
                except:
                    pass

    # make a group, if asked
    if group_title != '':

        if len(objectCSIDs) > 0:
            groupCSID = create_group(group_title, http_parms)
            add2group(groupCSID, objectCSIDs, http_parms)
def uploadmedia(mediaElements, config, http_parms):

    if "blobCSID" in mediaElements:

        uri = "media"

        messages = []
        messages.append("posting to media REST API...")
        # print updateItems
        payload = mediaPayload(mediaElements, http_parms.institution)
        messages.append(payload)
        (url, data, mediaCSID, elapsedtime) = postxml(
            "POST", uri, http_parms.realm, http_parms.hostname, http_parms.username, http_parms.password, payload
        )
        # elapsedtimetotal += elapsedtime
        messages.append("got mediacsid %s elapsedtime %s " % (mediaCSID, elapsedtime))
        mediaElements["mediaCSID"] = mediaCSID
        messages.append("media REST API post succeeded...")

        # for PAHMA, each uploaded image becomes the primary
        if http_parms.institution == "pahma":
            primary_payload = (
                """<?xml version="1.0" encoding="utf-8" standalone="yes"?>
            <ns2:invocationContext xmlns:ns2="http://collectionspace.org/services/common/invocable"
            <mode>single</mode>
            <docType>"""
                + mediaCSID
                + """</docType>
            <singleCSID></singleCSID>
            </ns2:invocationContext>
            """
            )

            try:
                postxml(
                    "POST",
                    "batch/57c6de27-4f1e-48d3-a661",
                    http_parms.realm,
                    http_parms.hostname,
                    http_parms.username,
                    http_parms.password,
                    primary_payload,
                )
            except:
                print "batch job to set primary image failed."

        else:
            pass

        # are we supposed to try to link this media record to a collectionobject?
        if mediaElements["handling"] in "slide borndigital mediaonly".split(" "):
            mediaElements["objectCSID"] = "N/A: %s" % mediaElements["handling"]
        else:
            # try to relate media record to collection object if needed
            objectCSID = getCSID("objectnumber", mediaElements["objectnumber"], config)
            if objectCSID == [] or objectCSID is None:
                print "could not get (i.e. find) objectnumber's csid: %s." % mediaElements["objectnumber"]
                mediaElements["objectCSID"] = ""
                # raise Exception("<span style='color:red'>Object Number not found: %s!</span>" % mediaElements['objectnumber'])
                raise
            else:
                objectCSID = objectCSID[0]
                mediaElements["objectCSID"] = objectCSID

            uri = "relations"

            messages.append("posting media2obj to relations REST API...")

            mediaElements["objectCsid"] = objectCSID
            mediaElements["subjectCsid"] = mediaCSID
            # "urn:cspace:institution.cspace.berkeley.edu:media:id(%s)" % mediaCSID

            mediaElements["objectDocumentType"] = "CollectionObject"
            mediaElements["subjectDocumentType"] = "Media"

            payload = relationsPayload(mediaElements)
            (url, data, csid, elapsedtime) = postxml(
                "POST", uri, http_parms.realm, http_parms.hostname, http_parms.username, http_parms.password, payload
            )
            # elapsedtimetotal += elapsedtime
            messages.append("got relation csid %s elapsedtime %s " % (csid, elapsedtime))
            mediaElements["media2objCSID"] = csid
            messages.append("relations REST API post succeeded...")

            # reverse the roles
            messages.append("posting obj2media to relations REST API...")
            temp = mediaElements["objectCsid"]
            mediaElements["objectCsid"] = mediaElements["subjectCsid"]
            mediaElements["subjectCsid"] = temp
            mediaElements["objectDocumentType"] = "Media"
            mediaElements["subjectDocumentType"] = "CollectionObject"
            payload = relationsPayload(mediaElements)
            (url, data, csid, elapsedtime) = postxml(
                "POST", uri, http_parms.realm, http_parms.hostname, http_parms.username, http_parms.password, payload
            )
            # elapsedtimetotal += elapsedtime
            messages.append("got relation csid %s elapsedtime %s " % (csid, elapsedtime))
            mediaElements["obj2mediaCSID"] = csid
            messages.append("relations REST API post succeeded...")

    return mediaElements
def uploadmedia(mediaElements, config):
    try:
        realm = config.get('connect', 'realm')
        hostname = config.get('connect', 'hostname')
        username = config.get('connect', 'username')
        password = config.get('connect', 'password')
        institution = config.get('info', 'institution')
        alwayscreatemedia = config.get('info', 'alwayscreatemedia')
        alwayscreatemedia = True if alwayscreatemedia.lower() == 'true' else False
    except:
        print "could not get at least one of realm, hostname, username, password or institution from config file."
        # print "can't continue, exiting..."
        raise

    # for ucjeps
    if mediaElements['handling'] == 'slide':
        for extra in 'imagetype copyright source'.split(' '):
            try:
                mediaElements[extra] = config.get('info', extra)
            except:
                mediaElements[extra] = ''

    objectCSID = getCSID('objectnumber', mediaElements['objectnumber'], config)
    if objectCSID == [] or objectCSID is None:
        print "could not get (i.e. find) objectnumber's csid: %s." % mediaElements['objectnumber']
        mediaElements['objectCSID'] = ''
        # raise Exception("<span style='color:red'>Object Number not found: %s!</span>" % mediaElements['objectnumber'])
        # raise
    else:
        objectCSID = objectCSID[0]
        mediaElements['objectCSID'] = objectCSID

    if alwayscreatemedia or objectCSID is not None:

        updateItems = {'objectStatus': 'found',
                       'subjectCsid': '',
                       'objectCsid': mediaElements['objectCSID'],
                       'objectNumber': mediaElements['objectnumber'],
                       'imageNumber': mediaElements['imagenumber'],
                       'blobCsid': mediaElements['blobCSID'],
                       'name': mediaElements['name'],
                       'rightsHolderRefname': mediaElements['rightsholder'],
                       'contributor': mediaElements['contributor'],
                       'creator': mediaElements['creator'],
                       'mediaDate': mediaElements['mediaDate'],
                       'imageType': mediaElements['imagetype'],
                       'copyrightStatement': mediaElements['copyrightstatement'],
                       'source': mediaElements['source'],
        }

        uri = 'media'

        messages = []
        messages.append("posting to media REST API...")
        # print updateItems
        payload = mediaPayload(updateItems, institution)
        messages.append(payload)
        (url, data, mediaCSID, elapsedtime) = postxml('POST', uri, realm, hostname, username, password, payload)
        # elapsedtimetotal += elapsedtime
        messages.append('got mediacsid %s elapsedtime %s ' % (mediaCSID, elapsedtime))
        mediaElements['mediaCSID'] = mediaCSID
        messages.append("media REST API post succeeded...")

        # for PAHMA, each uploaded image becomes the primary
        if institution == 'pahma':
            primary_payload = """<?xml version="1.0" encoding="utf-8" standalone="yes"?>
            <ns2:invocationContext xmlns:ns2="http://collectionspace.org/services/common/invocable"
            <mode>single</mode>
            <docType>""" + mediaCSID + """</docType>
            <singleCSID></singleCSID>
            </ns2:invocationContext>
            """
            postxml('POST', 'batch/57c6de27-4f1e-48d3-a661', realm, hostname, username, password, primary_payload)
        else:
            pass

    # what about mediaElements['handling']?
    if objectCSID is not None:
        # now relate media record to collection object

        uri = 'relations'

        messages.append("posting media2obj to relations REST API...")

        updateItems['objectCsid'] = objectCSID
        updateItems['subjectCsid'] = mediaCSID
        # "urn:cspace:institution.cspace.berkeley.edu:media:id(%s)" % mediaCSID

        updateItems['objectDocumentType'] = 'CollectionObject'
        updateItems['subjectDocumentType'] = 'Media'

        payload = relationsPayload(updateItems)
        (url, data, csid, elapsedtime) = postxml('POST', uri, realm, hostname, username, password, payload)
        #elapsedtimetotal += elapsedtime
        messages.append('got relation csid %s elapsedtime %s ' % (csid, elapsedtime))
        mediaElements['media2objCSID'] = csid
        messages.append("relations REST API post succeeded...")

        # reverse the roles
        messages.append("posting obj2media to relations REST API...")
        temp = updateItems['objectCsid']
        updateItems['objectCsid'] = updateItems['subjectCsid']
        updateItems['subjectCsid'] = temp
        updateItems['objectDocumentType'] = 'Media'
        updateItems['subjectDocumentType'] = 'CollectionObject'
        payload = relationsPayload(updateItems)
        (url, data, csid, elapsedtime) = postxml('POST', uri, realm, hostname, username, password, payload)
        #elapsedtimetotal += elapsedtime
        messages.append('got relation csid %s elapsedtime %s ' % (csid, elapsedtime))
        mediaElements['obj2mediaCSID'] = csid
        messages.append("relations REST API post succeeded...")

    return mediaElements
Example #8
0
def uploadmedia(mediaElements, config, http_parms):

    if 'blobCSID' in mediaElements:

        uri = 'media'

        messages = []
        messages.append("posting to media REST API...")
        payload = mediaPayload(mediaElements, http_parms.institution)
        messages.append(payload)
        (url, data, mediaCSID, elapsedtime) = postxml('POST', uri, http_parms.realm, http_parms.hostname, http_parms.username, http_parms.password, payload)
        # elapsedtimetotal += elapsedtime
        messages.append('got mediacsid %s elapsedtime %s ' % (mediaCSID, elapsedtime))
        mediaElements['mediaCSID'] = mediaCSID
        messages.append("media REST API post succeeded...")

        # for PAHMA, each uploaded image becomes the primary
        if http_parms.institution == 'pahma':
            primary_payload = """<?xml version="1.0" encoding="utf-8" standalone="yes"?>
            <ns2:invocationContext xmlns:ns2="http://collectionspace.org/services/common/invocable"
            <mode>single</mode>
            <docType>""" + mediaCSID + """</docType>
            <singleCSID></singleCSID>
            </ns2:invocationContext>
            """

            try:
                postxml('POST', 'batch/563d0999-d29e-4888-b58d', http_parms.realm, http_parms.hostname, http_parms.username, http_parms.password, primary_payload)
            except:
                print "batch job to set primary image failed."

        else:
            pass

        # are we supposed to try to link this media record to a collectionobject?
        if mediaElements['handling'] in 'slide borndigital mediaonly'.split(' '):
            mediaElements['objectCSID'] = 'N/A: %s' % mediaElements['handling']
        else:
            # try to relate media record to collection object if needed
            objectCSID = getCSID('objectnumber', mediaElements['objectnumber'], config)
            if objectCSID == [] or objectCSID is None:
                print "could not get (i.e. find) objectnumber's csid: %s." % mediaElements['objectnumber']
                mediaElements['objectCSID'] = ''
                # raise Exception("<span style='color:red'>Object Number not found: %s!</span>" % mediaElements['objectnumber'])
            else:
                objectCSID = objectCSID[0]
                mediaElements['objectCSID'] = objectCSID

            uri = 'relations'

            messages.append("posting media2obj to relations REST API...")

            mediaElements['objectCsid'] = objectCSID
            mediaElements['subjectCsid'] = mediaCSID
            # "urn:cspace:institution.cspace.berkeley.edu:media:id(%s)" % mediaCSID

            mediaElements['objectDocumentType'] = 'CollectionObject'
            mediaElements['subjectDocumentType'] = 'Media'

            payload = relationsPayload(mediaElements)
            (url, data, csid, elapsedtime) = postxml('POST', uri, http_parms.realm, http_parms.hostname, http_parms.username, http_parms.password, payload)
            # elapsedtimetotal += elapsedtime
            messages.append('got relation csid %s elapsedtime %s ' % (csid, elapsedtime))
            mediaElements['media2objCSID'] = csid
            messages.append("relations REST API post succeeded...")

            # reverse the roles
            messages.append("posting obj2media to relations REST API...")
            temp = mediaElements['objectCsid']
            mediaElements['objectCsid'] = mediaElements['subjectCsid']
            mediaElements['subjectCsid'] = temp
            mediaElements['objectDocumentType'] = 'Media'
            mediaElements['subjectDocumentType'] = 'CollectionObject'
            payload = relationsPayload(mediaElements)
            (url, data, csid, elapsedtime) = postxml('POST', uri, http_parms.realm, http_parms.hostname, http_parms.username, http_parms.password, payload)
            #elapsedtimetotal += elapsedtime
            messages.append('got relation csid %s elapsedtime %s ' % (csid, elapsedtime))
            mediaElements['obj2mediaCSID'] = csid
            messages.append("relations REST API post succeeded...")

    return mediaElements
Example #9
0
def uploadmedia(mediaElements, config):
    try:
        realm = config.get('connect', 'realm')
        hostname = config.get('connect', 'hostname')
        username = config.get('connect', 'username')
        password = config.get('connect', 'password')
        institution = config.get('info', 'institution')
        alwayscreatemedia = config.get('info', 'alwayscreatemedia')
    except:
        print "could not get at least one of realm, hostname, username, password or institution from config file."
        # print "can't continue, exiting..."
        raise

    objectCSID = getCSID('objectnumber', mediaElements['objectnumber'], config)
    if objectCSID == [] or objectCSID is None:
        print "could not get (i.e. find) objectnumber's csid: %s." % mediaElements[
            'objectnumber']
        mediaElements['objectCSID'] = ''
        # raise Exception("<span style='color:red'>Object Number not found: %s!</span>" % mediaElements['objectnumber'])
        # raise
    else:
        objectCSID = objectCSID[0]
        mediaElements['objectCSID'] = objectCSID

    if alwayscreatemedia or objectCSID is not None:

        updateItems = {
            'objectStatus': 'found',
            'subjectCsid': '',
            'objectCsid': mediaElements['objectCSID'],
            'objectNumber': mediaElements['objectnumber'],
            'imageNumber': mediaElements['imagenumber'],
            'blobCsid': mediaElements['blobCSID'],
            'name': mediaElements['name'],
            'rightsHolderRefname': mediaElements['rightsholder'],
            'contributor': mediaElements['contributor'],
            'creator': mediaElements['creator'],
            'mediaDate': mediaElements['date'],
        }

        uri = 'media'

        messages = []
        messages.append("posting to media REST API...")
        # print updateItems
        payload = mediaPayload(updateItems, institution)
        messages.append(payload)
        (url, data, mediaCSID, elapsedtime) = postxml('POST', uri, realm,
                                                      hostname, username,
                                                      password, payload)
        # elapsedtimetotal += elapsedtime
        messages.append('got mediacsid %s elapsedtime %s ' %
                        (mediaCSID, elapsedtime))
        mediaElements['mediaCSID'] = mediaCSID
        messages.append("media REST API post succeeded...")

        # for PAHMA, each uploaded image becomes the primary
        if institution == 'pahma':
            primary_payload = """<?xml version="1.0" encoding="utf-8" standalone="yes"?>
            <ns2:invocationContext xmlns:ns2="http://collectionspace.org/services/common/invocable"
            <mode>single</mode>
            <docType>""" + mediaCSID + """</docType>
            <singleCSID></singleCSID>
            </ns2:invocationContext>
            """
            postxml('POST', 'batch/57c6de27-4f1e-48d3-a661', realm, hostname,
                    username, password, primary_payload)
        else:
            pass

    if objectCSID != '':
        # now relate media record to collection object

        uri = 'relations'

        messages.append("posting media2obj to relations REST API...")

        updateItems['objectCsid'] = objectCSID
        updateItems['subjectCsid'] = mediaCSID
        # "urn:cspace:institution.cspace.berkeley.edu:media:id(%s)" % mediaCSID

        updateItems['objectDocumentType'] = 'CollectionObject'
        updateItems['subjectDocumentType'] = 'Media'

        payload = relationsPayload(updateItems)
        (url, data, csid, elapsedtime) = postxml('POST', uri, realm, hostname,
                                                 username, password, payload)
        #elapsedtimetotal += elapsedtime
        messages.append('got relation csid %s elapsedtime %s ' %
                        (csid, elapsedtime))
        mediaElements['media2objCSID'] = csid
        messages.append("relations REST API post succeeded...")

        # reverse the roles
        messages.append("posting obj2media to relations REST API...")
        temp = updateItems['objectCsid']
        updateItems['objectCsid'] = updateItems['subjectCsid']
        updateItems['subjectCsid'] = temp
        updateItems['objectDocumentType'] = 'Media'
        updateItems['subjectDocumentType'] = 'CollectionObject'
        payload = relationsPayload(updateItems)
        (url, data, csid, elapsedtime) = postxml('POST', uri, realm, hostname,
                                                 username, password, payload)
        #elapsedtimetotal += elapsedtime
        messages.append('got relation csid %s elapsedtime %s ' %
                        (csid, elapsedtime))
        mediaElements['obj2mediaCSID'] = csid
        messages.append("relations REST API post succeeded...")

    return mediaElements
Example #10
0
def uploadmedia(mediaElements, config):
    try:
        realm = config.get('connect', 'realm')
        hostname = config.get('connect', 'hostname')
        username = config.get('connect', 'username')
        password = config.get('connect', 'password')
        INSTITUTION = config.get('info', 'institution')
    except:
        print "could not get at least one of realm, hostname, username, password or institution from config file."
        # print "can't continue, exiting..."
        raise

    objectCSID = getCSID('objectnumber', mediaElements['objectnumber'], config)
    if objectCSID == [] or objectCSID is None:
        print "could not get (i.e. find) objectnumber's csid: %s." % mediaElements['objectnumber']
        # raise Exception("<span style='color:red'>Object Number not found: %s!</span>" % mediaElements['objectnumber'])
        #raise
    else:
        objectCSID = objectCSID[0]
        mediaElements['objectCSID'] = objectCSID

        updateItems = {'objectStatus': 'found',
                       'subjectCsid': '',
                       'objectCsid': mediaElements['objectCSID'],
                       'objectNumber': mediaElements['objectnumber'],
                       'imageNumber': mediaElements['imagenumber'],
                       'blobCsid': mediaElements['blobCSID'],
                       'name': mediaElements['name'],
                       'rightsHolderRefname': mediaElements['rightsholder'],
                       'contributor': mediaElements['contributor'],
                       'creator': mediaElements['creator'],
                       'mediaDate': mediaElements['date'],
        }

        uri = 'media'

        messages = []
        messages.append("posting to media REST API...")
        # print updateItems
        payload = mediaPayload(updateItems, INSTITUTION)
        messages.append(payload)
        messages.append(payload)
        (url, data, mediaCSID, elapsedtime) = postxml('POST', uri, realm, hostname, username, password, payload)
        #elapsedtimetotal += elapsedtime
        messages.append('got mediacsid %s elapsedtime %s ' % (mediaCSID, elapsedtime))
        mediaElements['mediaCSID'] = mediaCSID
        messages.append("media REST API post succeeded...")

        # now relate media record to collection object

        uri = 'relations'

        messages.append("posting media2obj to relations REST API...")

        updateItems['objectCsid'] = objectCSID
        updateItems['subjectCsid'] = mediaCSID
        # "urn:cspace:INSTITUTION.cspace.berkeley.edu:media:id(%s)" % mediaCSID

        updateItems['objectDocumentType'] = 'CollectionObject'
        updateItems['subjectDocumentType'] = 'Media'

        payload = relationsPayload(updateItems)
        (url, data, csid, elapsedtime) = postxml('POST', uri, realm, hostname, username, password, payload)
        #elapsedtimetotal += elapsedtime
        messages.append('got relation csid %s elapsedtime %s ' % (csid, elapsedtime))
        mediaElements['media2objCSID'] = csid
        messages.append("relations REST API post succeeded...")

        # reverse the roles
        messages.append("posting obj2media to relations REST API...")
        temp = updateItems['objectCsid']
        updateItems['objectCsid'] = updateItems['subjectCsid']
        updateItems['subjectCsid'] = temp
        updateItems['objectDocumentType'] = 'Media'
        updateItems['subjectDocumentType'] = 'CollectionObject'
        payload = relationsPayload(updateItems)
        (url, data, csid, elapsedtime) = postxml('POST', uri, realm, hostname, username, password, payload)
        #elapsedtimetotal += elapsedtime
        messages.append('got relation csid %s elapsedtime %s ' % (csid, elapsedtime))
        mediaElements['obj2mediaCSID'] = csid
        messages.append("relations REST API post succeeded...")

    return mediaElements
def uploadmedia(mediaElements, config, http_parms):

    if 'blobCSID' in mediaElements:

        uri = 'media'
        xobjectCSID = ''

        messages = []
        #messages.append("posting to media REST API...")
        payload = makePayload(media_payload, mediaElements,
                              http_parms.institution)
        (url, data, mediaCSID,
         elapsedtime) = postxml('POST', uri, http_parms.realm,
                                http_parms.server, http_parms.username,
                                http_parms.password, payload)
        messages.append('mediacsid %s elapsedtime %s ' %
                        (mediaCSID, elapsedtime))
        mediaElements['mediaCSID'] = mediaCSID
        # for PAHMA, each uploaded image becomes the primary, in turn
        # i.e. the last image in a set of images for the same object becomes the primary
        if http_parms.institution == 'pahma':
            primary_payload = """<?xml version="1.0" encoding="utf-8" standalone="yes"?>
            <ns2:invocationContext xmlns:ns2="http://collectionspace.org/services/common/invocable"
            <mode>single</mode>
            <docType>""" + mediaCSID + """</docType>
            <singleCSID></singleCSID>
            </ns2:invocationContext>
            """

            try:
                # don't try to do this step for now, until we get it straightened out...
                pass
                # postxml('POST', 'batch/563d0999-d29e-4888-b58d', http_parms.realm, http_parms.server, http_parms.username, http_parms.password, primary_payload)
            except:
                print("batch job to set primary image failed.")
        # create a 'skeletal' accession (object) record if requested
        elif mediaElements['handling'] == 'media+create+accession':
            payload = makePayload(object_payload, mediaElements,
                                  http_parms.institution)
            try:
                (url, data, xobjectCSID,
                 elapsedtime) = postxml('POST', 'collectionobjects',
                                        http_parms.realm, http_parms.server,
                                        http_parms.username,
                                        http_parms.password, payload)
            except:
                print("Failed to create skeletal object record for.")

        else:
            pass

        # are we supposed to try to link this media record to a collectionobject?
        if mediaElements['handling'] in 'slide borndigital mediaonly'.split(
                ' '):
            mediaElements['objectCSID'] = 'N/A: %s' % mediaElements['handling']
        else:
            # try to relate media record to collection object if needed
            if mediaElements['handling'] == 'media+create+accession':
                objectCSID = xobjectCSID
            else:
                objectCSID = getCSID('objectnumber',
                                     mediaElements['objectnumber'], config)
                objectCSID = objectCSID[0]
            if objectCSID == [] or objectCSID is None:
                print("could not get (i.e. find) objectnumber's csid: %s." %
                      mediaElements['objectnumber'])
                mediaElements['objectCSID'] = 'not found'
                # raise Exception("<span style='color:red'>Object Number not found: %s!</span>" % mediaElements['objectnumber'])
            else:
                mediaElements['objectCSID'] = objectCSID

                uri = 'relations'

                #messages.append("posting media2obj to relations REST API...")
                mediaElements['objectCsid'] = objectCSID
                mediaElements['subjectCsid'] = mediaCSID
                # "urn:cspace:institution.cspace.berkeley.edu:media:id(%s)" % mediaCSID

                mediaElements['objectDocumentType'] = 'CollectionObject'
                mediaElements['subjectDocumentType'] = 'Media'

                payload = relationsPayload(mediaElements)
                (url, data, csid,
                 elapsedtime) = postxml('POST', uri, http_parms.realm,
                                        http_parms.server, http_parms.username,
                                        http_parms.password, payload)
                # elapsedtimetotal += elapsedtime
                messages.append('relation media2obj csid %s elapsedtime %s ' %
                                (csid, elapsedtime))
                mediaElements['media2objCSID'] = csid
                #messages.append("relations REST API post succeeded...")

                # reverse the roles
                #messages.append("posting obj2media to relations REST API...")
                temp = mediaElements['objectCsid']
                mediaElements['objectCsid'] = mediaElements['subjectCsid']
                mediaElements['subjectCsid'] = temp
                mediaElements['objectDocumentType'] = 'Media'
                mediaElements['subjectDocumentType'] = 'CollectionObject'
                payload = relationsPayload(mediaElements)
                (url, data, csid,
                 elapsedtime) = postxml('POST', uri, http_parms.realm,
                                        http_parms.server, http_parms.username,
                                        http_parms.password, payload)
                messages.append('relation obj2media csid %s elapsedtime %s ' %
                                (csid, elapsedtime))
                mediaElements['obj2mediaCSID'] = csid
                #messages.append("relations REST API post succeeded...")
                for m in messages:
                    print("   %s" % m)
    return mediaElements
        mediaElements = {}
        # ensure that all the possible fields have keys in this dict
        for v in FIELDS2WRITE:
            mediaElements[v] = ''
        # now insert the actual values for those that appear in the input
        for v1, v2 in enumerate(columns):
            mediaElements[v2] = r[v1]
        mediaElements['approvedforweb'] = 'true' if mediaElements['approvedforweb'] == 'on' else 'false'
        print 'MEDIA: uploading media for filename %s, objectnumber: %s' % (mediaElements['name'], mediaElements['objectnumber'])
        try:
            mediaElements = uploadblob(mediaElements, config, http_parms)
            mediaElements = uploadmedia(mediaElements, config, http_parms)
            print "MEDIA: objectnumber %s, objectcsid: %s, mediacsid: %s, %8.2f" % (
                mediaElements['objectnumber'], mediaElements['objectCSID'], mediaElements['mediaCSID'],
                (time.time() - elapsedtimetotal))
            r.append(mediaElements['mediaCSID'])
            r.append(mediaElements['objectCSID'])
            r.append(mediaElements['blobCSID'])
            outputfh.writerow(r)
        except:
            print "%s" % traceback.format_exc()
            print "MEDIA: create failed for blob or media. objectnumber %s, %8.2f" % (
                mediaElements['objectnumber'], (time.time() - elapsedtimetotal))
            # delete the blob if we did not manage to make a media record for it...
            try:
                (url, data, deletedCSID, elapsedtime) = postxml('DELETE', 'blobs/%s' % mediaElements['blobCSID'], http_parms.realm, http_parms.server, http_parms.username,
                                                          http_parms.password, '')
                print "MEDIA: deleted blob %s" % mediaElements['blobCSID']
            except:
                print "MEDIA: failed to delete blob %s" % mediaElements['blobCSID']
Example #13
0
def uploadmedia(mediaElements, config):
    try:
        realm = config.get("connect", "realm")
        hostname = config.get("connect", "hostname")
        username = config.get("connect", "username")
        password = config.get("connect", "password")
        institution = config.get("info", "institution")
        alwayscreatemedia = config.get("info", "alwayscreatemedia")
    except:
        print "could not get at least one of realm, hostname, username, password or institution from config file."
        # print "can't continue, exiting..."
        raise

    objectCSID = getCSID("objectnumber", mediaElements["objectnumber"], config)
    if objectCSID == [] or objectCSID is None:
        print "could not get (i.e. find) objectnumber's csid: %s." % mediaElements["objectnumber"]
        mediaElements["objectCSID"] = ""
        # raise Exception("<span style='color:red'>Object Number not found: %s!</span>" % mediaElements['objectnumber'])
        # raise
    else:
        objectCSID = objectCSID[0]
        mediaElements["objectCSID"] = objectCSID

    if alwayscreatemedia or objectCSID is not None:

        updateItems = {
            "objectStatus": "found",
            "subjectCsid": "",
            "objectCsid": mediaElements["objectCSID"],
            "objectNumber": mediaElements["objectnumber"],
            "imageNumber": mediaElements["imagenumber"],
            "blobCsid": mediaElements["blobCSID"],
            "name": mediaElements["name"],
            "rightsHolderRefname": mediaElements["rightsholder"],
            "contributor": mediaElements["contributor"],
            "creator": mediaElements["creator"],
            "mediaDate": mediaElements["date"],
        }

        uri = "media"

        messages = []
        messages.append("posting to media REST API...")
        # print updateItems
        payload = mediaPayload(updateItems, institution)
        messages.append(payload)
        (url, data, mediaCSID, elapsedtime) = postxml("POST", uri, realm, hostname, username, password, payload)
        # elapsedtimetotal += elapsedtime
        messages.append("got mediacsid %s elapsedtime %s " % (mediaCSID, elapsedtime))
        mediaElements["mediaCSID"] = mediaCSID
        messages.append("media REST API post succeeded...")

        # for PAHMA, each uploaded image becomes the primary
        if institution == "pahma":
            primary_payload = (
                """<?xml version="1.0" encoding="utf-8" standalone="yes"?>
            <ns2:invocationContext xmlns:ns2="http://collectionspace.org/services/common/invocable"
            <mode>single</mode>
            <docType>"""
                + mediaCSID
                + """</docType>
            <singleCSID></singleCSID>
            </ns2:invocationContext>
            """
            )
            postxml("POST", "batch/57c6de27-4f1e-48d3-a661", realm, hostname, username, password, primary_payload)
        else:
            pass

    if objectCSID is not None:
        # now relate media record to collection object

        uri = "relations"

        messages.append("posting media2obj to relations REST API...")

        updateItems["objectCsid"] = objectCSID
        updateItems["subjectCsid"] = mediaCSID
        # "urn:cspace:institution.cspace.berkeley.edu:media:id(%s)" % mediaCSID

        updateItems["objectDocumentType"] = "CollectionObject"
        updateItems["subjectDocumentType"] = "Media"

        payload = relationsPayload(updateItems)
        (url, data, csid, elapsedtime) = postxml("POST", uri, realm, hostname, username, password, payload)
        # elapsedtimetotal += elapsedtime
        messages.append("got relation csid %s elapsedtime %s " % (csid, elapsedtime))
        mediaElements["media2objCSID"] = csid
        messages.append("relations REST API post succeeded...")

        # reverse the roles
        messages.append("posting obj2media to relations REST API...")
        temp = updateItems["objectCsid"]
        updateItems["objectCsid"] = updateItems["subjectCsid"]
        updateItems["subjectCsid"] = temp
        updateItems["objectDocumentType"] = "Media"
        updateItems["subjectDocumentType"] = "CollectionObject"
        payload = relationsPayload(updateItems)
        (url, data, csid, elapsedtime) = postxml("POST", uri, realm, hostname, username, password, payload)
        # elapsedtimetotal += elapsedtime
        messages.append("got relation csid %s elapsedtime %s " % (csid, elapsedtime))
        mediaElements["obj2mediaCSID"] = csid
        messages.append("relations REST API post succeeded...")

    return mediaElements