コード例 #1
0
	def _inDatabank( self, object_uuid ) :
		
		found, file_contents, error = False, "", None
		
		try:
			databank = Databank( self.config.databank.host, self.config.databank.username, self.config.databank.password )
		except:
			error = "Unknown error when connecting to Databank"
		else:
			# response = databank.getDataset( self.config.databank.silo, object_uuid[9:] )
			
			#print databank.getFileUrl( self.config.databank.silo, object_uuid[9:], "dc_" + object_uuid[9:] + "-master.xml" )
			response = databank.getFile( self.config.databank.silo, object_uuid[9:], "dc_" + object_uuid[9:] + "-master.xml" )
			
			if Databank.good( response ) :
				# It IS in databank
				
				#Databank.printResponse( response )
				file_contents = response.data # unicode( response.data.decode("UTF-8") )
			
				found = True
			
			elif response.status == 404:
				# It ISN'T in databank
				found = False
				file_contents = ""
				
			else :
				# It broke!
				error = "Unknown error working out if file exits in databank. Status=" + response.status
		
		return found, file_contents, error
コード例 #2
0
	def _createDataset( self, databank, silo, dataset ):
		''' Attempt to create dataset. If it's already created continue.'''
		response = databank.createDataset( silo, dataset )
		
		if not Databank.responseGood( response, [self.conflict_error] ) :
			self._debug( "Create Dataset: " + response.error )
			return self.Status.error
		
		return 	self.Status.ok
コード例 #3
0
	def step( self ) :
	
		error = None
		
		mets_file = self.command_line.exported_mets_file
		mets_file_original = mets_file + self.config.general.mets_file_original_extension 
		
		# Duplicate METS so we always have the original file (This has the current image paths)
		if self.debug:
			print "File locations:", mets_file, mets_file_original
		
		shutil.copyfile( mets_file, mets_file_original )
		error = self.checkFile( mets_file_original )
		
		if error == None:
			
			silo = self.config.databank.silo
			
			mets, error = self._open( mets_file )
			
			if mets:
			
				error = None
				
				schema = r"{http://www.loc.gov/METS/}"
				
				pretty_print = False
				if self.debug:
					pretty_print = True
					
				root = mets.getroot()
				for div_element in root.iterfind( r"./{0}structMap[@TYPE='PHYSICAL']/{0}div/{0}div".format (schema) ) :
				
					uuid = div_element.get( "CONTENTIDS" )[9:]
					
					for fptr in div_element.iterfind( "{0}fptr".format(schema) ) :
					
						xpath = r"./{0}fileSec/{0}fileGrp/{0}file[@ID='{1}']/{0}FLocat".format( schema, fptr.get( "FILEID" ) )
						
						file_link = root.find( xpath )
						file_href_basename = os.path.basename( file_link.get( "{http://www.w3.org/1999/xlink}href" ) )
						
						databank_href = self.config.update_mets.databank_url + Databank.getFileUrl( silo, uuid, file_href_basename )
						file_link.set( "{http://www.w3.org/1999/xlink}href", databank_href )
				
				success, error = self._save( mets_file, unicode( etree.tostring( root, xml_declaration=True, encoding='UTF-8', method='xml', pretty_print=pretty_print ), "utf-8" ) )
				
				if success:
					error = None
					
		else:
		
			error += " Unable to copy the METS file"
		
		return error
コード例 #4
0
	def _uploadFile( self, response_queue, databank, silo, dataset, file, filename=None ) :
		"""" Attempt to upload the file """
		mime = mimetypes.guess_type( file )[0]
		
		try_repeat = 3
		
		for tries in range( try_repeat ):
			response = databank.uploadFile( silo, dataset, file, format=mime, filename=filename )
			if Databank.responseGood( response ) :
				return self.Status.ok
			else:
				if tries != try_repeat-1:
					self._sendWarning( response_queue, file, "File failed to upload, trying " + str(try_repeat - tries - 1) + " more time [" + file + "]'" )
					
				time.sleep( 10 )
			
		return 	self.Status.error