def update_spreadsheet_row(self, thread_id, header, value, updates, **args):
        response = None
        spreadsheet = self.get_first_spreadsheet(thread_id)
        headers = self.get_spreadsheet_header_items(spreadsheet)
        row = self.find_row_from_header(spreadsheet, header, value)
        if row:
            ids = self.get_row_ids(row)
            for head, val in updates.iteritems():
                index = self.get_index_of_header(headers, head)
                if not index or index >= len(ids) or not ids[index]:
                    continue
                response = self.edit_document(
                    thread_id=thread_id,
                    content=val,
                    format="markdown",
                    section_id=ids[index],
                    operation=self.REPLACE_SECTION,
                    **args)
        else:
            updates[header] = value
            indexed_items = {}
            extra_items = []
            for head, val in updates.iteritems():
                index = self.get_index_of_header(
                    headers, head, default=None)
                if index is None or index in indexed_items:
                    extra_items.append(val)
                else:
                    indexed_items[index] = val
            cells = []
            for i in range(max(indexed_items.keys()) + 1):
                if i in indexed_items:
                    cells.append(indexed_items[i])
                elif len(extra_items):
                    cells.append(extra_items.pop(0))
                else:
                    cells.append("")
            cells.extend(extra_items)
            content = "<tr>%s</tr>" % "".join(
                ["<td>%s</td>" % cell for cell in cells])
            section_id = self.get_last_row_item_id(spreadsheet)
            response = self.edit_document(
                thread_id=thread_id,
                content=content,
                section_id=section_id,
                operation=self.AFTER_SECTION,
                **args)
        return response
Finds the row where the given header column is the given value, and
dataset/ETHPy150Open quip/quip-api/python/quip.py/QuipClient.update_spreadsheet_row