def StartFileFetch(self, pathspec, request_data=None):
    # Create an index so we can find this pathspec later.
    index = self.GenerateIndex(pathspec)
    self.state.indexed_pathspecs[index] = pathspec

    request_data = request_data or {}
    request_data["index"] = index
    self.CallClient("StatFile", pathspec=pathspec,
                    next_state="StoreStat",
                    request_data=request_data)

    request = rdf_client.FingerprintRequest(pathspec=pathspec,
                                            max_filesize=self.state.file_size)
    request.AddRequest(
        fp_type=rdf_client.FingerprintTuple.Type.FPT_GENERIC,
        hashers=[rdf_client.FingerprintTuple.HashType.MD5,
                 rdf_client.FingerprintTuple.HashType.SHA1,
                 rdf_client.FingerprintTuple.HashType.SHA256])

    self.CallClient("HashFile", request, next_state="ReceiveFileHash",
                    request_data=request_data)
Get a command from the cmdset. This is mostly useful to
dataset/ETHPy150Open google/grr/grr/lib/flows/general/transfer.py/MultiGetFileMixin.StartFileFetch--crossover with--dataset/ETHPy150Open evennia/evennia/evennia/commands/cmdset.py/CmdSet.get