docs: def do_GET_body(self):
          """Create body of GET."""
          iiif = self.iiif
          if (len(self.path) > 1024):
              raise IIIFError(code=414,
                              text="URI Too Long: Max 1024 chars, got %d\n" % len(self.path))
          try:
              # self.path has leading / then identifier/params...
              self.path = self.path.lstrip('/')
              sys.stderr.write("path = %s" % (self.path))
              iiif.parse_url(self.path)
          except Exception as e:
              # Something completely unexpected => 500
              raise IIIFError(code=500,
                              text="Internal Server Error: unexpected exception parsing request (" + str(e) + ")")
          # Now we have a full iiif request
          if (re.match('[\w\.\-]+$', iiif.identifier)):
              file = os.path.join(TESTIMAGE_DIR, iiif.identifier)
              if (not os.path.isfile(file)):
                  images_available = ""
                  for image_file in os.listdir(TESTIMAGE_DIR):
                      if (os.path.isfile(os.path.join(TESTIMAGE_DIR, image_file))):
                          images_available += "  " + image_file + "\n"
                  raise IIIFError(code=404, parameter="identifier",
                                  text="Image resource '" + iiif.identifier + "' not found. Local image files available:\n" + images_available)
          else:
              raise IIIFError(code=404, parameter="identifier",
                              text="Image resource '" + iiif.identifier + "' not found. Only local test images and http: URIs for images are supported.\n")
          # Now know image is OK
          manipulator = IIIFRequestHandler.manipulator_class()
          # Stash manipulator object so we can cleanup after reading file
          self.manipulator = manipulator
          self.compliance_uri = manipulator.compliance_uri
          if (iiif.info):
              # get size
              manipulator.srcfile = file
              manipulator.do_first()
              # most of info.json comes from config, a few things
              # specific to image
              i = IIIFInfo()
              i.identifier = self.iiif.identifier
              i.width = manipulator.width
              i.height = manipulator.height
              import io
              return(io.StringIO(i.as_json()), "application/json")
          else:
              (outfile, mime_type) = manipulator.derive(file, iiif)
              return(open(outfile, 'r'), mime_type)