def logTaskCreatedSQL(taskManager, commandReplacementDic, taskUUID, arguments):
    taskUUID = taskUUID
    jobUUID = taskManager.jobChainLink.UUID
    fileUUID = ""
    if "%fileUUID%" in commandReplacementDic:
        fileUUID = commandReplacementDic["%fileUUID%"]
    taskexec = taskManager.execute
    fileName = os.path.basename(os.path.abspath(commandReplacementDic["%relativeLocation%"]))

    databaseInterface.runSQL(
        """INSERT INTO Tasks (taskUUID, jobUUID, fileUUID, fileName, exec, arguments, createdTime)
    VALUES ( '"""
        + taskUUID
        + databaseInterface.separator
        + jobUUID
        + databaseInterface.separator
        + escapeForDB(fileUUID)
        + databaseInterface.separator
        + escapeForDB(fileName)
        + databaseInterface.separator
        + escapeForDB(taskexec)
        + databaseInterface.separator
        + escapeForDB(arguments)
        + databaseInterface.separator
        + databaseInterface.getUTCDate()
        + "' )"
    )
Example #2
0
    def create(self, table, entry):
        sets = []
        for key, value in entry.iteritems():
            if key == "resource_uri":
                continue
            if key == "uuid":
                key = "pk"
            if key == "lastmodified" and value > self.maxLastUpdate:
                self.maxLastUpdate = value
            #print type(value)
            if value == None:
                sets.append("%s=NULL" % (key))
            elif isinstance(value, int):
                sets.append("%s=%s" % (key, value))
            elif isinstance(value, unicode):
                sets.append(
                    "%s='%s'" %
                    (key, databaseInterface.MySQLdb.escape_string(value)))
            elif isinstance(value, str):
                sets.append(
                    "%s='%s'" %
                    (key, databaseInterface.MySQLdb.escape_string(value)))

        sets = ", ".join(sets)
        sql = """INSERT INTO %s SET %s;""" % (table, sets)
        #print sql
        databaseInterface.runSQL(sql)
def addKeyFileToNormalizeMaildirOffOf(relativePathToRepresent,
                                      mirrorDir,
                                      transferPath,
                                      transferUUID,
                                      date,
                                      eventDetail="",
                                      fileUUID=uuid.uuid4().__str__()):
    basename = os.path.basename(mirrorDir)
    dirname = os.path.dirname(mirrorDir)
    outFile = os.path.join(dirname, basename + ".archivematicaMaildir")
    content = """#This file is used in the archivematica system to represent a maildir dirctory, for normalization and permission purposes.
[archivematicaMaildir]
path = %s
    """ % (relativePathToRepresent)
    f = open(outFile, 'w')
    f.write(content)
    f.close()
    addFile(outFile,
            transferPath,
            transferUUID,
            date,
            eventDetail=eventDetail,
            fileUUID=fileUUID)
    sql = """INSERT INTO FilesIdentifiedIDs (fileUUID, fileID) VALUES ('%s', (SELECT pk FROM FileIDs WHERE enabled = TRUE AND description = 'A .archivematicaMaildir file')); """ % (
        fileUUID)
    databaseInterface.runSQL(sql)
    return
Example #4
0
def updateFileLocation(src, dst, eventType, eventDateTime, eventDetail, eventIdentifierUUID = uuid.uuid4().__str__(), fileUUID="None", sipUUID = None, transferUUID=None, eventOutcomeDetailNote = ""):
    """If the file uuid is not provided, will use the sip uuid and old path to find the file uuid"""
    src = unicodeToStr(src)
    dst = unicodeToStr(dst)
    fileUUID = unicodeToStr(fileUUID)
    if not fileUUID or fileUUID == "None":
        sql = "Need to define transferUUID or sipUUID"
        if sipUUID:
            sql = "SELECT Files.fileUUID FROM Files WHERE removedTime = 0 AND Files.currentLocation = '" + MySQLdb.escape_string(src) + "' AND Files.sipUUID = '" + sipUUID + "';"
        elif transferUUID:
            sql = "SELECT Files.fileUUID FROM Files WHERE removedTime = 0 AND Files.currentLocation = '" + MySQLdb.escape_string(src) + "' AND Files.transferUUID = '" + transferUUID + "';"
        c, sqlLock = databaseInterface.querySQL(sql)
        row = c.fetchone()
        while row != None:
            fileUUID = unicodeToStr(row[0])
            row = c.fetchone()
        sqlLock.release()

    if eventOutcomeDetailNote == "":
        eventOutcomeDetailNote = "Original name=\"%s\"; cleaned up name=\"%s\"" %(src, dst)
        #eventOutcomeDetailNote = eventOutcomeDetailNote.decode('utf-8')
    #CREATE THE EVENT
    if not fileUUID:
        print >>sys.stderr, "Unable to find file uuid for: ", src, " -> ", dst
        exit(6)
    insertIntoEvents(fileUUID=fileUUID, eventIdentifierUUID=eventIdentifierUUID, eventType=eventType, eventDateTime=eventDateTime, eventDetail=eventDetail, eventOutcome="", eventOutcomeDetailNote=eventOutcomeDetailNote)

    #UPDATE THE CURRENT FILE PATH
    sql =  """UPDATE Files SET currentLocation='%s' WHERE fileUUID='%s';""" % (MySQLdb.escape_string(dst), fileUUID)
    databaseInterface.runSQL(sql)
def verifyMetsFileSecChecksums(metsFile, date, taskUUID, transferDirectory, transferUUID, relativeDirectory="./"):
    print metsFile
    DspaceLicenses = "metadata/submissionDocumentation/DspaceLicenses"
    try:
        path = os.path.join(transferDirectory, DspaceLicenses)
        if not os.path.isdir(path):
            os.mkdir(path)
    except:
        print "error creating DspaceLicenses directory."
    exitCode = 0
    tree = etree.parse(metsFile)
    root = tree.getroot()
    for item in root.findall("{http://www.loc.gov/METS/}fileSec/{http://www.loc.gov/METS/}fileGrp"):
        #print etree.tostring(item)
        #print item

        USE = item.get("USE")
        if USE == "LICENSE":
            for item2 in item:
                if item2.tag == "{http://www.loc.gov/METS/}file":
                    for item3 in item2:
                        if item3.tag == "{http://www.loc.gov/METS/}FLocat":
                            fileLocation = item3.get("{http://www.w3.org/1999/xlink}href")
                            fileFullPath = os.path.join(relativeDirectory, fileLocation)
                            #dest = os.path.join(transferDirectory, DspaceLicenses, os.path.basename(fileLocation))
                            #renameAsSudo(fileFullPath, dest)

                            dbLocation = fileFullPath.replace(transferDirectory, "%transferDirectory%")
                            sql = """UPDATE Files SET fileGrpUse = 'license' WHERE currentLocation = '%s' AND transferUUID = '%s';""" % (MySQLdb.escape_string(dbLocation), transferUUID)
                            databaseInterface.runSQL(sql)
                            #dst = dest.replace(transferDirectory, "%transferDirectory%")
                            #eventDetail = ""
                            #eventOutcomeDetailNote = "moved from=\"" + src + "\"; moved to=\"" + dst + "\""
                            #updateFileLocation(src, dst, "movement", date, eventDetail, transferUUID=transferUUID, eventOutcomeDetailNote = eventOutcomeDetailNote)
    return exitCode
Example #6
0
    def threaded_process_IN_MOVED_TO(self, event):
        time.sleep(archivematicaMCP.config.getint('MCPServer', "waitToActOnMoves"))
        #print event
        #print "SIP IN_MOVED_TO"
        movedFromLock.acquire()
        if event.cookie not in movedFrom:
            #if there isn't one - error
            #print event.cookie, movedFrom
            #print >>sys.stderr, "#error. No adding files to a sip in this manner."
            movedFromLock.release()
            return

        #remove it from the list of unfound moves
        movedFromPath, filesMoved, timer = movedFrom.pop(event.cookie)
        movedFromCount.value = movedFromCount.value - 1
        movedFromLock.release()

        movedToPath = os.path.join(event.path, event.name).replace(\
                             self.unit.currentPath.replace("%sharedPath%", archivematicaMCP.config.get('MCPServer', "sharedDirectory"), 1), \
                             "%SIPDirectory%", 1)
        for fileUUID, oldLocation in filesMoved:
            newFilePath = oldLocation.replace(movedFromPath, movedToPath, 1)
            #print "Moved: ", oldLocation, "-> (" + self.unit.UUID + ")" + newFilePath
            databaseInterface.runSQL("UPDATE Files " + \
                "SET currentLocation='" + newFilePath +  "', " + \
                "Files.sipUUID = '" + self.unit.UUID + "' " \
                "WHERE fileUUID='" + fileUUID + "'" )
Example #7
0
def something(SIPDirectory, serviceDirectory, objectsDirectory, SIPUUID, date):
    #exitCode = 435
    exitCode = 0
    print SIPDirectory
    #For every file, & directory Try to find the matching file & directory in the objects directory
    for (path, dirs, files) in os.walk(serviceDirectory):
        for file in files:
            servicePreExtension = "_me"
            originalPreExtension = "_m"
            file1Full = os.path.join(path,
                                     file).replace(SIPDirectory,
                                                   "%SIPDirectory%",
                                                   1)  #service

            a = file.rfind(servicePreExtension + ".")
            file2 = ""
            if a != -1:
                file2Full = os.path.join(
                    path, file[:a] + originalPreExtension + ".").replace(
                        SIPDirectory + "objects/service/",
                        "%SIPDirectory%objects/", 1)  #service
            else:
                a = file.rfind(".")
                if a != -1:  #if a period is found
                    a += 1  #include the period
                file2Full = os.path.join(path, file[:a]).replace(
                    SIPDirectory + "objects/service/",
                    "%SIPDirectory%objects/", 1)  #service
            accessPath = os.path.join(path, file)
            sql = "UPDATE Files SET fileGrpUse='service' WHERE currentLocation =  '" + file1Full + "' AND removedTime = 0 AND SIPUUID = '" + SIPUUID + "'"
            rows = databaseInterface.runSQL(sql)
            sql = "UPDATE Files SET fileGrpUUID= (SELECT fileUUID FROM (SELECT * FROM Files WHERE removedTime = 0 AND SIPUUID = '" + SIPUUID + "')  AS F WHERE currentLocation LIKE  '" + file2Full + "%') WHERE currentLocation =  '" + file1Full + "' AND removedTime = 0 AND SIPUUID = '" + SIPUUID + "'"
            print sql
            rows = databaseInterface.runSQL(sql)
    return exitCode
def fileWasRemoved(
    fileUUID, utcDate=databaseInterface.getUTCDate(), eventDetail="", eventOutcomeDetailNote="", eventOutcome=""
):
    eventIdentifierUUID = uuid.uuid4().__str__()
    eventType = "file removed"
    eventDateTime = utcDate
    insertIntoEvents(
        fileUUID=fileUUID,
        eventIdentifierUUID=eventIdentifierUUID,
        eventType=eventType,
        eventDateTime=eventDateTime,
        eventDetail=eventDetail,
        eventOutcome=eventOutcome,
        eventOutcomeDetailNote=eventOutcomeDetailNote,
    )

    databaseInterface.runSQL(
        "UPDATE Files "
        + "SET removedTime='"
        + utcDate
        + "', currentLocation=NULL "
        + "WHERE fileUUID='"
        + fileUUID
        + "'"
    )
def something(SIPDirectory, serviceDirectory, objectsDirectory, SIPUUID, date):
    #exitCode = 435
    exitCode = 0
    print SIPDirectory
    #For every file, & directory Try to find the matching file & directory in the objects directory
    for (path, dirs, files) in os.walk(serviceDirectory):
        for file in files:
            servicePreExtension = "_me"
            originalPreExtension = "_m"
            file1Full = os.path.join(path, file).replace(SIPDirectory, "%SIPDirectory%", 1) #service
            
            a = file.rfind(servicePreExtension + ".")
            file2 = ""
            if a != -1:
                file2Full = os.path.join(path, file[:a] + originalPreExtension + ".").replace(SIPDirectory + "objects/service/", "%SIPDirectory%objects/", 1) #service
            else:
                a = file.rfind(".")
                if a != -1: #if a period is found
                    a += 1 #include the period
                file2Full = os.path.join(path, file[:a]).replace(SIPDirectory + "objects/service/", "%SIPDirectory%objects/", 1) #service
            accessPath = os.path.join(path, file)
            sql = "UPDATE Files SET fileGrpUse='service' WHERE currentLocation =  '" + file1Full + "' AND removedTime = 0 AND SIPUUID = '"+ SIPUUID + "'"
            rows = databaseInterface.runSQL(sql)
            sql = "UPDATE Files SET fileGrpUUID= (SELECT fileUUID FROM (SELECT * FROM Files WHERE removedTime = 0 AND SIPUUID = '"+ SIPUUID + "')  AS F WHERE currentLocation LIKE  '" + file2Full + "%') WHERE currentLocation =  '" + file1Full + "' AND removedTime = 0 AND SIPUUID = '"+ SIPUUID + "'"
            print sql
            rows = databaseInterface.runSQL(sql)
    return exitCode
Example #10
0
def updateDirectoryLocation(src, dst, unitPath, unitIdentifier,
                            unitIdentifierType, unitPathReplaceWith):
    srcDB = src.replace(unitPath, unitPathReplaceWith)
    if not srcDB.endswith("/") and srcDB != unitPathReplaceWith:
        srcDB += "/"
    dstDB = dst.replace(unitPath, unitPathReplaceWith)
    if not dstDB.endswith("/") and dstDB != unitPathReplaceWith:
        dstDB += "/"
    sql = "SELECT Files.fileUUID, Files.currentLocation FROM Files WHERE removedTime = 0 AND Files.currentLocation LIKE '" + MySQLdb.escape_string(
        srcDB
    ) + "%' AND " + unitIdentifierType + " = '" + unitIdentifier + "';"
    rows = databaseInterface.queryAllSQL(sql)
    for row in rows:
        fileUUID = row[0]
        location = row[1]
        destDB = location.replace(srcDB, dstDB)
        sql = """UPDATE Files SET currentLocation='%s' WHERE fileUUID='%s';""" % (
            MySQLdb.escape_string(destDB), fileUUID)
        databaseInterface.runSQL(sql)
    if os.path.isdir(dst):
        if dst.endswith("/"):
            dst += "."
        else:
            dst += "/."
    print "moving: ", src, dst
    shutil.move(src, dst)
Example #11
0
    def __init__(self, currentPath, UUID=""):
        self.owningUnit = None
        self.unitType = "Transfer"
        #Just Use the end of the directory name
        self.pathString = "%transferDirectory%"
        currentPath2 = currentPath.replace(archivematicaMCP.config.get('MCPServer', "sharedDirectory"), \
                       "%sharedPath%", 1)

        if UUID == "":
            sql = """SELECT transferUUID FROM Transfers WHERE currentLocation = '""" + MySQLdb.escape_string(
                currentPath2) + "'"
            time.sleep(.5)
            c, sqlLock = databaseInterface.querySQL(sql)
            row = c.fetchone()
            while row != None:
                UUID = row[0]
                print "Opening existing Transfer:", UUID, "-", currentPath2
                row = c.fetchone()
            sqlLock.release()

        if UUID == "":
            uuidLen = -36
            if archivematicaMCP.isUUID(currentPath[uuidLen - 1:-1]):
                UUID = currentPath[uuidLen - 1:-1]
            else:
                UUID = uuid.uuid4().__str__()
                self.UUID = UUID
                sql = """INSERT INTO Transfers (transferUUID, currentLocation)
                VALUES ('""" + UUID + databaseInterface.separator + MySQLdb.escape_string(
                    currentPath2) + "');"
                databaseInterface.runSQL(sql)

        self.currentPath = currentPath2
        self.UUID = UUID
        self.fileList = {}
def regular(SIPDirectory, objectsDirectory, SIPUUID, date):
    searchForRegularExpressions = True
    if not searchForRegularExpressions:
        return
    original = ""
    service = ""

    for (path, dirs, files) in os.walk(objectsDirectory):
        for file in files:
            m = re.search("_me\.[a-zA-Z0-9]{2,4}$", file)
            if m != None:
                file1Full = os.path.join(path, file).replace(SIPDirectory, "%SIPDirectory%", 1)  # service
                file2 = file.replace(m.group(0), m.group(0).replace("_me", "_m", 1))
                file2Full = os.path.join(path, file2).replace(SIPDirectory, "%SIPDirectory%", 1)  # original
                accessPath = os.path.join(path, file)
                sql = (
                    "UPDATE Files SET fileGrpUse='service' WHERE currentLocation =  '"
                    + file1Full
                    + "' AND removedTime = 0 AND SIPUUID = '"
                    + SIPUUID
                    + "'"
                )
                rows = databaseInterface.runSQL(sql)
                sql = (
                    "UPDATE Files SET fileGrpUUID= (SELECT fileUUID FROM (SELECT * FROM Files WHERE removedTime = 0 AND SIPUUID = '"
                    + SIPUUID
                    + "')  AS F WHERE currentLocation =  '"
                    + file2Full
                    + "') WHERE currentLocation =  '"
                    + file1Full
                    + "' AND removedTime = 0 AND SIPUUID = '"
                    + SIPUUID
                    + "'"
                )
                rows = databaseInterface.runSQL(sql)
Example #13
0
def verifyMetsFileSecChecksums(metsFile,
                               date,
                               taskUUID,
                               transferDirectory,
                               transferUUID,
                               relativeDirectory="./"):
    print metsFile
    exitCode = 0
    tree = etree.parse(metsFile)
    root = tree.getroot()
    for item in root.findall(
            "{http://www.loc.gov/METS/}fileSec/{http://www.loc.gov/METS/}fileGrp"
    ):
        #print etree.tostring(item)
        #print item

        USE = item.get("USE")
        if USE == "LICENSE":
            for item2 in item:
                if item2.tag == "{http://www.loc.gov/METS/}file":
                    for item3 in item2:
                        if item3.tag == "{http://www.loc.gov/METS/}FLocat":
                            fileLocation = item3.get(
                                "{http://www.w3.org/1999/xlink}href")
                            fileFullPath = os.path.join(
                                relativeDirectory, fileLocation)

                            dbLocation = fileFullPath.replace(
                                transferDirectory, "%transferDirectory%")
                            sql = """UPDATE Files SET fileGrpUse = 'license' WHERE currentLocation = '%s' AND transferUUID = '%s';""" % (
                                MySQLdb.escape_string(dbLocation),
                                transferUUID)
                            databaseInterface.runSQL(sql)
    return exitCode
def logJobCreatedSQL(job):
    separator = databaseInterface.getSeparator()
    unitUUID = job.unit.UUID
    if job.unit.owningUnit != None:
        unitUUID = job.unit.owningUnit.UUID
    databaseInterface.runSQL(
        """INSERT INTO Jobs (jobUUID, jobType, directory, SIPUUID, currentStep, unitType, microserviceGroup, createdTime, createdTimeDec, MicroServiceChainLinksPK, subJobOf)
        VALUES ( '"""
        + job.UUID.__str__()
        + separator
        + escapeForDB(job.description)
        + separator
        + escapeForDB(job.unit.currentPath)
        + separator
        + escapeForDB(unitUUID)
        + separator
        + "Executing command(s)"
        + separator
        + job.unit.__class__.__name__
        + separator
        + job.microserviceGroup.__str__()
        + separator
        + job.createdDate
        + separator
        + databaseInterface.getDeciDate("." + job.createdDate.split(".")[-1])
        + "', "
        + job.pk.__str__()
        + ", '"
        + job.subJobOf.__str__()
        + "' )"
    )
def verifyMetsFileSecChecksums(metsFile, date, taskUUID, transferDirectory, transferUUID, relativeDirectory="./"):
    print metsFile
    DspaceLicenses = "metadata/submissionDocumentation/DspaceLicenses"
    try:
        path = os.path.join(transferDirectory, DspaceLicenses)
        if not os.path.isdir(path):
            os.mkdir(path)
    except:
        print "error creating DspaceLicenses directory."
    exitCode = 0
    tree = etree.parse(metsFile)
    root = tree.getroot()
    for item in root.findall("{http://www.loc.gov/METS/}fileSec/{http://www.loc.gov/METS/}fileGrp"):
        #print etree.tostring(item)
        #print item

        USE = item.get("USE")
        if USE == "TEXT":
            for item2 in item:
                if item2.tag == "{http://www.loc.gov/METS/}file":
                    for item3 in item2:
                        if item3.tag == "{http://www.loc.gov/METS/}FLocat":
                            fileLocation = item3.get("{http://www.w3.org/1999/xlink}href")
                            fileFullPath = os.path.join(relativeDirectory, fileLocation)

                            dbLocation = fileFullPath.replace(transferDirectory, "%transferDirectory%")
                            sql = """UPDATE Files SET fileGrpUse = 'text/ocr' WHERE currentLocation = '%s' AND transferUUID = '%s';""" % (MySQLdb.escape_string(dbLocation), transferUUID)
                            databaseInterface.runSQL(sql)
    return exitCode
Example #16
0
    def __init__(self, currentPath, UUID=""):
        self.owningUnit = None
        self.unitType = "Transfer"
        #Just Use the end of the directory name
        self.pathString = "%transferDirectory%"
        currentPath2 = currentPath.replace(archivematicaMCP.config.get('MCPServer', "sharedDirectory"), \
                       "%sharedPath%", 1)

        if UUID == "":
            sql = """SELECT transferUUID FROM Transfers WHERE currentLocation = '""" + MySQLdb.escape_string(currentPath2) + "'"
            time.sleep(.5)
            c, sqlLock = databaseInterface.querySQL(sql)
            row = c.fetchone()
            while row != None:
                UUID = row[0]
                print "Opening existing Transfer:", UUID, "-", currentPath2
                row = c.fetchone()
            sqlLock.release()

        if UUID == "":
            uuidLen = -36
            if  archivematicaMCP.isUUID(currentPath[uuidLen-1:-1]):
                UUID = currentPath[uuidLen-1:-1]
            else:
                UUID = uuid.uuid4().__str__()
                self.UUID = UUID
                sql = """INSERT INTO Transfers (transferUUID, currentLocation)
                VALUES ('""" + UUID + databaseInterface.separator + MySQLdb.escape_string(currentPath2) + "');"
                databaseInterface.runSQL(sql)

        self.currentPath = currentPath2
        self.UUID = UUID
        self.fileList = {}
Example #17
0
def insertIntoFiles(fileUUID,
                    filePath,
                    enteredSystem=databaseInterface.getUTCDate(),
                    transferUUID="",
                    sipUUID="",
                    use="original"):
    if transferUUID != "" and sipUUID == "":
        databaseInterface.runSQL("""INSERT INTO Files (fileUUID, originalLocation, currentLocation, enteredSystem, fileGrpUse, transferUUID)
        VALUES ( '"""   + fileUUID + databaseInterface.separator \
                        + escapeForDB(filePath) + databaseInterface.separator \
                        + escapeForDB(filePath) + databaseInterface.separator \
                        + enteredSystem + databaseInterface.separator \
                        + use + databaseInterface.separator \
                        + transferUUID + "' )" )
    elif transferUUID == "" and sipUUID != "":
        databaseInterface.runSQL("""INSERT INTO Files (fileUUID, originalLocation, currentLocation, enteredSystem, fileGrpUse, sipUUID)
        VALUES ( '"""   + fileUUID + databaseInterface.separator \
                        + escapeForDB(filePath) + databaseInterface.separator \
                        + escapeForDB(filePath) + databaseInterface.separator \
                        + enteredSystem + databaseInterface.separator \
                        + use + databaseInterface.separator \
                        + sipUUID + "' )" )
    else:
        print >> sys.stderr, "not supported yet - both SIP and transfer UUID's defined (or neither defined)"
        print >> sys.stderr, "SIP UUID:", sipUUID
        print >> sys.stderr, "transferUUID:", transferUUID
        raise Exception(
            "not supported yet - both SIP and transfer UUID's defined (or neither defined)",
            sipUUID + "-" + transferUUID)
def insertIntoEvents(
    fileUUID="",
    eventIdentifierUUID="",
    eventType="",
    eventDateTime=databaseInterface.getUTCDate(),
    eventDetail="",
    eventOutcome="",
    eventOutcomeDetailNote="",
):
    if eventIdentifierUUID == "":
        eventIdentifierUUID = uuid.uuid4().__str__()
    databaseInterface.runSQL(
        """INSERT INTO Events (fileUUID, eventIdentifierUUID, eventType, eventDateTime, eventDetail, eventOutcome, eventOutcomeDetailNote)
            VALUES ( '"""
        + escapeForDB(fileUUID)
        + databaseInterface.separator
        + escapeForDB(eventIdentifierUUID)
        + databaseInterface.separator
        + escapeForDB(eventType)
        + databaseInterface.separator
        + escapeForDB(eventDateTime)
        + databaseInterface.separator
        + escapeForDB(eventDetail)
        + databaseInterface.separator
        + escapeForDB(eventOutcome)
        + databaseInterface.separator
        + escapeForDB(eventOutcomeDetailNote)
        + "' )"
    )
def insertIntoDerivations(sourceFileUUID="", derivedFileUUID="", relatedEventUUID=""):
    databaseInterface.runSQL("""INSERT INTO Derivations
        (sourceFileUUID, derivedFileUUID, relatedEventUUID)
        VALUES ( '""" \
        + sourceFileUUID + databaseInterface.separator \
        + derivedFileUUID + databaseInterface.separator \
        + relatedEventUUID + "');")
Example #20
0
 def setMagicLink(self, link, exitStatus=""):
     """Assign a link to the unit to process when loaded.
     Deprecated! Replaced with Set/Load Unit Variable"""
     if exitStatus != "":
         sql =  """UPDATE Transfers SET magicLink='""" + link.__str__() + """', magicLinkExitMessage='""" + exitStatus + """' WHERE transferUUID='""" + self.UUID.__str__() + """';"""
     else:
         sql =  """UPDATE Transfers SET magicLink='""" + link.__str__() + """' WHERE transferUUID='""" + self.UUID.__str__() + """';"""
     databaseInterface.runSQL(sql)
def run(target, fileUUID):
    basename = os.path.basename(target)
    extensionIndex = basename.rfind(".")
    if extensionIndex != -1:
        extension = basename[extensionIndex+1:] 
        print "extension:", extension
        sql = """INSERT INTO FilesIdentifiedIDs (fileUUID, fileID) VALUES ('%s', (SELECT FileIDs FROM FileIDsByExtension WHERE Extension = '%s'))""" % (escapeForDB(fileUUID), escapeForDB(extension.lower()))
        databaseInterface.runSQL(sql)
Example #22
0
 def setMagicLink(self, link, exitStatus=""):
     """Assign a link to the unit to process when loaded.
     Deprecated! Replaced with Set/Load Unit Variable"""
     if exitStatus != "":
         sql = """UPDATE SIPs SET magicLink='""" + link + """', magicLinkExitMessage='""" + exitStatus + """' WHERE sipUUID='""" + self.UUID + """';"""
     else:
         sql = """UPDATE SIPs SET magicLink='""" + link + """' WHERE sipUUID='""" + self.UUID + """';"""
     databaseInterface.runSQL(sql)
def backup_indexed_document(result, indexData, index, type):
    sql = "INSERT INTO ElasticsearchIndexBackup (docId, data, indexName, typeName) VALUES ('%s', '%s', '%s', '%s')"

    sql = sql % (MySQLdb.escape_string(
        result['_id']), unicode(base64.encodestring(cPickle.dumps(indexData))),
                 MySQLdb.escape_string(index), MySQLdb.escape_string(type))

    databaseInterface.runSQL(sql)
def createSIP(path, UUID=None):
    if UUID == None:
        UUID = uuid.uuid4().__str__()
    print "Creating SIP:", UUID, "-", path
    sql = """INSERT INTO SIPs (sipUUID, currentPath)
        VALUES ('""" + UUID + databaseInterface.separator + escapeForDB(path) + "');"
    databaseInterface.runSQL(sql)
    return UUID
Example #25
0
def insertIntoDerivations(sourceFileUUID="",
                          derivedFileUUID="",
                          relatedEventUUID=""):
    databaseInterface.runSQL("""INSERT INTO Derivations
        (sourceFileUUID, derivedFileUUID, relatedEventUUID)
        VALUES ( '""" \
        + sourceFileUUID + databaseInterface.separator \
        + derivedFileUUID + databaseInterface.separator \
        + relatedEventUUID + "');")
def insertIntoFilesIDs(fileUUID="", formatName="", formatVersion="", formatRegistryName="", formatRegistryKey=""):
    databaseInterface.runSQL("""INSERT INTO FilesIDs
        (fileUUID, formatName, formatVersion, formatRegistryName, formatRegistryKey)
        VALUES ( '""" \
        + escapeForDB(fileUUID) + databaseInterface.separator \
        + escapeForDB(formatName) + databaseInterface.separator \
        + escapeForDB(formatVersion) + databaseInterface.separator \
        + escapeForDB(formatRegistryName) + databaseInterface.separator \
        + escapeForDB(formatRegistryKey) + "');")
Example #27
0
def createSIP(path, UUID=None):
    if UUID == None:
        UUID = uuid.uuid4().__str__()
    print "Creating SIP:", UUID, "-", path
    sql = """INSERT INTO SIPs (sipUUID, currentPath)
        VALUES ('""" + UUID + databaseInterface.separator + escapeForDB(
        path) + "');"
    databaseInterface.runSQL(sql)
    return UUID
Example #28
0
 def setMagicLink(self, link, exitStatus=""):
     if exitStatus != "":
         sql = """UPDATE Transfers SET magicLink='""" + link.__str__(
         ) + """', magicLinkExitMessage='""" + exitStatus + """' WHERE transferUUID='""" + self.UUID.__str__(
         ) + """';"""
     else:
         sql = """UPDATE Transfers SET magicLink='""" + link.__str__(
         ) + """' WHERE transferUUID='""" + self.UUID.__str__() + """';"""
     databaseInterface.runSQL(sql)
def insertIntoFilesFits(fileUUID="", fitsXMLString=""):
    databaseInterface.runSQL(
        """INSERT INTO FilesFits
        (fileUUID, FITSxml)
        VALUES ( '"""
        + escapeForDB(fileUUID)
        + databaseInterface.separator
        + escapeForDB(fitsXMLString)
        + "');"
    )
def setMaildirFiles(sipUUID, sipPath):
    for root, dirs, files in os.walk(os.path.join(sipPath, "objects", "Maildir")):
        for file in files:
            fileRelativePath = os.path.join(root, file).replace(sipPath, "%SIPDirectory%", 1)
            sql = """SELECT fileUUID FROM Files WHERE removedTime = 0 AND sipUUID = '%s' AND currentLocation = '%s';""" % (sipUUID, fileRelativePath)
            rows = databaseInterface.queryAllSQL(sql)
            if len(rows):
                fileUUID = rows[0][0]
                sql = """INSERT INTO FilesIdentifiedIDs (fileUUID, fileID) VALUES ('%s', (SELECT pk FROM FileIDs WHERE enabled = TRUE AND description = 'A maildir email file')); """ % (fileUUID)
                databaseInterface.runSQL(sql)
Example #31
0
def printFidoInsert(itemdirectoryPath):
    global runSQLInserts
    ext = findExtension(itemdirectoryPath).lower()
    if not ext:
        return

    fileID = findExistingFileID(ext)
    if not fileID:
        return
    fileID, validPreservationFormat, validAccessFormat = fileID

    FidoFileID = getFidoID(itemdirectoryPath).strip()
    if not FidoFileID:
        return

    # check for existing rule
    sql = (
        """SELECT pk FROM FileIDs WHERE fileIDType = 'afdbee13-eec5-4182-8c6c-f5638ee290f3' AND description = '%s';"""
        % FidoFileID
    )
    if databaseInterface.queryAllSQL(sql):
        a = "skip"
        # return
    if FidoFileID in idsDone:
        return

    fileIDUUID = uuid.uuid4().__str__()

    sql = """INSERT INTO FileIDs (pk, description, validPreservationFormat, validAccessFormat, fileIDType) 
        VALUES ('%s', '%s', %s, %s, 'afdbee13-eec5-4182-8c6c-f5638ee290f3');""" % (
        fileIDUUID,
        FidoFileID,
        validPreservationFormat,
        validAccessFormat,
    )
    idsDone.append(FidoFileID)
    print sql
    if runSQLInserts:
        databaseInterface.runSQL(sql)

    FileIDsBySingleIDUUID = uuid.uuid4().__str__()
    sql = """INSERT INTO FileIDsBySingleID  (pk, fileID, id, tool, toolVersion)
        VALUES ('%s', '%s', '%s', 'Fido', '1.1.2');""" % (
        FileIDsBySingleIDUUID,
        fileIDUUID,
        FidoFileID,
    )
    print sql

    if runSQLInserts:
        databaseInterface.runSQL(sql)

    printNewCommandRelationships(fileID, fileIDUUID)

    print
Example #32
0
def logJobCreatedSQL(job):
    separator = databaseInterface.getSeparator()
    unitUUID = job.unit.UUID
    decDate = databaseInterface.getDeciDate("." +
                                            job.createdDate.split(".")[-1])
    if job.unit.owningUnit != None:
        unitUUID = job.unit.owningUnit.UUID
    databaseInterface.runSQL("""INSERT INTO Jobs (jobUUID, jobType, directory, SIPUUID, currentStep, unitType, microserviceGroup, createdTime, createdTimeDec, MicroServiceChainLinksPK, subJobOf)
        VALUES ( '""" + job.UUID.__str__() + separator + escapeForDB(job.description) + separator \
        + escapeForDB(job.unit.currentPath) + separator + escapeForDB(unitUUID) + \
        separator + "Executing command(s)" + separator + job.unit.__class__.__name__  + separator + job.microserviceGroup.__str__() + separator + job.createdDate + separator + decDate + separator + job.pk.__str__()  + separator + job.subJobOf.__str__() + "' )" )
Example #33
0
def setMaxLastUpdate(maxLastUpdate):
    sql = """SELECT pk FROM UnitVariables WHERE unitType = 'FPR' AND unitUUID = 'Client' AND variable = 'maxLastUpdate'; """
    rows = databaseInterface.queryAllSQL(sql)
    if rows:
        sql = """UPDATE UnitVariables SET variableValue='%s' WHERE unitType = 'FPR' AND unitUUID = 'Client' AND variable = 'maxLastUpdate';""" % (maxLastUpdate)
        databaseInterface.runSQL(sql)
    else:
        pk = uuid.uuid4().__str__()
        sql = """INSERT INTO UnitVariables SET pk='%s', variableValue='%s', unitType='FPR', unitUUID = 'Client', variable = 'maxLastUpdate';""" % (pk, maxLastUpdate)
        databaseInterface.runSQL(sql)
    return maxLastUpdate
 def execute(self):
     sql = "UPDATE CommandRelationships SET countAttempts=countAttempts+1 WHERE pk=" + self.pk.__str__() + ";"
     databaseInterface.runSQL(sql)
     ret = self.commandObject.execute()
     if ret:
         column = "countNotOK"
     else:
         column = "countOK"
     sql = "UPDATE CommandRelationships SET " + column + "=" + column + "+1 WHERE pk=" + self.pk.__str__() + ";"
     databaseInterface.runSQL(sql)
     return ret
Example #35
0
def logTaskCompletedSQL(task):
    print "Logging task output to db", task.UUID
    taskUUID = task.UUID.__str__()
    exitCode = task.results["exitCode"].__str__()
    stdOut = task.results["stdOut"]
    stdError = task.results["stdError"]

    databaseInterface.runSQL("UPDATE Tasks " + \
    "SET endTime='" + databaseInterface.getUTCDate() +"', exitCode='" + exitCode +  "', " + \
    "stdOut='" + escapeForDB(stdOut) + "', stdError='" + escapeForDB(stdError) + "' "
    "WHERE taskUUID='" + taskUUID + "'" )
def logTaskCompletedSQL(task):
    print "Logging task output to db", task.UUID
    taskUUID = task.UUID.__str__()
    exitCode = task.results["exitCode"].__str__()
    stdOut = task.results["stdOut"]
    stdError = task.results["stdError"]

    databaseInterface.runSQL("UPDATE Tasks " + \
    "SET endTime='" + databaseInterface.getUTCDate() +"', exitCode='" + exitCode +  "', " + \
    "stdOut='" + escapeForDB(stdOut) + "', stdError='" + escapeForDB(stdError) + "' "
    "WHERE taskUUID='" + taskUUID + "'" )
def backup_indexed_document(result, indexData, index, type):
    sql = "INSERT INTO ElasticsearchIndexBackup (docId, data, indexName, typeName) VALUES ('%s', '%s', '%s', '%s')"

    sql = sql % (
        MySQLdb.escape_string(result["_id"]),
        unicode(base64.encodestring(cPickle.dumps(indexData))),
        MySQLdb.escape_string(index),
        MySQLdb.escape_string(type),
    )

    databaseInterface.runSQL(sql)
def run(target, fileUUID):
    basename = os.path.basename(target)
    extensionIndex = basename.rfind(".")
    if extensionIndex != -1:
        extension = basename[extensionIndex+1:] 
        print "extension:", extension
        sql1= """SELECT FileIDsBySingleID.fileID FROM FileIDsBySingleID JOIN FileIDs ON FileIDsBySingleID.fileID = FileIDs.pk WHERE FileIDs.fileIDType = '16ae42ff-1018-4815-aac8-cceacd8d88a8' AND FileIDsBySingleID.id = '%s' AND FileIDs.enabled = TRUE AND FileIDsBySingleID.enabled = TRUE;""" % (escapeForDB(extension.lower())) 
        rows = databaseInterface.queryAllSQL(sql1)  
        for row in rows:
            sql2 = """INSERT INTO FilesIdentifiedIDs (fileUUID, fileID) VALUES ('%s', '%s');""" % (escapeForDB(fileUUID), row[0])
            databaseInterface.runSQL(sql2)
Example #39
0
 def setMaxLastUpdate(self, maxLastUpdate):
     sql = """SELECT pk FROM UnitVariables WHERE unitType = 'FPR' AND unitUUID = 'Client' AND variable = 'maxLastUpdate'; """
     rows = databaseInterface.queryAllSQL(sql)
     if rows:
         sql = """UPDATE UnitVariables SET variableValue='%s' WHERE unitType = 'FPR' AND unitUUID = 'Client' AND variable = 'maxLastUpdate';""" % (self.maxLastUpdate)
         databaseInterface.runSQL(sql)
     else:
         pk = uuid.uuid4().__str__()
         sql = """INSERT INTO UnitVariables SET pk='%s', variableValue='%s', unitType='FPR', unitUUID = 'Client', variable = 'maxLastUpdate';""" % (pk, self.maxLastUpdate)
         databaseInterface.runSQL(sql)
     return maxLastUpdate
def logJobStepCompletedSQL(job):
    databaseInterface.runSQL(
        """INSERT INTO jobStepCompleted (jobUUID, step, completedTime)
        VALUES ( '"""
        + job.UUID.__str__()
        + databaseInterface.separator
        + job.step
        + databaseInterface.separator
        + databaseInterface.getUTCDate()
        + "' )"
    )
def logTaskAssignedSQL(taskUUID, client, date):
    databaseInterface.runSQL(
        "UPDATE Tasks "
        + "SET startTime='"
        + date
        + "', client='"
        + client
        + "' "
        + "WHERE taskUUID='"
        + taskUUID
        + "';"
    )
Example #42
0
def printNewCommandRelationships(fileID, fileIDUUID):
    global runSQLInserts
    sql = """SELECT commandClassification, command FROM CommandRelationships WHERE fileID = '%s';""" % (fileID)
    rows = databaseInterface.queryAllSQL(sql)
    for row in rows:
        commandClassification, command = row
        CommandRelationshipUUID = uuid.uuid4().__str__()
        sql = """INSERT INTO CommandRelationships (pk, fileID, commandClassification, command)
            VALUES ('%s', '%s', '%s', '%s');""" % (CommandRelationshipUUID, fileIDUUID, commandClassification, command)
        print sql
        if runSQLInserts:
            databaseInterface.runSQL(sql)
Example #43
0
def insertIntoFilesIDs(fileUUID="",
                       formatName="",
                       formatVersion="",
                       formatRegistryName="",
                       formatRegistryKey=""):
    databaseInterface.runSQL("""INSERT INTO FilesIDs
        (fileUUID, formatName, formatVersion, formatRegistryName, formatRegistryKey)
        VALUES ( '""" \
        + escapeForDB(fileUUID) + databaseInterface.separator \
        + escapeForDB(formatName) + databaseInterface.separator \
        + escapeForDB(formatVersion) + databaseInterface.separator \
        + escapeForDB(formatRegistryName) + databaseInterface.separator \
        + escapeForDB(formatRegistryKey) + "');")
Example #44
0
 def execute(self):
     sql = "UPDATE CommandRelationships SET countAttempts=countAttempts+1 WHERE pk='" + self.pk.__str__(
     ) + "';"
     databaseInterface.runSQL(sql)
     ret = self.commandObject.execute()
     if ret:
         column = "countNotOK"
     else:
         column = "countOK"
     sql = "UPDATE CommandRelationships SET " + column + "=" + column + "+1 WHERE pk='" + self.pk.__str__(
     ) + "';"
     databaseInterface.runSQL(sql)
     return ret
Example #45
0
def run(target, fileUUID):
    basename = os.path.basename(target)
    extensionIndex = basename.rfind(".")
    if extensionIndex != -1:
        extension = basename[extensionIndex + 1:]
        print "extension:", extension
        sql1 = """SELECT FileIDsBySingleID.fileID FROM FileIDsBySingleID JOIN FileIDs ON FileIDsBySingleID.fileID = FileIDs.pk WHERE FileIDs.fileIDType = '16ae42ff-1018-4815-aac8-cceacd8d88a8' AND FileIDsBySingleID.id = '%s' AND FileIDs.enabled = TRUE AND FileIDsBySingleID.enabled = TRUE;""" % (
            escapeForDB(extension.lower()))
        rows = databaseInterface.queryAllSQL(sql1)
        for row in rows:
            sql2 = """INSERT INTO FilesIdentifiedIDs (fileUUID, fileID) VALUES ('%s', '%s');""" % (
                escapeForDB(fileUUID), row[0])
            databaseInterface.runSQL(sql2)
Example #46
0
def setMaildirFiles(sipUUID, sipPath):
    for root, dirs, files in os.walk(
            os.path.join(sipPath, "objects", "Maildir")):
        for file in files:
            fileRelativePath = os.path.join(root, file).replace(
                sipPath, "%SIPDirectory%", 1)
            sql = """SELECT fileUUID FROM Files WHERE removedTime = 0 AND sipUUID = %s AND currentLocation = %s;"""
            rows = databaseInterface.queryAllSQL(sql,
                                                 (sipUUID, fileRelativePath))
            if len(rows):
                fileUUID = rows[0][0]
                sql = """INSERT INTO FilesIdentifiedIDs (fileUUID, fileID) VALUES (%s, (SELECT pk FROM FileIDs WHERE enabled = TRUE AND description = 'A maildir email file')); """
                databaseInterface.runSQL(sql, (fileUUID, ))
def insertIntoEvents(fileUUID="", eventIdentifierUUID="", eventType="", eventDateTime=databaseInterface.getUTCDate(), eventDetail="", eventOutcome="", eventOutcomeDetailNote=""):
    agent = getAgentForFileUUID(fileUUID)
    if not agent:
        agent = 'NULL'
    if eventIdentifierUUID == "":
        eventIdentifierUUID = uuid.uuid4().__str__()
    databaseInterface.runSQL("""INSERT INTO Events (fileUUID, eventIdentifierUUID, eventType, eventDateTime, eventDetail, eventOutcome, eventOutcomeDetailNote, linkingAgentIdentifier)
            VALUES ( '"""   + escapeForDB(fileUUID) + databaseInterface.separator \
                            + escapeForDB(eventIdentifierUUID) + databaseInterface.separator \
                            + escapeForDB(eventType) + databaseInterface.separator \
                            + escapeForDB(eventDateTime) + databaseInterface.separator \
                            + escapeForDB(eventDetail) + databaseInterface.separator \
                            + escapeForDB(eventOutcome) + databaseInterface.separator \
                            + escapeForDB(eventOutcomeDetailNote) + "', " + escapeForDB(agent) + " )" )
def onceNormalized(command, opts, replacementDic):
    transcodedFiles = []
    if not command.outputLocation:
        command.outputLocation = ""
    if os.path.isfile(command.outputLocation):
        transcodedFiles.append(command.outputLocation)
    elif os.path.isdir(command.outputLocation):
        for w in os.walk(command.outputLocation):
            path, directories, files = w
            for p in files:
                p = os.path.join(path, p)
                if os.path.isfile(p):
                    transcodedFiles.append(p)
    elif command.outputLocation:
        print >>sys.stderr, command
        print >>sys.stderr, "Error - output file does not exist [" + command.outputLocation + "]"
        command.exitCode = -2

    derivationEventUUID = uuid.uuid4().__str__()
    eventDetail = "ArchivematicaFPRCommandID=\"%s\"" % (command.pk)
    if command.eventDetailCommand != None:
        eventDetail = '%s; %s' % (eventDetail, command.eventDetailCommand.stdOut)
    for ef in transcodedFiles:
        if opts["commandClassifications"] == "preservation":
            # TODO Add manual normalization for files of same name mapping
            #Add the new file to the sip
            filePathRelativeToSIP = ef.replace(opts["sipPath"], "%SIPDirectory%", 1)
            # addFileToSIP(filePathRelativeToSIP, fileUUID, sipUUID, taskUUID, date, sourceType="ingestion"):
            addFileToSIP(filePathRelativeToSIP, replacementDic["%outputFileUUID%"], opts["sipUUID"], uuid.uuid4().__str__(), opts["date"], sourceType="creation", use="preservation")
            #Calculate new file checksum
            #Add event information to current file
            insertIntoEvents(fileUUID=opts["fileUUID"], \
               eventIdentifierUUID=derivationEventUUID, \
               eventType="normalization", \
               eventDateTime=opts["date"], \
               eventDetail=eventDetail, \
               eventOutcome="", \
               eventOutcomeDetailNote=filePathRelativeToSIP)

            updateSizeAndChecksum(replacementDic["%outputFileUUID%"], ef, opts["date"], uuid.uuid4().__str__())

            #Add linking information between files
            insertIntoDerivations(sourceFileUUID=opts["fileUUID"], derivedFileUUID=replacementDic["%outputFileUUID%"], relatedEventUUID=derivationEventUUID)

            sql = "INSERT INTO FilesIDs (fileUUID, formatName, formatVersion, formatRegistryName, formatRegistryKey) VALUES ('%s', '%s', NULL, NULL, NULL);" % (replacementDic["%outputFileUUID%"], command.outputFormat)
            databaseInterface.runSQL(sql)
            
            replacementDic["%outputFileUUID%"] = uuid.uuid4().__str__()
            replacementDic["%postfix%"] = "-" + replacementDic["%outputFileUUID%"]
def printNewCommandRelationships(fileID, fileIDUUID):
    global runSQLInserts
    sql = """SELECT commandClassification, command FROM CommandRelationships WHERE fileID = '%s';""" % (
        fileID)
    rows = databaseInterface.queryAllSQL(sql)
    for row in rows:
        commandClassification, command = row
        CommandRelationshipUUID = uuid.uuid4().__str__()
        sql = """INSERT INTO CommandRelationships (pk, fileID, commandClassification, command)
            VALUES ('%s', '%s', '%s', '%s');""" % (
            CommandRelationshipUUID, fileIDUUID, commandClassification,
            command)
        print sql
        if runSQLInserts:
            databaseInterface.runSQL(sql)
def setArchivematicaMaildirFiles(sipUUID, sipPath):
    for root, dirs, files in os.walk(
            os.path.join(sipPath, "objects", "attachments")):
        for file in files:
            if file.endswith('.archivematicaMaildir'):
                fileRelativePath = os.path.join(root, file).replace(
                    sipPath, "%SIPDirectory%", 1)
                sql = """SELECT fileUUID FROM Files WHERE removedTime = 0 AND sipUUID = '%s' AND currentLocation = '%s';""" % (
                    sipUUID, fileRelativePath)
                rows = databaseInterface.queryAllSQL(sql)
                if len(rows):
                    fileUUID = rows[0][0]
                    sql = """INSERT INTO FilesIdentifiedIDs (fileUUID, fileID) VALUES ('%s', (SELECT pk FROM FileIDs WHERE enabled = TRUE AND description = 'A .archivematicaMaildir file')); """ % (
                        fileUUID)
                    databaseInterface.runSQL(sql)
Example #51
0
def updateSizeAndChecksum(fileUUID, filePath, date, eventIdentifierUUID):
    fileSize = os.path.getsize(filePath).__str__()
    checksum = sha_for_file(filePath).__str__()

    sql = "UPDATE Files " + \
        "SET fileSize='" + fileSize +"', checksum='" + checksum +  "' " + \
        "WHERE fileUUID='" + fileUUID + "'"
    databaseInterface.runSQL(sql)

    insertIntoEvents(fileUUID=fileUUID, \
                     eventIdentifierUUID=eventIdentifierUUID, \
                     eventType="message digest calculation", \
                     eventDateTime=date, \
                     eventDetail="program=\"python\"; module=\"hashlib.sha256()\"", \
                     eventOutcomeDetailNote=checksum)
Example #52
0
def updateFileLocation2(src, dst, unitPath, unitIdentifier, unitIdentifierType, unitPathReplaceWith):
    """Dest needs to be the actual full destination path with filename."""
    srcDB = src.replace(unitPath, unitPathReplaceWith)
    dstDB = dst.replace(unitPath, unitPathReplaceWith)
    sql = "SELECT Files.fileUUID, Files.currentLocation FROM Files WHERE removedTime = 0 AND Files.currentLocation = '" + MySQLdb.escape_string(srcDB) + "' AND " + unitIdentifierType + " = '" + unitIdentifier + "';"
    rows = databaseInterface.queryAllSQL(sql)
    if len(rows) != 1:
        print sys.stderr, len(rows), "rows", sql, rows
        exit(4)
    for row in rows:
        fileUUID = row[0]
        location = row[1]
        sql =  """UPDATE Files SET currentLocation='%s' WHERE fileUUID='%s';""" % (MySQLdb.escape_string(dstDB), fileUUID)
        databaseInterface.runSQL(sql)
    print "moving: ", src, dst
    shutil.move(src, dst)
def printFidoInsert(itemdirectoryPath):
    global runSQLInserts
    ext = findExtension(itemdirectoryPath).lower()
    if not ext:
        return

    fileID = findExistingFileID(ext)
    if not fileID:
        return
    fileID, validPreservationFormat, validAccessFormat = fileID

    FidoFileID = getFidoID(itemdirectoryPath).strip()
    if not FidoFileID:
        return

    #check for existing rule
    sql = """SELECT pk FROM FileIDs WHERE fileIDType = 'afdbee13-eec5-4182-8c6c-f5638ee290f3' AND description = '%s';""" % FidoFileID
    if databaseInterface.queryAllSQL(sql):
        a = "skip"
        #return
    if FidoFileID in idsDone:
        return

    fileIDUUID = uuid.uuid4().__str__()

    sql = """INSERT INTO FileIDs (pk, description, validPreservationFormat, validAccessFormat, fileIDType) 
        VALUES ('%s', '%s', %s, %s, 'afdbee13-eec5-4182-8c6c-f5638ee290f3');""" % (
        fileIDUUID, FidoFileID, validPreservationFormat, validAccessFormat)
    idsDone.append(FidoFileID)
    print sql
    if runSQLInserts:
        databaseInterface.runSQL(sql)

    FileIDsBySingleIDUUID = uuid.uuid4().__str__()
    sql = """INSERT INTO FileIDsBySingleID  (pk, fileID, id, tool, toolVersion)
        VALUES ('%s', '%s', '%s', 'Fido', '1.1.2');""" % (
        FileIDsBySingleIDUUID, fileIDUUID, FidoFileID)
    print sql

    if runSQLInserts:
        databaseInterface.runSQL(sql)

    printNewCommandRelationships(fileID, fileIDUUID)

    print
Example #54
0
def printTikaInsert(itemdirectoryPath):
    global runSQLInserts
    ext = findExtension(itemdirectoryPath).lower()
    if not ext:
        return

    fileID = findExistingFileID(ext)
    if not fileID:
        return
    fileID, validPreservationFormat, validAccessFormat = fileID

    tikaFileID = getTikaID(itemdirectoryPath).strip()
    if not tikaFileID:
        return

    #check for existing rule
    sql = """SELECT pk FROM FileIDs WHERE fileIDType = '1d8f3bb3-da8a-4ef6-bac7-b65942df83fc' AND description = '%s';""" % tikaFileID
    if databaseInterface.queryAllSQL(sql):
        a = "skip"
        #return
    if tikaFileID in idsDone:
        return

    fileIDUUID = uuid.uuid4().__str__()

    sql = """INSERT INTO FileIDs (pk, description, validPreservationFormat, validAccessFormat, fileIDType) 
        VALUES ('%s', '%s', %s, %s, '1d8f3bb3-da8a-4ef6-bac7-b65942df83fc');""" % (
        fileIDUUID, tikaFileID, validPreservationFormat, validAccessFormat)
    idsDone.append(tikaFileID)
    print sql
    if runSQLInserts:
        databaseInterface.runSQL(sql)

    FileIDsBySingleIDUUID = uuid.uuid4().__str__()
    sql = """INSERT INTO FileIDsBySingleID  (pk, fileID, id, tool, toolVersion)
        VALUES ('%s', '%s', '%s', 'Tika', '1.3');""" % (FileIDsBySingleIDUUID,
                                                        fileIDUUID, tikaFileID)
    print sql

    if runSQLInserts:
        databaseInterface.runSQL(sql)

    printNewCommandRelationships(fileID, fileIDUUID)

    print
Example #55
0
def logTaskCreatedSQL(taskManager, commandReplacementDic, taskUUID, arguments):
    taskUUID = taskUUID
    jobUUID = taskManager.jobChainLink.UUID
    fileUUID = ""
    if "%fileUUID%" in commandReplacementDic:
        fileUUID = commandReplacementDic["%fileUUID%"]
    taskexec = taskManager.execute
    fileName = os.path.basename(
        os.path.abspath(commandReplacementDic["%relativeLocation%"]))

    databaseInterface.runSQL("""INSERT INTO Tasks (taskUUID, jobUUID, fileUUID, fileName, exec, arguments, createdTime)
    VALUES ( '"""   + taskUUID + databaseInterface.separator \
                    + jobUUID + databaseInterface.separator \
                    + escapeForDB(fileUUID) + databaseInterface.separator \
                    + escapeForDB(fileName) + databaseInterface.separator \
                    + escapeForDB(taskexec) + databaseInterface.separator \
                    + escapeForDB(arguments) + databaseInterface.separator \
                    + databaseInterface.getUTCDate() + "' )" )
Example #56
0
def fileWasRemoved(fileUUID,
                   utcDate=databaseInterface.getUTCDate(),
                   eventDetail="",
                   eventOutcomeDetailNote="",
                   eventOutcome=""):
    eventIdentifierUUID = uuid.uuid4().__str__()
    eventType = "file removed"
    eventDateTime = utcDate
    insertIntoEvents(fileUUID=fileUUID, \
                       eventIdentifierUUID=eventIdentifierUUID, \
                       eventType=eventType, \
                       eventDateTime=eventDateTime, \
                       eventDetail=eventDetail, \
                       eventOutcome=eventOutcome, \
                       eventOutcomeDetailNote=eventOutcomeDetailNote)


    databaseInterface.runSQL("UPDATE Files " + \
       "SET removedTime='" + utcDate + "', currentLocation=NULL " + \
       "WHERE fileUUID='" + fileUUID + "'" )
Example #57
0
def insertIntoEvents(fileUUID="",
                     eventIdentifierUUID="",
                     eventType="",
                     eventDateTime=databaseInterface.getUTCDate(),
                     eventDetail="",
                     eventOutcome="",
                     eventOutcomeDetailNote=""):
    agent = getAgentForFileUUID(fileUUID)
    if not agent:
        agent = 'NULL'
    if eventIdentifierUUID == "":
        eventIdentifierUUID = uuid.uuid4().__str__()
    databaseInterface.runSQL("""INSERT INTO Events (fileUUID, eventIdentifierUUID, eventType, eventDateTime, eventDetail, eventOutcome, eventOutcomeDetailNote, linkingAgentIdentifier)
            VALUES ( '"""   + escapeForDB(fileUUID) + databaseInterface.separator \
                            + escapeForDB(eventIdentifierUUID) + databaseInterface.separator \
                            + escapeForDB(eventType) + databaseInterface.separator \
                            + escapeForDB(eventDateTime) + databaseInterface.separator \
                            + escapeForDB(eventDetail) + databaseInterface.separator \
                            + escapeForDB(eventOutcome) + databaseInterface.separator \
                            + escapeForDB(eventOutcomeDetailNote) + "', " + escapeForDB(agent) + " )" )
Example #58
0
 def setVariable(self, variable, variableValue, microServiceChainLink):
     if not variableValue:
         variableValue = ""
     if not microServiceChainLink:
         microServiceChainLink = "NULL"
     else:
         microServiceChainLink = "'%s'" % (microServiceChainLink)
     variableValue = databaseInterface.MySQLdb.escape_string(variableValue)
     sql = """SELECT pk FROM UnitVariables WHERE unitType = '%s' AND unitUUID = '%s' AND variable = '%s';""" % (
         self.unitType, self.UUID, variable)
     rows = databaseInterface.queryAllSQL(sql)
     if rows:
         for row in rows:
             sql = """UPDATE UnitVariables SET variable='%s', variableValue='%s', microServiceChainLink=%s WHERE pk = '%s'; """ % (
                 variable, variableValue, microServiceChainLink, row[0])
             databaseInterface.runSQL(sql)
     else:
         sql = """INSERT INTO UnitVariables (pk, unitType, unitUUID, variable, variableValue, microserviceChainLink) VALUES ('%s', '%s', '%s', '%s', '%s', %s);""" % (
             uuid.uuid4().__str__(), self.unitType, self.UUID, variable,
             variableValue, microServiceChainLink)
         databaseInterface.runSQL(sql)