Guest User

Untitled

a guest
Mar 22nd, 2018
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.00 KB | None | 0 0
  1. import argparse
  2. import boto3
  3. import botocore
  4. import os
  5.  
  6.  
  7. s3 = boto3.resource('s3')
  8.  
  9.  
  10. def file_exists_s3(bucket, s3_path):
  11. try:
  12. bucket.Object(s3_path).load()
  13. except botocore.exceptions.ClientError as e:
  14. if e.response['Error']['Code'] == '404':
  15. return False
  16. return True
  17.  
  18.  
  19. def export_file(bucket, s3_path, local_file_path, skip_existing=True,
  20. dryrun=True):
  21. if skip_existing:
  22. exists = file_exists_s3(bucket, s3_path)
  23. else:
  24. exists = False
  25. if exists:
  26. print("%s exists. Skipping" % s3_path)
  27. else:
  28. if dryrun:
  29. print("%s doesn't exist. Would have imported." % s3_path)
  30. else:
  31. print("%s doesn't exist. Importing." % s3_path)
  32. bucket.Object(s3_path).put(Body=open(local_file_path))
  33.  
  34.  
  35. def main():
  36. parser = argparse.ArgumentParser(
  37. description='Import papertrail logs to s3')
  38. parser.add_argument('source_dir', type=str, help="The source directory")
  39. parser.add_argument('bucket', type=str, help="The s3 bucket")
  40. parser.add_argument('--bucket_folder', type=str, default='papertrail/logs',
  41. help="The root folder on s3")
  42. parser.add_argument('--dryrun', default=False, action='store_true',
  43. help="Do a dry run: don't write any data")
  44. parser.add_argument('--skip_existing', default=False, action='store_true',
  45. help="Skip files that already exist in s3")
  46. args = parser.parse_args()
  47. bucket = s3.Bucket(args.bucket)
  48. for root, dirs, files in os.walk(args.source_dir):
  49. for file in files:
  50. parts = file.split('.')
  51. date = parts[0]
  52. s3_folder = "dt={}".format(date)
  53. local_file_path = os.path.join(root, file)
  54. s3_path = os.path.join(args.bucket_folder, s3_folder, file)
  55. export_file(bucket, s3_path, local_file_path,
  56. skip_existing=args.skip_existing, dryrun=args.dryrun)
  57.  
  58.  
  59. if __name__ == '__main__':
  60. main()
Add Comment
Please, Sign In to add comment