code: def update_graderoster(graderoster, requestor):
      
      label = graderoster.graderoster_label()
      url = "{}/{}".format(graderoster_url, encode_section_label(label))
      headers = {"Content-Type": "application/xhtml+xml",
                 "Connection": "keep-alive",
                 "X-UW-Act-as": requestor.uwnetid}
      body = graderoster.xhtml()
  
      response = SWS_GradeRoster_DAO().putURL(url, headers, body)
  
      if response.status != 200:
          root = etree.fromstring(response.data)
          msg = root.find(".//*[@class='status_description']").text.strip()
          raise DataFailureException(url, response.status, msg)
  
      return GradeRoster(data=etree.fromstring(response.data.strip()),
                         section=graderoster.section,
                         instructor=graderoster.instructor)
docs: Updates the graderoster resource for the passed restclients.GradeRoster
      model. A new restclients.GradeRoster is returned, representing the
      document returned from the update request.