code: def process_question(self):
          
          image_files = []
          question_data = json.loads(self.raw_data)
  
          # process urls for widgets
          self._recursive_url_find(question_data, image_files)
  
          # Process question
          if 'question' in question_data and 'images' in question_data['question']:
              question_data['question']['images'], qfiles = self.process_image_field(question_data['question'])
              image_files += qfiles
  
          # Process hints
          if 'hints' in question_data:
              for hint in question_data['hints']:
                  if 'images' in hint:
                      hint['images'], hfiles = self.process_image_field(hint)
                      image_files += hfiles
  
          # Process answers
          if 'answers' in question_data:
              for answer in question_data['answers']:
                  if 'images' in answer:
                      answer['images'], afiles = self.process_image_field(answer)
                      image_files += afiles
  
          # Process raw data
          self.raw_data = json.dumps(question_data, ensure_ascii=False)
          # Assume no need for special HTML processing for Persues questions
          # This avoids probelms with questions that contain < and > inequalities
          # in formulas that get erroneously parsed as HTML tags
          self.raw_data, data_files = super(PerseusQuestion, self).set_images(self.raw_data, parse_html=False)
  
          # Combine all files processed
          self.files = image_files + data_files
  
          # Return all filenames
          return [f.filename for f in self.files]
docs: Parse specific fields in `self.raw_data` that needs to have image strings
          processed: repalced by references to `CONTENTSTORAGE` + added as files.
          Returns: list of all files needed to render this question.