bbb-s3/bbb-s3.py
2021-03-10 21:45:00 +01:00

78 lines
2.4 KiB
Python

import os, glob, shutil, boto3, magic
from botocore.exceptions import NoCredentialsError
mime = magic.Magic(mime=True)
## Configuration Part
BUCKET_NAME = 'bigbluebutton'
DELETE_SERVER_FILES = True ## Set False (F should be capital) if you don't want to delete files from bbb-server
def upload_to_aws(local_file, bucket, s3_file):
ctype = mime.from_file(local_file)
s3 = boto3.client('s3')
try:
s3.upload_file(local_file, bucket, s3_file, ExtraArgs={'ContentType': ctype, 'ACL': "public-read"})
return True
except OSError as e:
if e.errno == errno.ENOENT:
print("\nFile not found\n")
except NoCredentialsError:
return False
def getListOfFiles(dirName):
listOfFile = os.listdir(dirName)
allFiles = list()
for entry in listOfFile:
fullPath = os.path.join(dirName, entry)
if os.path.isdir(fullPath):
allFiles = allFiles + getListOfFiles(fullPath)
else:
allFiles.append(fullPath)
return allFiles
def getListOfDirs(path):
return [os.path.basename(x) for x in filter(
os.path.isdir, glob.glob(os.path.join(path, '*')))]
def remove(path):
""" param <path> could either be relative or absolute. """
if (os.path.isfile(path) or os.path.islink(path)) and "metadata.xml" not in path:
os.remove(path) # remove the file
elif os.path.isdir(path):
shutil.rmtree(path) # remove dir and all contains
else:
pass
#raise ValueError("file {} is not a file or dir.".format(path))
def main():
dirName = os.getcwd();
listOfFiles = getListOfFiles(dirName)
listOfDirs = getListOfDirs(dirName)
for elem in listOfFiles:
listOfFiles = list()
for (dirpath, dirnames, filenames) in os.walk(dirName):
listOfFiles += [os.path.join(dirpath, file) for file in filenames]
for elem in listOfFiles:
relative_path = elem.replace(dirName,'')[1:]
if(relative_path!='bbb-s3.py'):
print("\nUploading "+relative_path)
uploaded = upload_to_aws(elem, BUCKET_NAME, relative_path)
if(uploaded and DELETE_SERVER_FILES):
remove(elem)
else:
print("\nNot able to delete files from your bbb-server, check file if its uploaded")
file_length = len(listOfFiles)
if(file_length==1):
for folder in listOfDirs:
remove(folder)
if __name__ == '__main__':
main()