import inspect import sys def sysarg_to_string(argv): """ Transform a list of strings into a single string Add quotes if needed :return: """ if argv is None or not argv: return "" result = "" first = True for s in argv: if not first: result += " " result += '"' + s + '"' if " " in s else s first = False if result[0] in ('"', "'"): result = result[1:-1] # strip quotes return result def get_class(qname): """ Loads a class from its full qualified name :param qname: :return: """ parts = qname.split('.') module = ".".join(parts[:-1]) m = __import__(module) for comp in parts[1:]: m = getattr(m, comp) return m def get_module(qname): """ Loads a module from its full qualified name :param qname: :return: """ parts = qname.split('.') m = __import__(qname) for comp in parts[1:]: m = getattr(m, comp) return m def new_object(kls, *args, **kwargs): """ New instance of an object :param kls: :param args: :param kwargs: :return: """ obj_type = get_class(kls) return obj_type(*args, **kwargs) def get_full_qualified_name(obj): """ Returns the full qualified name of a class (including its module name ) :param obj: :return: """ module = obj.__class__.__module__ if module is None or module == str.__class__.__module__: return obj.__class__.__name__ # Avoid reporting __builtin__ else: return module + '.' + obj.__class__.__name__ def get_classes(module_name): mod = get_module(module_name) for name in dir(mod): obj = getattr(mod, name) if inspect.isclass(obj): yield obj def remove_from_list(lst, to_remove): """ Removes elements from a list if they exist :param lst: :param to_remove: :return: """ for item in to_remove: if item in lst: lst.remove(item) return lst