'Call a GRR Client Action.'

def RunGrrClientAction(self, source):

    action_name = source.attributes['client_action']
    try:
        action_stub = server_stubs.ClientActionStub.classes[action_name]
    except KeyError:
        raise RuntimeError(('Client    action    %s    not    found.' % action_name))
    self.CallClient(action_stub, request_data={'artifact_name': self.current_artifact_name, 'source': source.ToPrimitiveDict()}, next_state='ProcessCollected', **self.InterpolateDict(source.attributes.get('action_args', {})))
