<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def insert_row( self, values, index=1, value_input_option='RAW' ):
 """Adds a row to the worksheet at the specified index and populates it with values. Widens the worksheet if there are more values than columns. :param values: List of values for the new row. :param index: (optional) Offset for the newly inserted row. :type index: int :param value_input_option: (optional) Determines how input data should be interpreted. See `ValueInputOption`_ in the Sheets API. :type value_input_option: str .. _ValueInputOption: https://developers.google.com/sheets/api/reference/rest/v4/ValueInputOption """


        body = {
            "requests": [{
                "insertDimension": {
                    "range": {
                      "sheetId": self.id,
                      "dimension": "ROWS",
                      "startIndex": index - 1,
                      "endIndex": index
                    }
                }
            }]
        }

        self.spreadsheet.batch_update(body)

        range_label = '%s!%s' % (self.title, 'A%s' % index)

        data = self.spreadsheet.values_update(
            range_label,
            params={
                'valueInputOption': value_input_option
            },
            body={
                'values': [values]
            }
        )

        return data