def add_zip_file_contents_to_resource(pk, zip_file_path): """Add zip file to existing resource and remove tmp zip file.""" zfile = None resource = None try: resource = utils.get_resource_by_shortkey(pk, or_404=False) zfile = zipfile.ZipFile(zip_file_path) num_files = len(zfile.infolist()) zcontents = utils.ZipContents(zfile) files = zcontents.get_files() resource.file_unpack_status = 'Running' resource.save() for i, f in enumerate(files): logger.debug("Adding file {0} to resource {1}".format(f.name, pk)) utils.add_file_to_resource(resource, f) resource.file_unpack_message = "Imported {0} of about {1} file(s) ...".format( i, num_files) resource.save() # This might make the resource unsuitable for public consumption resource.update_public_and_discoverable() # TODO: this is a bit of a lie because a different user requested the bag overwrite utils.resource_modified(resource, resource.creator, overwrite_bag=False) # Call success callback resource.file_unpack_message = None resource.file_unpack_status = 'Done' resource.save() except BaseResource.DoesNotExist: msg = "Unable to add zip file contents to non-existent resource {pk}." msg = msg.format(pk=pk) logger.error(msg) except: exc_info = "".join(traceback.format_exception(*sys.exc_info())) if resource: resource.file_unpack_status = 'Error' resource.file_unpack_message = exc_info resource.save() if zfile: zfile.close() logger.error(exc_info) finally: # Delete upload file os.unlink(zip_file_path)
def add_zip_file_contents_to_resource(pk, zip_file_path): zfile = None resource = None try: resource = utils.get_resource_by_shortkey(pk, or_404=False) zfile = zipfile.ZipFile(zip_file_path) num_files = len(zfile.infolist()) zcontents = utils.ZipContents(zfile) files = zcontents.get_files() resource.file_unpack_status = 'Running' resource.save() for i, f in enumerate(files): logger.debug("Adding file {0} to resource {1}".format(f.name, pk)) utils.add_file_to_resource(resource, f) resource.file_unpack_message = "Imported {0} of about {1} file(s) ...".format( i, num_files) resource.save() # Call success callback resource.file_unpack_message = None resource.file_unpack_status = 'Done' resource.save() except BaseResource.DoesNotExist: msg = "Unable to add zip file contents to non-existent resource {pk}." msg = msg.format(pk=pk) logger.error(msg) except: exc_info = "".join(traceback.format_exception(*sys.exc_info())) if resource: resource.file_unpack_status = 'Error' resource.file_unpack_message = exc_info resource.save() if zfile: zfile.close() logger.error(exc_info) finally: # Delete upload file os.unlink(zip_file_path)