From 4b8410bb64dfd0980994a4172612a818761cae5f Mon Sep 17 00:00:00 2001 From: "philipp.goymann" <philipp.goymann@mpi-bn.mpg.de> Date: Wed, 26 Oct 2022 23:41:15 +0200 Subject: [PATCH] add cmd interface --- loosolab_s3/Utils.py | 69 +++++++++++++++++++++++++++++++++++++ loosolab_s3/cmd.py | 68 ++++++++++++++++++++++++++++++++++++ loosolab_s3/s3_functions.py | 4 +-- setup.py | 8 +++-- 4 files changed, 144 insertions(+), 5 deletions(-) create mode 100644 loosolab_s3/Utils.py create mode 100644 loosolab_s3/cmd.py diff --git a/loosolab_s3/Utils.py b/loosolab_s3/Utils.py new file mode 100644 index 0000000..50e70a4 --- /dev/null +++ b/loosolab_s3/Utils.py @@ -0,0 +1,69 @@ +#!/usr/bin/env python3 +import os +import sys +import time +import logging + +class Utils: + logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO) + def is_valid_file(self, parser, arg): + if not os.path.exists(arg): + parser.error("The file %s does not exist!" % arg) + else: + return open(arg, 'r') # return an open file handle + +#--------------------------------------------------------------------------------------------------------# + + def check_if_file_exists(self, files): + if len(files) == 0: + logging.error( "Their are no Files given!") + sys.exit(1) + for i in files: + if os.path.exists(i): + pass + else: + logging.error('File ' + i + ' didn\'t exist!') + sys.exit(1) + +#--------------------------------------------------------------------------------------------------------# + + def query_yes_no(self, question, default="yes"): + valid = {"yes": True, "y": True, "ye": True, + "no": False, "n": False} + if default is None: + prompt = " [y/n] " + elif default == "yes": + prompt = " [Y/n] " + elif default == "no": + prompt = " [y/N] " + else: + raise ValueError("invalid default answer: '%s'" % default) + while True: + sys.stdout.write(question + prompt) + choice = input().lower() + if default is not None and choice == '': + return valid[default] + elif choice in valid: + return valid[choice] + else: + sys.stdout.write("Please respond with 'yes' or 'no' " + "(or 'y' or 'n').\n") + +#--------------------------------------------------------------------------------------------------------# + + def waiting_points(self, message): + time.sleep(0.25) + print(message + ' {0}'.format('. '), end='\r') + time.sleep(0.25) + print(message + ' {0}'.format('.. '), end='\r') + time.sleep(0.25) + print(message + ' {0}'.format('... '), end='\r') + time.sleep(0.25) + print(message + ' {0}'.format('....'), end='\r') + +#--------------------------------------------------------------------------------------------------------# + + def check_argparser(self,args, required): + for arg in required: + if getattr(args, arg) == None: + sys.exit("ERROR: Missing argument --{0}".format(arg)) \ No newline at end of file diff --git a/loosolab_s3/cmd.py b/loosolab_s3/cmd.py new file mode 100644 index 0000000..edd9d7d --- /dev/null +++ b/loosolab_s3/cmd.py @@ -0,0 +1,68 @@ +#!/usr/bin/env python +""" CMD function for loosolab s3 """ + +import argparse +import sys + +#own functions +from loosolab_s3.Utils import Utils +from loosolab_s3.s3_functions import Loosolab_s3 + + +#--------------------------------------------------------------------------------------------------------# +#- MAIN -------------------------------------------------------------------------------------------------# +def run_s3_functions(): + utils = Utils() + args = argparsefunc() + + #start s3 session + credentials = { + "endpoint":args.endpoint, + "key":args.key, + "secret": args.secret, + "signature":args.signature + } + if args.no_log: + s3 = Loosolab_s3(credentials, logger=False) + else: + s3 = Loosolab_s3(credentials) + + #------------------------------------------------actions--------------------------------------------# + + #check if bucket exists + if args.bucket_exists: + utils.check_argparser(args, ['secret', "key", 'bucketname']) + if s3.check_s3_bucket_ex(args.bucketname): + print('Bucket ' + args.bucketname + ' exists!') + else: + print('Bucket ' + args.bucketname + ' dont exists!') + +#--------------------------------------------------------------------------------------------------------# +# parse command line arguments: +def argparsefunc(): + parser = argparse.ArgumentParser( + description="", add_help=False) + parser.add_argument('--key', help="user name") + parser.add_argument("--secret", help="s3 secret") + parser.add_argument("--signature", help="s3 signature",default='s3v4') + parser.add_argument("--endpoint", help="URL S3",default='https://s3.mpi-bn.mpg.de') + + #actions + parser.add_argument("--bucket_exists", action='store_true', help="check if bucket exists") + + #values + parser.add_argument("--bucketname") + parser.add_argument("--no_log", action='store_true', help='disable logging') + + parser.add_argument('-h', '--help', action='store_true', dest='show_help') + args = parser.parse_args() + + if args.show_help: + parser.print_help(sys.stderr) + if len(sys.argv)==1: + parser.print_help(sys.stderr) + sys.exit(1) + return args + +if __name__ == "__main__": + run_s3_functions() \ No newline at end of file diff --git a/loosolab_s3/s3_functions.py b/loosolab_s3/s3_functions.py index c47d552..e74c0aa 100644 --- a/loosolab_s3/s3_functions.py +++ b/loosolab_s3/s3_functions.py @@ -29,7 +29,7 @@ class Loosolab_s3: level = logging.INFO else: level = logging.CRITICAL - + self.logger = logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=level) self.logger = logging.getLogger('Loosolab_s3_logger') @@ -443,7 +443,7 @@ class Loosolab_s3: else: self.transfer.upload_file(local_file_name, bucket_name, file_name) #self.session.Bucket(bucket_name).upload_file(local_file_name, file_name, Config=self.transfer) - self.logger.info("All files are uploaded!" + str(file_list)) + self.logger.info("File " + str(local_file_name) + ' gets uploaded!') except Exception as e: self.__exception_log__("S3: Uploading files failed!" ,e) return diff --git a/setup.py b/setup.py index 38929e4..a26f754 100644 --- a/setup.py +++ b/setup.py @@ -7,10 +7,12 @@ setup(name='loosolab_s3', author_email='marina.kiweler@mpi-bn.mpg.de', license='MIT', packages=['loosolab_s3'], + entry_points = { + 'console_scripts': ['S3 = loosolab_s3.cmd:run_s3_functions'] + }, install_requires=[ - 'boto3', - 'botocore>=1.24.26' - ], + 'boto3', # ==1.21.25', + 'botocore'], classifiers = [ 'Programming Language :: Python :: 3' ], -- GitLab