def _backup_previous_version(func: Callable = None):
    """Private decorator to back up previous skill folder"""

    @wraps(func)
    def wrapper(self, *args, **kwargs):
        self.old_path = None
        if self.is_local:
            self.old_path = join(gettempdir(), self.name)
            if exists(self.old_path):
                rmtree(self.old_path)
            shutil.copytree(self.path, self.old_path)
        try:
            func(self, *args, **kwargs)

        # Modified skill or GitError should not restore working copy
        except (SkillModified, GitError, GitException):
            raise
        except Exception:
            LOG.info('Problem performing action. Restoring skill to '
                     'previous state...')
            if exists(self.path):
                rmtree(self.path)
            if self.old_path and exists(self.old_path):
                shutil.copytree(self.old_path, self.path)
            self.is_local = exists(self.path)
            raise

    return wrapper
def _backup_previous_version ( func : Callable = None ) : @ wraps ( func ) def wrapper ( self , * args , ** kwargs ) : self . old_path = None if self . is_local : self . old_path = join ( gettempdir ( ) , self . name ) if exists ( self . old_path ) : rmtree ( self . old_path ) shutil . copytree ( self . path , self . old_path ) try : func ( self , * args , ** kwargs ) except ( SkillModified , GitError , GitException ) : raise except Exception : LOG . info ( 'Problem performing action. Restoring skill to ' 'previous state...' ) if exists ( self . path ) : rmtree ( self . path ) if self . old_path and exists ( self . old_path ) : shutil . copytree ( self . old_path , self . path ) self . is_local = exists ( self . path ) raise return wrapper
Private decorator to back up previous skill folder