<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def WaitUntilDone(self, timeout=None):
 """Wait until the operation is done. Args: timeout: timeout in seconds. None means default timeout (1 hour). 0 means no timeout (wait forever). Returns: Operation object with refreshed target_file. Raises: PollTimeoutError: if timeout is reached. """


    utils.Poll(
        generator=self.GetState,
        condition=lambda s: s != self.__class__.STATE_RUNNING,
        timeout=timeout)
    self.target_file = self.target_file.Get()
    return self