'restore(path)
The root of ``path`` will be /users/<current user>/.Trash/<timestamp>.
Removing the root from ``path`` will provide the original path.
Ensure parent directories exist and rename path.'

def restore(self, path):

    if (not path.startswith(self.trash_path(path))):
        raise IOError(errno.EPERM, (_('File    %s    is    not    in    trash') % path))
    original_path = []
    split_path = self.split(path)
    while (split_path[0] != self.trash_path(path)):
        original_path.append(split_path[1])
        split_path = self.split(split_path[0])
    original_path.reverse()
    original_path = self.join(posixpath.sep, *original_path)
    if self.exists(original_path):
        raise IOError(errno.EEXIST, (_('Path    %s    already    exists.') % str(smart_str(original_path))))
    self.rename(path, original_path)
