boto-updater.py 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import boto3
  2. from botocore.exceptions import ClientError
  3. import os.path
  4. # Arguments
  5. folder_to_sync = './test/data'
  6. bucket_target = 'my-bucket'
  7. # Create connection
  8. s3 = boto3.client('s3', use_ssl=False, endpoint_url="http://172.17.0.2:9000", aws_access_key_id="minio", aws_secret_access_key="miniokey")
  9. # Check bucket
  10. try:
  11. s3.head_bucket(Bucket=bucket_target)
  12. except ClientError as e:
  13. s3.create_bucket(Bucket=bucket_target)
  14. # Get file list
  15. # Source : https://stackoverflow.com/questions/3207219/how-do-i-list-all-files-of-a-directory
  16. local_file_list = os.listdir(folder_to_sync)
  17. bucket_file_list = [obj['Key'] for obj in s3.list_objects(Bucket=bucket_target)['Contents']]
  18. # Upload
  19. print("Uploading new files ...")
  20. for file_name in local_file_list:
  21. print(file_name, end=' ')
  22. file_path = folder_to_sync + '/' + file_name
  23. if file_name in bucket_file_list:
  24. # Todo : compare modification dates
  25. print('(Not updated)')
  26. elif os.path.isfile(file_path):
  27. res = s3.upload_file(file_path, bucket_target, file_name)
  28. print('(New file)')
  29. else:
  30. print('(Skipped)')
  31. print("Done")
  32. # Delete files
  33. print("Deleting removed files ...")
  34. for file_name in bucket_file_list:
  35. print(file_name, end=' ')
  36. if file_name in local_file_list:
  37. print('(Still present)')
  38. else:
  39. s3.delete_object(Bucket=bucket_target, Key=file_name)
  40. print('(Deleted)')
  41. print("Done")