def upload_file(file: Path, s3_bucket: S3Bucket, supervisor_api: SupervisorAPI): slug = file.stem metadata = None try: snapshot_detail = supervisor_api.get_snapshot(slug) metadata_keys = ["type", "name", "date", "homeassistant"] metadata = { k: snapshot_detail[k] for k in snapshot_detail if k in metadata_keys } except SupervisorAPIError as err: logger.warning( f"Error getting snapshot info from Home Assistant Supervisor API : {err}" ) s3_bucket.upload_file(str(file), metadata)
def upload_file(file: Path, s3_bucket: S3Bucket, supervisor_api: SupervisorAPI): slug = file.stem metadata = None try: snapshot_detail = supervisor_api.get_snapshot(slug) # DEBUG logger.debug(f"SNAPSHOT DETAIL: {snapshot_detail}") # metadata_keys = ["type", "name", "date", "homeassistant"] metadata_keys = ["type", "name", "date"] metadata = { k: snapshot_detail[k] for k in snapshot_detail if k in metadata_keys } except SupervisorAPIError as err: logger.warning( f"Error getting snapshot info from Home Assistant Supervisor API : {err}" ) logger.info(f"Uploading {str(file)} [{metadata['name']}] to S3...") s3_bucket.upload_file(str(file), metadata) logger.info(f"Done.")
def main(): parser = argparse.ArgumentParser(description='Amazon S3 Backup.') parser.add_argument('config_file', help='JSON configuration file') args = parser.parse_args() try: config = read_config(args.config_file) except ConfigError as e: logger.exception("Error reading configuration file") sys.exit(1) logger.debug(config) logger.debug("Creating temporary tar file") tempfile = create_tempfile() try: create_tarfile(tempfile, config.get("sources"), config.get("exclusions")) except TarFileCreationError as e: logger.error(f"Error creating tar file: {e}") sys.exit(1) tempfile.seek(0) # Needed for S3 upload to work logger.debug("Creating S3 bucket object") s3_bucket = S3Bucket( config.get("s3").get("bucket_name"), config.get("s3").get("bucket_region"), config.get("s3").get("storage_class")) s3_metadata = { "sources": ",".join(config.get("sources")), "exclusions": ",".join(config.get("exclusions")) } s3_key = generate_s3_key(config.get("tarfile_name_prefix")) logger.info("Uploading file to S3") s3_bucket.upload_fileobj(tempfile, s3_key, s3_metadata) logger.debug("Closing temporary tar file") tempfile.close() logger.info("Done!")
f"Error getting snapshot info from Home Assistant Supervisor API : {err}" ) s3_bucket.upload_file(str(file), metadata) if __name__ == "__main__": set_log_level(os.environ.get("LOG_LEVEL")) try: config = Config() except ConfigError as err: logger.critical(f"Configuration error: {err}") sys.exit(1) s3_bucket = S3Bucket(config.bucket_name, config.bucket_region, config.storage_class) supervisor_api = SupervisorAPI(os.getenv("SUPERVISOR_TOKEN")) bucket_contents = [] try: bucket_contents = s3_bucket.list_bucket() except Exception: logger.critical("Error listing contents of S3 bucket!") sys.exit(1) local_files = [ x.name for x in config.monitor_path.iterdir() if x.is_file() ] for local_file in local_files:
def __init__(self, n_buckets): self.buckets = [] for _i in xrange(n_buckets): self.buckets.append(S3Bucket()) sleep(1)