def verifyMetsFileSecChecksums(metsFile, date, taskUUID, transferDirectory, transferUUID, relativeDirectory="./"): print metsFile DSpaceMets = "metadata/submissionDocumentation/DSpaceMets" try: path = os.path.join(transferDirectory, DSpaceMets) if not os.path.isdir(path): os.mkdir(path) except: print "error creating DSpaceMets directory." exitCode = 0 metsDirectory = os.path.basename(os.path.dirname(metsFile)) if metsDirectory == "DSpace_export": outputDirectory = path else: outputDirectory = os.path.join(path, metsDirectory) if not os.path.isdir(outputDirectory): os.mkdir(outputDirectory) dest = os.path.join(outputDirectory, "mets.xml") renameAsSudo(metsFile, dest) src = metsFile.replace(transferDirectory, "%transferDirectory%") 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
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) src = fileFullPath.replace(transferDirectory, "%transferDirectory%") 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
def something(SIPDirectory, accessDirectory, objectsDirectory, DIPDirectory, SIPUUID, date, copy=False): #exitCode = 435 exitCode = 179 print SIPDirectory #For every file, & directory Try to find the matching file & directory in the objects directory for (path, dirs, files) in os.walk(accessDirectory): for file in files: accessPath = os.path.join(path, file) objectPath = accessPath.replace(accessDirectory, objectsDirectory, 1) objectName = os.path.basename(objectPath) objectNameExtensionIndex = objectName.rfind(".") if objectNameExtensionIndex != -1: objectName = objectName[:objectNameExtensionIndex + 1] objectNameLike = os.path.join( os.path.dirname(objectPath), objectName).replace(SIPDirectory, "%SIPDirectory%", 1) #sql = "SELECT fileUUID, currentLocation FROM Files WHERE currentLocation LIKE '%s%' AND removedTime = 0 AND SIPUUID = '%s'" % (objectNameLike, SIPUUID) #ValueError: unsupported format character ''' (0x27) at index 76 sql = "SELECT fileUUID, currentLocation FROM Files WHERE currentLocation LIKE '" + objectNameLike + "%' AND removedTime = 0 AND SIPUUID = '"+ SIPUUID + "'" c, sqlLock = databaseInterface.querySQL(sql) row = c.fetchone() if not row: print >>sys.stderr, "No corresponding object for:", accessPath.replace(SIPDirectory, "%SIPDirectory%", 1) exitCode = 1 update = [] while row != None: objectUUID = row[0] objectPath = row[1] objectExtension = objectPath.replace(objectNameLike, "", 1) print objectName[objectNameExtensionIndex + 1:], objectExtension, "\t", if objectExtension.find(".") != -1: print row = c.fetchone() continue print objectName[objectNameExtensionIndex + 1:], objectExtension, "\t", print row dipPath = os.path.join(DIPDirectory, "objects", "%s-%s" % (objectUUID, os.path.basename(accessPath))) if copy: print "TODO - copy not supported yet" else: # dest = dipPath renameAsSudo(accessPath, dest) src = accessPath.replace(SIPDirectory, "%SIPDirectory%") dst = dest.replace(SIPDirectory, "%SIPDirectory%") update.append((src, dst)) # row = c.fetchone() sqlLock.release() for src, dst in update: eventDetail = "" eventOutcomeDetailNote = "moved from=\"" + src + "\"; moved to=\"" + dst + "\"" updateFileLocation(src, dst, "movement", date, eventDetail, sipUUID=SIPUUID, eventOutcomeDetailNote = eventOutcomeDetailNote) return exitCode
def moveSIP(src, dst, transferUUID, sharedDirectoryPath): # os.rename(src, dst) if src.endswith("/"): src = src[:-1] dest = dst.replace(sharedDirectoryPath, "%sharedPath%", 1) if dest.endswith("/"): dest = os.path.join(dest, os.path.basename(src)) if dest.endswith("/."): dest = os.path.join(dest[:-1], os.path.basename(src)) updateDB(dest + "/", transferUUID) renameAsSudo(src, dst)
def moveSIP(src, dst, sipUUID, sharedDirectoryPath): # os.rename(src, dst) if src.endswith("/"): src = src[:-1] dest = dst.replace(sharedDirectoryPath, "%sharedPath%", 1) if dest.endswith("/"): dest = os.path.join(dest, os.path.basename(src)) if dest.endswith("/."): dest = os.path.join(dest[:-1], os.path.basename(src)) updateDB(dest + "/", sipUUID) renameAsSudo(src, dst)
def something(SIPDirectory, accessDirectory, objectsDirectory, DIPDirectory, SIPUUID, date, copy=False): # exitCode = 435 exitCode = 179 print SIPDirectory # For every file, & directory Try to find the matching file & directory in the objects directory for (path, dirs, files) in os.walk(accessDirectory): for file in files: accessPath = os.path.join(path, file) objectPath = accessPath.replace(accessDirectory, objectsDirectory, 1) objectName = os.path.basename(objectPath) objectNameExtensionIndex = objectName.rfind(".") if objectNameExtensionIndex != -1: objectName = objectName[:objectNameExtensionIndex + 1] objectNameLike = os.path.join( os.path.dirname(objectPath), objectName).replace(SIPDirectory, "%SIPDirectory%", 1) files = File.objects.filter(removedtime__isnull=True, currentlocation__startswith=objectNameLike, sip_id=SIPUUID) if not files.exists(): print >>sys.stderr, "No corresponding object for:", accessPath.replace(SIPDirectory, "%SIPDirectory%", 1) exitCode = 1 update = [] for objectUUID, objectPath in files.values_list('uuid', 'currentlocation'): objectExtension = objectPath.replace(objectNameLike, "", 1) print objectName[objectNameExtensionIndex + 1:], objectExtension, "\t", if objectExtension.find(".") != -1: continue print objectName[objectNameExtensionIndex + 1:], objectExtension, "\t", dipPath = os.path.join(DIPDirectory, "objects", "%s-%s" % (objectUUID, os.path.basename(accessPath))) if copy: print "TODO - copy not supported yet" else: dest = dipPath renameAsSudo(accessPath, dest) src = accessPath.replace(SIPDirectory, "%SIPDirectory%") dst = dest.replace(SIPDirectory, "%SIPDirectory%") update.append((src, dst)) for src, dst in update: eventDetail = "" eventOutcomeDetailNote = "moved from=\"" + src + "\"; moved to=\"" + dst + "\"" updateFileLocation(src, dst, "movement", date, eventDetail, sipUUID=SIPUUID, eventOutcomeDetailNote = eventOutcomeDetailNote) return exitCode
def moveSIP(src, dst, sipUUID, sharedDirectoryPath): # Prepare paths if src.endswith("/"): src = src[:-1] dest = dst.replace(sharedDirectoryPath, "%sharedPath%", 1) if dest.endswith("/"): dest = os.path.join(dest, os.path.basename(src)) if dest.endswith("/."): dest = os.path.join(dest[:-1], os.path.basename(src)) updateDB(dest + "/", sipUUID) # If destination already exists, delete it with warning dest_path = os.path.join(dst, os.path.basename(src)) if os.path.exists(dest_path): print(dest_path, 'exists, deleting', file=sys.stderr) shutil.rmtree(dest_path) renameAsSudo(src, dst)
def something(SIPDirectory, accessDirectory, objectsDirectory, DIPDirectory, SIPUUID, date, copy=False): #exitCode = 435 exitCode = 179 print SIPDirectory #For every file, & directory Try to find the matching file & directory in the objects directory for (path, dirs, files) in os.walk(accessDirectory): for file in files: accessPath = os.path.join(path, file) objectPath = accessPath.replace(accessDirectory, objectsDirectory, 1) objectName = os.path.basename(objectPath) objectNameExtensionIndex = objectName.rfind(".") if objectNameExtensionIndex != -1: objectName = objectName[:objectNameExtensionIndex + 1] objectNameLike = os.path.join(os.path.dirname(objectPath), objectName).replace( SIPDirectory, "%SIPDirectory%", 1) #sql = "SELECT fileUUID, currentLocation FROM Files WHERE currentLocation LIKE '%s%' AND removedTime = 0 AND SIPUUID = '%s'" % (objectNameLike, SIPUUID) #ValueError: unsupported format character ''' (0x27) at index 76 sql = "SELECT fileUUID, currentLocation FROM Files WHERE currentLocation LIKE '" + objectNameLike + "%' AND removedTime = 0 AND SIPUUID = '" + SIPUUID + "'" c, sqlLock = databaseInterface.querySQL(sql) row = c.fetchone() if not row: print >> sys.stderr, "No corresponding object for:", accessPath.replace( SIPDirectory, "%SIPDirectory%", 1) exitCode = 1 update = [] while row != None: objectUUID = row[0] objectPath = row[1] objectExtension = objectPath.replace(objectNameLike, "", 1) print objectName[objectNameExtensionIndex + 1:], objectExtension, "\t", if objectExtension.find(".") != -1: print row = c.fetchone() continue print objectName[objectNameExtensionIndex + 1:], objectExtension, "\t", print row dipPath = os.path.join( DIPDirectory, "objects", "%s-%s" % (objectUUID, os.path.basename(accessPath))) if copy: print "TODO - copy not supported yet" else: # dest = dipPath renameAsSudo(accessPath, dest) src = accessPath.replace(SIPDirectory, "%SIPDirectory%") dst = dest.replace(SIPDirectory, "%SIPDirectory%") update.append((src, dst)) # row = c.fetchone() sqlLock.release() for src, dst in update: eventDetail = "" eventOutcomeDetailNote = "moved from=\"" + src + "\"; moved to=\"" + dst + "\"" updateFileLocation( src, dst, "movement", date, eventDetail, sipUUID=SIPUUID, eventOutcomeDetailNote=eventOutcomeDetailNote) return exitCode