When generating API stubs with the scaffold utility using, e.g., `python -m localstack.aws.scaffold sns`,
the scaffold creates method names from operation names, which are ugly when acronyms (subsequent uppercase characters that belong together).

Example:
`CreateSMSSandboxPhoneNumber` -> `create_s_m_s_sandbox_phone_number`

it would be nicer to have `create_sms_sandbox_phone_number`

This is a limitation of this method: https://github.com/localstack/localstack/blob/1888e66b85d7e6a8ee457bc7a732984fcf7aa830/localstack/utils/common.py#L978-L979
return [cls.from_json(j) for j in json_list]
    @classmethod
    def as_dict(cls, obj):
        if isinstance(obj, dict):
            return obj
        return obj.to_dict()
    def __str__(self):
        return self.to_json()
    def __repr__(self):
        return self.__str__()
class DelSafeDict(dict):
    """Useful when applying jsonpatch. Use it as follows:
    obj.__dict__ = DelSafeDict(obj.__dict__)
    apply_patch(obj.__dict__, patch)
    """
    def __delitem__(self, key, *args, **kwargs):
        self[key] = None
class CaptureOutput(object):
    """A context manager that captures stdout/stderr of the current thread. Use it as follows:
    with CaptureOutput() as c:
        ...
    print(c.stdout(), c.stderr())
    """
    orig_stdout = sys.stdout
    orig_stderr = sys.stderr
    orig___stdout = sys.__stdout__
    orig___stderr = sys.__stderr__
    CONTEXTS_BY_THREAD = {}
    class LogStreamIO(io.StringIO):