Delete file/directory identified by `path` argument.

        Warning:
            `path` have to be in :attr:`path`.

        Args:
            path (str): Path of the file / directory you want to remove.

        Raises:
            IOError: If the file / directory doesn't exists, or is not in \
                     :attr:`path`.

def delete_by_path(self, path):
        """
        Delete file/directory identified by `path` argument.

        Warning:
            `path` have to be in :attr:`path`.

        Args:
            path (str): Path of the file / directory you want to remove.

        Raises:
            IOError: If the file / directory doesn't exists, or is not in \
                     :attr:`path`.
        """
        if not os.path.exists(path):
            raise IOError("Unknown path '%s'!" % path)

        if not path.startswith(self.path):
            raise IOError(
                "Path '%s' is not in the root of the storage ('%s')!" % (
                    path,
                    self.path
                )
            )

        if os.path.isfile(path):
            os.unlink(path)
            return self._recursive_remove_blank_dirs(path)

        shutil.rmtree(path)
        self._recursive_remove_blank_dirs(path)