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
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
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
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