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
"""A dictionary that is mapped to a json document on disk.
    When the document is created, an attempt is made to load existing contents from disk. To load changes from
    concurrent writes, run load(). To save and overwrite the current document on disk, run save().
    """
    path: Union[str, os.PathLike]
    def __init__(self, path: Union[str, os.PathLike], mode=0o664):
        super().__init__()
        self.path = path
        self.mode = mode
        self.load()
    def load(self):
        if not os.path.exists(self.path):
            return
        if os.path.isdir(self.path):
            raise IsADirectoryError
        with open(self.path, "r") as fd:
            self.update(json.load(fd))
    def save(self):
        if os.path.isdir(self.path):
            raise IsADirectoryError
        if not os.path.exists(self.path):
            mkdir(os.path.dirname(self.path))
        def opener(path, flags):
            _fd = os.open(path, flags, self.mode)
            os.chmod(path, mode=self.mode, follow_symlinks=True)
            return _fd
        with open(self.path, "w", opener=opener) as fd:
            json.dump(self, fd)
def start_thread(method, *args, **kwargs) -> FuncThread: