class_docstr: Specifies the request expected by the process route.
  
  Note that all underscores in field names are replaced by dashes in the JSON.
class_docstr_tok: ["Specifies","the","request","expected","by","the","process","route",".","Note","that","all","underscores","in","field","names","are","replaced","by","dashes","in","the","JSON","."]
docstr: Validates the data in the request.
docstr_tok: ["Validates","the","data","in","the","request","."]
code: def validate(self) -> Tuple[bool, str]:
      """Validates the data in the request."""
      is_ok = True
      messages: List[str] = []
      if not self.portfolio_file:
          is_ok = False
          messages.append("Portfolio file must be specified.")
      if not self.market_data_file:
          is_ok = False
          messages.append("Market data file must be specified.")
      return is_ok, " ".join(messages)
  
imports: import os
  from os import path
  import time
  from typing import Dict, List, Tuple, Union
  from common import datatypes
  import dataclasses
  import flask
  import zmq
  from google.cloud import storage
label_desc: Use image node_id 3 for calling the JobRequest obj's underlying member method code with example usage: obj.validate() and returns: is_ok,  str