def exec(self,
             container: Container,
             command: str,
             context: Optional[str] = None,
             stdout: bool = True,
             stderr: bool = False,
             time_limit: Optional[int] = None
             ) -> ExecResponse:
        """
        Executes a given command inside a provided container.

        Parameters:
            container: the container to which the command should be issued.
            command: the command that should be executed.
            context: the working directory that should be used to perform the
                execution. If no context is provided, then the command will be
                executed at the root of the container.
            stdout: specifies whether or not output to the stdout should be
                included in the execution summary.
            stderr: specifies whether or not output to the stderr should be
                included in the execution summary.
            time_limit: an optional time limit that is applied to the
                execution. If the command fails to execute within the time
                limit, the command will be aborted and treated as a failure.

        Returns:
            a summary of the outcome of the execution.

        Raises:
            KeyError: if the container no longer exists on the server.
        """
        # FIXME perhaps these should be encoded as path variables?
        payload = {
            'command': command,
            'context': context,
            'stdout': stdout,
            'stderr': stderr,
            'time-limit': time_limit
        }
        path = "containers/{}/exec".format(container.uid)
        r = self.__api.post(path, json=payload)

        if r.status_code == 200:
            return ExecResponse.from_dict(r.json())
        if r.status_code == 404:
            raise KeyError("no container found with given UID: {}".format(container.uid))

        self.__api.handle_erroneous_response(r)
Executes a given command inside a provided container.

        Parameters:
            container: the container to which the command should be issued.
            command: the command that should be executed.
            context: the working directory that should be used to perform the
                execution. If no context is provided, then the command will be
                executed at the root of the container.
            stdout: specifies whether or not output to the stdout should be
                included in the execution summary.
            stderr: specifies whether or not output to the stderr should be
                included in the execution summary.
            time_limit: an optional time limit that is applied to the
                execution. If the command fails to execute within the time
                limit, the command will be aborted and treated as a failure.

        Returns:
            a summary of the outcome of the execution.

        Raises:
            KeyError: if the container no longer exists on the server.