def get_job_id(self, filename): """Get the job_id corresponding to the filename. :type filename: str :param filename: Stored filename. """ return Jobs.get_job_id(filename)
def download(self, keyname, job_check=False): """Initiate a Job, check its status, and download the archive if it's completed.""" archive_id = Inventory.get_archive_id(keyname) if not archive_id: log.error("{0} not found !") # check if the file exist on S3 ? return job = None job_id = Jobs.get_job_id(keyname) log.debug("Job: {0}".format(job_id)) if job_id: try: job = self.vault.get_job(job_id) except UnexpectedHTTPResponseError: # Return a 404 if the job is no more available self.delete_job(keyname) if not job: job = self.vault.retrieve_archive(archive_id) job_id = job.id Jobs.update_job_id(keyname, job_id) log.info( "Job {action}: {status_code} ({creation_date}/{completion_date})". format(**job.__dict__)) if job.completed: log.info("Downloading...") encrypted_out = tempfile.TemporaryFile() # Boto related, download the file in chunk chunk_size = 4 * 1024 * 1024 num_chunks = int(math.ceil(job.archive_size / float(chunk_size))) job._download_to_fileob(encrypted_out, num_chunks, chunk_size, True, (socket.error, httplib.IncompleteRead)) encrypted_out.seek(0) return encrypted_out else: log.info("Not completed yet") if job_check: return job return
def delete_job(self, filename): """Delete the job entry for the filename. :type filename: str :param filename: Stored filename. """ job = Jobs.get(Jobs.filename == filename) job.delete_instance()
def download(self, keyname, job_check=False): """Initiate a Job, check its status, and download the archive if it's completed.""" archive_id = Inventory.get_archive_id(keyname) if not archive_id: log.error("{0} not found !") # check if the file exist on S3 ? return job = None job_id = Jobs.get_job_id(keyname) log.debug("Job: {0}".format(job_id)) if job_id: try: job = self.vault.get_job(job_id) except UnexpectedHTTPResponseError: # Return a 404 if the job is no more available self.delete_job(keyname) if not job: job = self.vault.retrieve_archive(archive_id) job_id = job.id Jobs.update_job_id(keyname, job_id) log.info("Job {action}: {status_code} ({creation_date}/{completion_date})".format(**job.__dict__)) if job.completed: log.info("Downloading...") encrypted_out = tempfile.TemporaryFile() # Boto related, download the file in chunk chunk_size = 4 * 1024 * 1024 num_chunks = int(math.ceil(job.archive_size / float(chunk_size))) job._download_to_fileob(encrypted_out, num_chunks, chunk_size, True, (socket.error, httplib.IncompleteRead)) encrypted_out.seek(0) return encrypted_out else: log.info("Not completed yet") if job_check: return job return