Regen all docs. (#700)

* Stop recursing if discovery == {}

* Generate docs with 'make docs'.
diff --git a/docs/dyn/sheets_v4.spreadsheets.values.html b/docs/dyn/sheets_v4.spreadsheets.values.html
index 01f8e62..ee1d085 100644
--- a/docs/dyn/sheets_v4.spreadsheets.values.html
+++ b/docs/dyn/sheets_v4.spreadsheets.values.html
@@ -81,16 +81,25 @@
   <code><a href="#batchClear">batchClear(spreadsheetId, body, x__xgafv=None)</a></code></p>
 <p class="firstline">Clears one or more ranges of values from a spreadsheet.</p>
 <p class="toc_element">
-  <code><a href="#batchGet">batchGet(spreadsheetId, majorDimension=None, ranges=None, dateTimeRenderOption=None, valueRenderOption=None, x__xgafv=None)</a></code></p>
+  <code><a href="#batchClearByDataFilter">batchClearByDataFilter(spreadsheetId, body, x__xgafv=None)</a></code></p>
+<p class="firstline">Clears one or more ranges of values from a spreadsheet.</p>
+<p class="toc_element">
+  <code><a href="#batchGet">batchGet(spreadsheetId, valueRenderOption=None, majorDimension=None, ranges=None, dateTimeRenderOption=None, x__xgafv=None)</a></code></p>
 <p class="firstline">Returns one or more ranges of values from a spreadsheet.</p>
 <p class="toc_element">
+  <code><a href="#batchGetByDataFilter">batchGetByDataFilter(spreadsheetId, body, x__xgafv=None)</a></code></p>
+<p class="firstline">Returns one or more ranges of values that match the specified data filters.</p>
+<p class="toc_element">
   <code><a href="#batchUpdate">batchUpdate(spreadsheetId, body, x__xgafv=None)</a></code></p>
 <p class="firstline">Sets values in one or more ranges of a spreadsheet.</p>
 <p class="toc_element">
-  <code><a href="#clear">clear(spreadsheetId, range, body, x__xgafv=None)</a></code></p>
+  <code><a href="#batchUpdateByDataFilter">batchUpdateByDataFilter(spreadsheetId, body, x__xgafv=None)</a></code></p>
+<p class="firstline">Sets values in one or more ranges of a spreadsheet.</p>
+<p class="toc_element">
+  <code><a href="#clear">clear(spreadsheetId, range, body=None, x__xgafv=None)</a></code></p>
 <p class="firstline">Clears values from a spreadsheet.</p>
 <p class="toc_element">
-  <code><a href="#get">get(spreadsheetId, range, majorDimension=None, dateTimeRenderOption=None, valueRenderOption=None, x__xgafv=None)</a></code></p>
+  <code><a href="#get">get(spreadsheetId, range, valueRenderOption=None, majorDimension=None, dateTimeRenderOption=None, x__xgafv=None)</a></code></p>
 <p class="firstline">Returns a range of values from a spreadsheet.</p>
 <p class="toc_element">
   <code><a href="#update">update(spreadsheetId, range, body, valueInputOption=None, x__xgafv=None, responseValueRenderOption=None, includeValuesInResponse=None, responseDateTimeRenderOption=None)</a></code></p>
@@ -180,8 +189,8 @@
         # (before the values were appended).
         # Empty if no table was found.
     "updates": { # The response when updating a range of values in a spreadsheet. # Information about the updates that were applied.
-      "updatedRange": "A String", # The range (in A1 notation) that updates were applied to.
       "updatedColumns": 42, # The number of columns where at least one cell in the column was updated.
+      "updatedRange": "A String", # The range (in A1 notation) that updates were applied to.
       "updatedRows": 42, # The number of rows where at least one cell in the row was updated.
       "updatedData": { # Data within a range of the spreadsheet. # The values of the cells after updates were applied.
           # This is only included if the request's `includeValuesInResponse` field
@@ -263,12 +272,153 @@
 </div>
 
 <div class="method">
-    <code class="details" id="batchGet">batchGet(spreadsheetId, majorDimension=None, ranges=None, dateTimeRenderOption=None, valueRenderOption=None, x__xgafv=None)</code>
+    <code class="details" id="batchClearByDataFilter">batchClearByDataFilter(spreadsheetId, body, x__xgafv=None)</code>
+  <pre>Clears one or more ranges of values from a spreadsheet.
+The caller must specify the spreadsheet ID and one or more
+DataFilters. Ranges matching any of the specified data
+filters will be cleared.  Only values are cleared -- all other properties
+of the cell (such as formatting, data validation, etc..) are kept.
+
+Args:
+  spreadsheetId: string, The ID of the spreadsheet to update. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # The request for clearing more than one range selected by a
+      # DataFilter in a spreadsheet.
+    "dataFilters": [ # The DataFilters used to determine which ranges to clear.
+      { # Filter that describes what data should be selected or returned from a
+          # request.
+        "developerMetadataLookup": { # Selects DeveloperMetadata that matches all of the specified fields.  For # Selects data associated with the developer metadata matching the criteria
+            # described by this DeveloperMetadataLookup.
+            # example, if only a metadata ID is specified this considers the
+            # DeveloperMetadata with that particular unique ID. If a metadata key is
+            # specified, this considers all developer metadata with that key.  If a
+            # key, visibility, and location type are all specified, this considers all
+            # developer metadata with that key and visibility that are associated with a
+            # location of that type.  In general, this
+            # selects all DeveloperMetadata that matches the intersection of all the
+            # specified fields; any field or combination of fields may be specified.
+          "metadataLocation": { # A location where metadata may be associated in a spreadsheet. # Limits the selected developer metadata to those entries associated with
+              # the specified location.  This field either matches exact locations or all
+              # intersecting locations according the specified
+              # locationMatchingStrategy.
+            "locationType": "A String", # The type of location this object represents.  This field is read-only.
+            "dimensionRange": { # A range along a single dimension on a sheet. # Represents the row or column when metadata is associated with
+                # a dimension. The specified DimensionRange must represent a single row
+                # or column; it cannot be unbounded or span multiple rows or columns.
+                # All indexes are zero-based.
+                # Indexes are half open: the start index is inclusive
+                # and the end index is exclusive.
+                # Missing indexes indicate the range is unbounded on that side.
+              "endIndex": 42, # The end (exclusive) of the span, or not set if unbounded.
+              "startIndex": 42, # The start (inclusive) of the span, or not set if unbounded.
+              "sheetId": 42, # The sheet this span is on.
+              "dimension": "A String", # The dimension of the span.
+            },
+            "spreadsheet": True or False, # True when metadata is associated with an entire spreadsheet.
+            "sheetId": 42, # The ID of the sheet when metadata is associated with an entire sheet.
+          },
+          "metadataValue": "A String", # Limits the selected developer metadata to that which has a matching
+              # DeveloperMetadata.metadata_value.
+          "locationMatchingStrategy": "A String", # Determines how this lookup matches the location.  If this field is
+              # specified as EXACT, only developer metadata associated on the exact
+              # location specified is matched.  If this field is specified to INTERSECTING,
+              # developer metadata associated on intersecting locations is also
+              # matched.  If left unspecified, this field assumes a default value of
+              # INTERSECTING.
+              # If this field is specified, a metadataLocation
+              # must also be specified.
+          "locationType": "A String", # Limits the selected developer metadata to those entries which are
+              # associated with locations of the specified type.  For example, when this
+              # field is specified as ROW this lookup
+              # only considers developer metadata associated on rows.  If the field is left
+              # unspecified, all location types are considered.  This field cannot be
+              # specified as SPREADSHEET when
+              # the locationMatchingStrategy
+              # is specified as INTERSECTING or when the
+              # metadataLocation is specified as a
+              # non-spreadsheet location: spreadsheet metadata cannot intersect any other
+              # developer metadata location.  This field also must be left unspecified when
+              # the locationMatchingStrategy
+              # is specified as EXACT.
+          "metadataId": 42, # Limits the selected developer metadata to that which has a matching
+              # DeveloperMetadata.metadata_id.
+          "visibility": "A String", # Limits the selected developer metadata to that which has a matching
+              # DeveloperMetadata.visibility.  If left unspecified, all developer
+              # metadata visibile to the requesting project is considered.
+          "metadataKey": "A String", # Limits the selected developer metadata to that which has a matching
+              # DeveloperMetadata.metadata_key.
+        },
+        "a1Range": "A String", # Selects data that matches the specified A1 range.
+        "gridRange": { # A range on a sheet. # Selects data that matches the range described by the GridRange.
+            # All indexes are zero-based.
+            # Indexes are half open, e.g the start index is inclusive
+            # and the end index is exclusive -- [start_index, end_index).
+            # Missing indexes indicate the range is unbounded on that side.
+            #
+            # For example, if `"Sheet1"` is sheet ID 0, then:
+            #
+            #   `Sheet1!A1:A1 == sheet_id: 0,
+            #                   start_row_index: 0, end_row_index: 1,
+            #                   start_column_index: 0, end_column_index: 1`
+            #
+            #   `Sheet1!A3:B4 == sheet_id: 0,
+            #                   start_row_index: 2, end_row_index: 4,
+            #                   start_column_index: 0, end_column_index: 2`
+            #
+            #   `Sheet1!A:B == sheet_id: 0,
+            #                 start_column_index: 0, end_column_index: 2`
+            #
+            #   `Sheet1!A5:B == sheet_id: 0,
+            #                  start_row_index: 4,
+            #                  start_column_index: 0, end_column_index: 2`
+            #
+            #   `Sheet1 == sheet_id:0`
+            #
+            # The start index must always be less than or equal to the end index.
+            # If the start index equals the end index, then the range is empty.
+            # Empty ranges are typically not meaningful and are usually rendered in the
+            # UI as `#REF!`.
+          "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
+          "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+          "sheetId": 42, # The sheet this range is on.
+          "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
+          "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
+        },
+      },
+    ],
+  }
+
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # The response when clearing a range of values selected with
+      # DataFilters in a spreadsheet.
+    "spreadsheetId": "A String", # The spreadsheet the updates were applied to.
+    "clearedRanges": [ # The ranges that were cleared, in A1 notation.
+        # (If the requests were for an unbounded range or a ranger larger
+        #  than the bounds of the sheet, this will be the actual ranges
+        #  that were cleared, bounded to the sheet's limits.)
+      "A String",
+    ],
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="batchGet">batchGet(spreadsheetId, valueRenderOption=None, majorDimension=None, ranges=None, dateTimeRenderOption=None, x__xgafv=None)</code>
   <pre>Returns one or more ranges of values from a spreadsheet.
 The caller must specify the spreadsheet ID and one or more ranges.
 
 Args:
   spreadsheetId: string, The ID of the spreadsheet to retrieve data from. (required)
+  valueRenderOption: string, How values should be represented in the output.
+The default render option is ValueRenderOption.FORMATTED_VALUE.
   majorDimension: string, The major dimension that results should use.
 
 For example, if the spreadsheet data is: `A1=1,B1=2,A2=3,B2=4`,
@@ -281,8 +431,6 @@
 This is ignored if value_render_option is
 FORMATTED_VALUE.
 The default dateTime render option is [DateTimeRenderOption.SERIAL_NUMBER].
-  valueRenderOption: string, How values should be represented in the output.
-The default render option is ValueRenderOption.FORMATTED_VALUE.
   x__xgafv: string, V1 error format.
     Allowed values
       1 - v1 error format
@@ -334,6 +482,294 @@
 </div>
 
 <div class="method">
+    <code class="details" id="batchGetByDataFilter">batchGetByDataFilter(spreadsheetId, body, x__xgafv=None)</code>
+  <pre>Returns one or more ranges of values that match the specified data filters.
+The caller must specify the spreadsheet ID and one or more
+DataFilters.  Ranges that match any of the data filters in
+the request will be returned.
+
+Args:
+  spreadsheetId: string, The ID of the spreadsheet to retrieve data from. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # The request for retrieving a range of values in a spreadsheet selected by a
+      # set of DataFilters.
+    "dateTimeRenderOption": "A String", # How dates, times, and durations should be represented in the output.
+        # This is ignored if value_render_option is
+        # FORMATTED_VALUE.
+        # The default dateTime render option is [DateTimeRenderOption.SERIAL_NUMBER].
+    "valueRenderOption": "A String", # How values should be represented in the output.
+        # The default render option is ValueRenderOption.FORMATTED_VALUE.
+    "dataFilters": [ # The data filters used to match the ranges of values to retrieve.  Ranges
+        # that match any of the specified data filters will be included in the
+        # response.
+      { # Filter that describes what data should be selected or returned from a
+          # request.
+        "developerMetadataLookup": { # Selects DeveloperMetadata that matches all of the specified fields.  For # Selects data associated with the developer metadata matching the criteria
+            # described by this DeveloperMetadataLookup.
+            # example, if only a metadata ID is specified this considers the
+            # DeveloperMetadata with that particular unique ID. If a metadata key is
+            # specified, this considers all developer metadata with that key.  If a
+            # key, visibility, and location type are all specified, this considers all
+            # developer metadata with that key and visibility that are associated with a
+            # location of that type.  In general, this
+            # selects all DeveloperMetadata that matches the intersection of all the
+            # specified fields; any field or combination of fields may be specified.
+          "metadataLocation": { # A location where metadata may be associated in a spreadsheet. # Limits the selected developer metadata to those entries associated with
+              # the specified location.  This field either matches exact locations or all
+              # intersecting locations according the specified
+              # locationMatchingStrategy.
+            "locationType": "A String", # The type of location this object represents.  This field is read-only.
+            "dimensionRange": { # A range along a single dimension on a sheet. # Represents the row or column when metadata is associated with
+                # a dimension. The specified DimensionRange must represent a single row
+                # or column; it cannot be unbounded or span multiple rows or columns.
+                # All indexes are zero-based.
+                # Indexes are half open: the start index is inclusive
+                # and the end index is exclusive.
+                # Missing indexes indicate the range is unbounded on that side.
+              "endIndex": 42, # The end (exclusive) of the span, or not set if unbounded.
+              "startIndex": 42, # The start (inclusive) of the span, or not set if unbounded.
+              "sheetId": 42, # The sheet this span is on.
+              "dimension": "A String", # The dimension of the span.
+            },
+            "spreadsheet": True or False, # True when metadata is associated with an entire spreadsheet.
+            "sheetId": 42, # The ID of the sheet when metadata is associated with an entire sheet.
+          },
+          "metadataValue": "A String", # Limits the selected developer metadata to that which has a matching
+              # DeveloperMetadata.metadata_value.
+          "locationMatchingStrategy": "A String", # Determines how this lookup matches the location.  If this field is
+              # specified as EXACT, only developer metadata associated on the exact
+              # location specified is matched.  If this field is specified to INTERSECTING,
+              # developer metadata associated on intersecting locations is also
+              # matched.  If left unspecified, this field assumes a default value of
+              # INTERSECTING.
+              # If this field is specified, a metadataLocation
+              # must also be specified.
+          "locationType": "A String", # Limits the selected developer metadata to those entries which are
+              # associated with locations of the specified type.  For example, when this
+              # field is specified as ROW this lookup
+              # only considers developer metadata associated on rows.  If the field is left
+              # unspecified, all location types are considered.  This field cannot be
+              # specified as SPREADSHEET when
+              # the locationMatchingStrategy
+              # is specified as INTERSECTING or when the
+              # metadataLocation is specified as a
+              # non-spreadsheet location: spreadsheet metadata cannot intersect any other
+              # developer metadata location.  This field also must be left unspecified when
+              # the locationMatchingStrategy
+              # is specified as EXACT.
+          "metadataId": 42, # Limits the selected developer metadata to that which has a matching
+              # DeveloperMetadata.metadata_id.
+          "visibility": "A String", # Limits the selected developer metadata to that which has a matching
+              # DeveloperMetadata.visibility.  If left unspecified, all developer
+              # metadata visibile to the requesting project is considered.
+          "metadataKey": "A String", # Limits the selected developer metadata to that which has a matching
+              # DeveloperMetadata.metadata_key.
+        },
+        "a1Range": "A String", # Selects data that matches the specified A1 range.
+        "gridRange": { # A range on a sheet. # Selects data that matches the range described by the GridRange.
+            # All indexes are zero-based.
+            # Indexes are half open, e.g the start index is inclusive
+            # and the end index is exclusive -- [start_index, end_index).
+            # Missing indexes indicate the range is unbounded on that side.
+            #
+            # For example, if `"Sheet1"` is sheet ID 0, then:
+            #
+            #   `Sheet1!A1:A1 == sheet_id: 0,
+            #                   start_row_index: 0, end_row_index: 1,
+            #                   start_column_index: 0, end_column_index: 1`
+            #
+            #   `Sheet1!A3:B4 == sheet_id: 0,
+            #                   start_row_index: 2, end_row_index: 4,
+            #                   start_column_index: 0, end_column_index: 2`
+            #
+            #   `Sheet1!A:B == sheet_id: 0,
+            #                 start_column_index: 0, end_column_index: 2`
+            #
+            #   `Sheet1!A5:B == sheet_id: 0,
+            #                  start_row_index: 4,
+            #                  start_column_index: 0, end_column_index: 2`
+            #
+            #   `Sheet1 == sheet_id:0`
+            #
+            # The start index must always be less than or equal to the end index.
+            # If the start index equals the end index, then the range is empty.
+            # Empty ranges are typically not meaningful and are usually rendered in the
+            # UI as `#REF!`.
+          "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
+          "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+          "sheetId": 42, # The sheet this range is on.
+          "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
+          "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
+        },
+      },
+    ],
+    "majorDimension": "A String", # The major dimension that results should use.
+        # 
+        # For example, if the spreadsheet data is: `A1=1,B1=2,A2=3,B2=4`,
+        # then a request that selects that range and sets `majorDimension=ROWS` will
+        # return `[[1,2],[3,4]]`,
+        # whereas a request that sets `majorDimension=COLUMNS` will return
+        # `[[1,3],[2,4]]`.
+  }
+
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # The response when retrieving more than one range of values in a spreadsheet
+      # selected by DataFilters.
+    "spreadsheetId": "A String", # The ID of the spreadsheet the data was retrieved from.
+    "valueRanges": [ # The requested values with the list of data filters that matched them.
+      { # A value range that was matched by one or more data filers.
+        "valueRange": { # Data within a range of the spreadsheet. # The values matched by the DataFilter.
+          "range": "A String", # The range the values cover, in A1 notation.
+              # For output, this range indicates the entire requested range,
+              # even though the values will exclude trailing rows and columns.
+              # When appending values, this field represents the range to search for a
+              # table, after which values will be appended.
+          "values": [ # The data that was read or to be written.  This is an array of arrays,
+              # the outer array representing all the data and each inner array
+              # representing a major dimension. Each item in the inner array
+              # corresponds with one cell.
+              #
+              # For output, empty trailing rows and columns will not be included.
+              #
+              # For input, supported value types are: bool, string, and double.
+              # Null values will be skipped.
+              # To set a cell to an empty value, set the string value to an empty string.
+            [
+              "",
+            ],
+          ],
+          "majorDimension": "A String", # The major dimension of the values.
+              #
+              # For output, if the spreadsheet data is: `A1=1,B1=2,A2=3,B2=4`,
+              # then requesting `range=A1:B2,majorDimension=ROWS` will return
+              # `[[1,2],[3,4]]`,
+              # whereas requesting `range=A1:B2,majorDimension=COLUMNS` will return
+              # `[[1,3],[2,4]]`.
+              #
+              # For input, with `range=A1:B2,majorDimension=ROWS` then `[[1,2],[3,4]]`
+              # will set `A1=1,B1=2,A2=3,B2=4`. With `range=A1:B2,majorDimension=COLUMNS`
+              # then `[[1,2],[3,4]]` will set `A1=1,B1=3,A2=2,B2=4`.
+              #
+              # When writing, if this field is not set, it defaults to ROWS.
+        },
+        "dataFilters": [ # The DataFilters from the request that matched the range of
+            # values.
+          { # Filter that describes what data should be selected or returned from a
+              # request.
+            "developerMetadataLookup": { # Selects DeveloperMetadata that matches all of the specified fields.  For # Selects data associated with the developer metadata matching the criteria
+                # described by this DeveloperMetadataLookup.
+                # example, if only a metadata ID is specified this considers the
+                # DeveloperMetadata with that particular unique ID. If a metadata key is
+                # specified, this considers all developer metadata with that key.  If a
+                # key, visibility, and location type are all specified, this considers all
+                # developer metadata with that key and visibility that are associated with a
+                # location of that type.  In general, this
+                # selects all DeveloperMetadata that matches the intersection of all the
+                # specified fields; any field or combination of fields may be specified.
+              "metadataLocation": { # A location where metadata may be associated in a spreadsheet. # Limits the selected developer metadata to those entries associated with
+                  # the specified location.  This field either matches exact locations or all
+                  # intersecting locations according the specified
+                  # locationMatchingStrategy.
+                "locationType": "A String", # The type of location this object represents.  This field is read-only.
+                "dimensionRange": { # A range along a single dimension on a sheet. # Represents the row or column when metadata is associated with
+                    # a dimension. The specified DimensionRange must represent a single row
+                    # or column; it cannot be unbounded or span multiple rows or columns.
+                    # All indexes are zero-based.
+                    # Indexes are half open: the start index is inclusive
+                    # and the end index is exclusive.
+                    # Missing indexes indicate the range is unbounded on that side.
+                  "endIndex": 42, # The end (exclusive) of the span, or not set if unbounded.
+                  "startIndex": 42, # The start (inclusive) of the span, or not set if unbounded.
+                  "sheetId": 42, # The sheet this span is on.
+                  "dimension": "A String", # The dimension of the span.
+                },
+                "spreadsheet": True or False, # True when metadata is associated with an entire spreadsheet.
+                "sheetId": 42, # The ID of the sheet when metadata is associated with an entire sheet.
+              },
+              "metadataValue": "A String", # Limits the selected developer metadata to that which has a matching
+                  # DeveloperMetadata.metadata_value.
+              "locationMatchingStrategy": "A String", # Determines how this lookup matches the location.  If this field is
+                  # specified as EXACT, only developer metadata associated on the exact
+                  # location specified is matched.  If this field is specified to INTERSECTING,
+                  # developer metadata associated on intersecting locations is also
+                  # matched.  If left unspecified, this field assumes a default value of
+                  # INTERSECTING.
+                  # If this field is specified, a metadataLocation
+                  # must also be specified.
+              "locationType": "A String", # Limits the selected developer metadata to those entries which are
+                  # associated with locations of the specified type.  For example, when this
+                  # field is specified as ROW this lookup
+                  # only considers developer metadata associated on rows.  If the field is left
+                  # unspecified, all location types are considered.  This field cannot be
+                  # specified as SPREADSHEET when
+                  # the locationMatchingStrategy
+                  # is specified as INTERSECTING or when the
+                  # metadataLocation is specified as a
+                  # non-spreadsheet location: spreadsheet metadata cannot intersect any other
+                  # developer metadata location.  This field also must be left unspecified when
+                  # the locationMatchingStrategy
+                  # is specified as EXACT.
+              "metadataId": 42, # Limits the selected developer metadata to that which has a matching
+                  # DeveloperMetadata.metadata_id.
+              "visibility": "A String", # Limits the selected developer metadata to that which has a matching
+                  # DeveloperMetadata.visibility.  If left unspecified, all developer
+                  # metadata visibile to the requesting project is considered.
+              "metadataKey": "A String", # Limits the selected developer metadata to that which has a matching
+                  # DeveloperMetadata.metadata_key.
+            },
+            "a1Range": "A String", # Selects data that matches the specified A1 range.
+            "gridRange": { # A range on a sheet. # Selects data that matches the range described by the GridRange.
+                # All indexes are zero-based.
+                # Indexes are half open, e.g the start index is inclusive
+                # and the end index is exclusive -- [start_index, end_index).
+                # Missing indexes indicate the range is unbounded on that side.
+                #
+                # For example, if `"Sheet1"` is sheet ID 0, then:
+                #
+                #   `Sheet1!A1:A1 == sheet_id: 0,
+                #                   start_row_index: 0, end_row_index: 1,
+                #                   start_column_index: 0, end_column_index: 1`
+                #
+                #   `Sheet1!A3:B4 == sheet_id: 0,
+                #                   start_row_index: 2, end_row_index: 4,
+                #                   start_column_index: 0, end_column_index: 2`
+                #
+                #   `Sheet1!A:B == sheet_id: 0,
+                #                 start_column_index: 0, end_column_index: 2`
+                #
+                #   `Sheet1!A5:B == sheet_id: 0,
+                #                  start_row_index: 4,
+                #                  start_column_index: 0, end_column_index: 2`
+                #
+                #   `Sheet1 == sheet_id:0`
+                #
+                # The start index must always be less than or equal to the end index.
+                # If the start index equals the end index, then the range is empty.
+                # Empty ranges are typically not meaningful and are usually rendered in the
+                # UI as `#REF!`.
+              "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
+              "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+              "sheetId": 42, # The sheet this range is on.
+              "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
+              "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
+            },
+          },
+        ],
+      },
+    ],
+  }</pre>
+</div>
+
+<div class="method">
     <code class="details" id="batchUpdate">batchUpdate(spreadsheetId, body, x__xgafv=None)</code>
   <pre>Sets values in one or more ranges of a spreadsheet.
 The caller must specify the spreadsheet ID,
@@ -383,13 +819,6 @@
             # When writing, if this field is not set, it defaults to ROWS.
       },
     ],
-    "responseDateTimeRenderOption": "A String", # Determines how dates, times, and durations in the response should be
-        # rendered. This is ignored if response_value_render_option is
-        # FORMATTED_VALUE.
-        # The default dateTime render option is
-        # DateTimeRenderOption.SERIAL_NUMBER.
-    "responseValueRenderOption": "A String", # Determines how values in the response should be rendered.
-        # The default render option is ValueRenderOption.FORMATTED_VALUE.
     "includeValuesInResponse": True or False, # Determines if the update response should include the values
         # of the cells that were updated. By default, responses
         # do not include the updated values. The `updatedData` field within
@@ -397,6 +826,13 @@
         # the updated values. If the range to write was larger than than the range
         # actually written, the response will include all values in the requested
         # range (excluding trailing empty rows and columns).
+    "responseValueRenderOption": "A String", # Determines how values in the response should be rendered.
+        # The default render option is ValueRenderOption.FORMATTED_VALUE.
+    "responseDateTimeRenderOption": "A String", # Determines how dates, times, and durations in the response should be
+        # rendered. This is ignored if response_value_render_option is
+        # FORMATTED_VALUE.
+        # The default dateTime render option is
+        # DateTimeRenderOption.SERIAL_NUMBER.
   }
 
   x__xgafv: string, V1 error format.
@@ -411,8 +847,8 @@
     "responses": [ # One UpdateValuesResponse per requested range, in the same order as
         # the requests appeared.
       { # The response when updating a range of values in a spreadsheet.
-        "updatedRange": "A String", # The range (in A1 notation) that updates were applied to.
         "updatedColumns": 42, # The number of columns where at least one cell in the column was updated.
+        "updatedRange": "A String", # The range (in A1 notation) that updates were applied to.
         "updatedRows": 42, # The number of rows where at least one cell in the row was updated.
         "updatedData": { # Data within a range of the spreadsheet. # The values of the cells after updates were applied.
             # This is only included if the request's `includeValuesInResponse` field
@@ -457,15 +893,324 @@
     "totalUpdatedColumns": 42, # The total number of columns where at least one cell in the column was
         # updated.
     "totalUpdatedCells": 42, # The total number of cells updated.
-    "spreadsheetId": "A String", # The spreadsheet the updates were applied to.
     "totalUpdatedRows": 42, # The total number of rows where at least one cell in the row was updated.
+    "spreadsheetId": "A String", # The spreadsheet the updates were applied to.
     "totalUpdatedSheets": 42, # The total number of sheets where at least one cell in the sheet was
         # updated.
   }</pre>
 </div>
 
 <div class="method">
-    <code class="details" id="clear">clear(spreadsheetId, range, body, x__xgafv=None)</code>
+    <code class="details" id="batchUpdateByDataFilter">batchUpdateByDataFilter(spreadsheetId, body, x__xgafv=None)</code>
+  <pre>Sets values in one or more ranges of a spreadsheet.
+The caller must specify the spreadsheet ID,
+a valueInputOption, and one or more
+DataFilterValueRanges.
+
+Args:
+  spreadsheetId: string, The ID of the spreadsheet to update. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # The request for updating more than one range of values in a spreadsheet.
+    "valueInputOption": "A String", # How the input data should be interpreted.
+    "data": [ # The new values to apply to the spreadsheet.  If more than one range is
+        # matched by the specified DataFilter the specified values will be
+        # applied to all of those ranges.
+      { # A range of values whose location is specified by a DataFilter.
+        "values": [ # The data to be written.  If the provided values exceed any of the ranges
+            # matched by the data filter then the request will fail.  If the provided
+            # values are less than the matched ranges only the specified values will be
+            # written, existing values in the matched ranges will remain unaffected.
+          [
+            "",
+          ],
+        ],
+        "dataFilter": { # Filter that describes what data should be selected or returned from a # The data filter describing the location of the values in the spreadsheet.
+            # request.
+          "developerMetadataLookup": { # Selects DeveloperMetadata that matches all of the specified fields.  For # Selects data associated with the developer metadata matching the criteria
+              # described by this DeveloperMetadataLookup.
+              # example, if only a metadata ID is specified this considers the
+              # DeveloperMetadata with that particular unique ID. If a metadata key is
+              # specified, this considers all developer metadata with that key.  If a
+              # key, visibility, and location type are all specified, this considers all
+              # developer metadata with that key and visibility that are associated with a
+              # location of that type.  In general, this
+              # selects all DeveloperMetadata that matches the intersection of all the
+              # specified fields; any field or combination of fields may be specified.
+            "metadataLocation": { # A location where metadata may be associated in a spreadsheet. # Limits the selected developer metadata to those entries associated with
+                # the specified location.  This field either matches exact locations or all
+                # intersecting locations according the specified
+                # locationMatchingStrategy.
+              "locationType": "A String", # The type of location this object represents.  This field is read-only.
+              "dimensionRange": { # A range along a single dimension on a sheet. # Represents the row or column when metadata is associated with
+                  # a dimension. The specified DimensionRange must represent a single row
+                  # or column; it cannot be unbounded or span multiple rows or columns.
+                  # All indexes are zero-based.
+                  # Indexes are half open: the start index is inclusive
+                  # and the end index is exclusive.
+                  # Missing indexes indicate the range is unbounded on that side.
+                "endIndex": 42, # The end (exclusive) of the span, or not set if unbounded.
+                "startIndex": 42, # The start (inclusive) of the span, or not set if unbounded.
+                "sheetId": 42, # The sheet this span is on.
+                "dimension": "A String", # The dimension of the span.
+              },
+              "spreadsheet": True or False, # True when metadata is associated with an entire spreadsheet.
+              "sheetId": 42, # The ID of the sheet when metadata is associated with an entire sheet.
+            },
+            "metadataValue": "A String", # Limits the selected developer metadata to that which has a matching
+                # DeveloperMetadata.metadata_value.
+            "locationMatchingStrategy": "A String", # Determines how this lookup matches the location.  If this field is
+                # specified as EXACT, only developer metadata associated on the exact
+                # location specified is matched.  If this field is specified to INTERSECTING,
+                # developer metadata associated on intersecting locations is also
+                # matched.  If left unspecified, this field assumes a default value of
+                # INTERSECTING.
+                # If this field is specified, a metadataLocation
+                # must also be specified.
+            "locationType": "A String", # Limits the selected developer metadata to those entries which are
+                # associated with locations of the specified type.  For example, when this
+                # field is specified as ROW this lookup
+                # only considers developer metadata associated on rows.  If the field is left
+                # unspecified, all location types are considered.  This field cannot be
+                # specified as SPREADSHEET when
+                # the locationMatchingStrategy
+                # is specified as INTERSECTING or when the
+                # metadataLocation is specified as a
+                # non-spreadsheet location: spreadsheet metadata cannot intersect any other
+                # developer metadata location.  This field also must be left unspecified when
+                # the locationMatchingStrategy
+                # is specified as EXACT.
+            "metadataId": 42, # Limits the selected developer metadata to that which has a matching
+                # DeveloperMetadata.metadata_id.
+            "visibility": "A String", # Limits the selected developer metadata to that which has a matching
+                # DeveloperMetadata.visibility.  If left unspecified, all developer
+                # metadata visibile to the requesting project is considered.
+            "metadataKey": "A String", # Limits the selected developer metadata to that which has a matching
+                # DeveloperMetadata.metadata_key.
+          },
+          "a1Range": "A String", # Selects data that matches the specified A1 range.
+          "gridRange": { # A range on a sheet. # Selects data that matches the range described by the GridRange.
+              # All indexes are zero-based.
+              # Indexes are half open, e.g the start index is inclusive
+              # and the end index is exclusive -- [start_index, end_index).
+              # Missing indexes indicate the range is unbounded on that side.
+              #
+              # For example, if `"Sheet1"` is sheet ID 0, then:
+              #
+              #   `Sheet1!A1:A1 == sheet_id: 0,
+              #                   start_row_index: 0, end_row_index: 1,
+              #                   start_column_index: 0, end_column_index: 1`
+              #
+              #   `Sheet1!A3:B4 == sheet_id: 0,
+              #                   start_row_index: 2, end_row_index: 4,
+              #                   start_column_index: 0, end_column_index: 2`
+              #
+              #   `Sheet1!A:B == sheet_id: 0,
+              #                 start_column_index: 0, end_column_index: 2`
+              #
+              #   `Sheet1!A5:B == sheet_id: 0,
+              #                  start_row_index: 4,
+              #                  start_column_index: 0, end_column_index: 2`
+              #
+              #   `Sheet1 == sheet_id:0`
+              #
+              # The start index must always be less than or equal to the end index.
+              # If the start index equals the end index, then the range is empty.
+              # Empty ranges are typically not meaningful and are usually rendered in the
+              # UI as `#REF!`.
+            "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
+            "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+            "sheetId": 42, # The sheet this range is on.
+            "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
+            "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
+          },
+        },
+        "majorDimension": "A String", # The major dimension of the values.
+      },
+    ],
+    "includeValuesInResponse": True or False, # Determines if the update response should include the values
+        # of the cells that were updated. By default, responses
+        # do not include the updated values. The `updatedData` field within
+        # each of the BatchUpdateValuesResponse.responses will contain
+        # the updated values. If the range to write was larger than than the range
+        # actually written, the response will include all values in the requested
+        # range (excluding trailing empty rows and columns).
+    "responseValueRenderOption": "A String", # Determines how values in the response should be rendered.
+        # The default render option is ValueRenderOption.FORMATTED_VALUE.
+    "responseDateTimeRenderOption": "A String", # Determines how dates, times, and durations in the response should be
+        # rendered. This is ignored if response_value_render_option is
+        # FORMATTED_VALUE.
+        # The default dateTime render option is
+        # DateTimeRenderOption.SERIAL_NUMBER.
+  }
+
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # The response when updating a range of values in a spreadsheet.
+    "responses": [ # The response for each range updated.
+      { # The response when updating a range of values by a data filter in a
+          # spreadsheet.
+        "updatedRange": "A String", # The range (in A1 notation) that updates were applied to.
+        "updatedColumns": 42, # The number of columns where at least one cell in the column was updated.
+        "dataFilter": { # Filter that describes what data should be selected or returned from a # The data filter that selected the range that was updated.
+            # request.
+          "developerMetadataLookup": { # Selects DeveloperMetadata that matches all of the specified fields.  For # Selects data associated with the developer metadata matching the criteria
+              # described by this DeveloperMetadataLookup.
+              # example, if only a metadata ID is specified this considers the
+              # DeveloperMetadata with that particular unique ID. If a metadata key is
+              # specified, this considers all developer metadata with that key.  If a
+              # key, visibility, and location type are all specified, this considers all
+              # developer metadata with that key and visibility that are associated with a
+              # location of that type.  In general, this
+              # selects all DeveloperMetadata that matches the intersection of all the
+              # specified fields; any field or combination of fields may be specified.
+            "metadataLocation": { # A location where metadata may be associated in a spreadsheet. # Limits the selected developer metadata to those entries associated with
+                # the specified location.  This field either matches exact locations or all
+                # intersecting locations according the specified
+                # locationMatchingStrategy.
+              "locationType": "A String", # The type of location this object represents.  This field is read-only.
+              "dimensionRange": { # A range along a single dimension on a sheet. # Represents the row or column when metadata is associated with
+                  # a dimension. The specified DimensionRange must represent a single row
+                  # or column; it cannot be unbounded or span multiple rows or columns.
+                  # All indexes are zero-based.
+                  # Indexes are half open: the start index is inclusive
+                  # and the end index is exclusive.
+                  # Missing indexes indicate the range is unbounded on that side.
+                "endIndex": 42, # The end (exclusive) of the span, or not set if unbounded.
+                "startIndex": 42, # The start (inclusive) of the span, or not set if unbounded.
+                "sheetId": 42, # The sheet this span is on.
+                "dimension": "A String", # The dimension of the span.
+              },
+              "spreadsheet": True or False, # True when metadata is associated with an entire spreadsheet.
+              "sheetId": 42, # The ID of the sheet when metadata is associated with an entire sheet.
+            },
+            "metadataValue": "A String", # Limits the selected developer metadata to that which has a matching
+                # DeveloperMetadata.metadata_value.
+            "locationMatchingStrategy": "A String", # Determines how this lookup matches the location.  If this field is
+                # specified as EXACT, only developer metadata associated on the exact
+                # location specified is matched.  If this field is specified to INTERSECTING,
+                # developer metadata associated on intersecting locations is also
+                # matched.  If left unspecified, this field assumes a default value of
+                # INTERSECTING.
+                # If this field is specified, a metadataLocation
+                # must also be specified.
+            "locationType": "A String", # Limits the selected developer metadata to those entries which are
+                # associated with locations of the specified type.  For example, when this
+                # field is specified as ROW this lookup
+                # only considers developer metadata associated on rows.  If the field is left
+                # unspecified, all location types are considered.  This field cannot be
+                # specified as SPREADSHEET when
+                # the locationMatchingStrategy
+                # is specified as INTERSECTING or when the
+                # metadataLocation is specified as a
+                # non-spreadsheet location: spreadsheet metadata cannot intersect any other
+                # developer metadata location.  This field also must be left unspecified when
+                # the locationMatchingStrategy
+                # is specified as EXACT.
+            "metadataId": 42, # Limits the selected developer metadata to that which has a matching
+                # DeveloperMetadata.metadata_id.
+            "visibility": "A String", # Limits the selected developer metadata to that which has a matching
+                # DeveloperMetadata.visibility.  If left unspecified, all developer
+                # metadata visibile to the requesting project is considered.
+            "metadataKey": "A String", # Limits the selected developer metadata to that which has a matching
+                # DeveloperMetadata.metadata_key.
+          },
+          "a1Range": "A String", # Selects data that matches the specified A1 range.
+          "gridRange": { # A range on a sheet. # Selects data that matches the range described by the GridRange.
+              # All indexes are zero-based.
+              # Indexes are half open, e.g the start index is inclusive
+              # and the end index is exclusive -- [start_index, end_index).
+              # Missing indexes indicate the range is unbounded on that side.
+              #
+              # For example, if `"Sheet1"` is sheet ID 0, then:
+              #
+              #   `Sheet1!A1:A1 == sheet_id: 0,
+              #                   start_row_index: 0, end_row_index: 1,
+              #                   start_column_index: 0, end_column_index: 1`
+              #
+              #   `Sheet1!A3:B4 == sheet_id: 0,
+              #                   start_row_index: 2, end_row_index: 4,
+              #                   start_column_index: 0, end_column_index: 2`
+              #
+              #   `Sheet1!A:B == sheet_id: 0,
+              #                 start_column_index: 0, end_column_index: 2`
+              #
+              #   `Sheet1!A5:B == sheet_id: 0,
+              #                  start_row_index: 4,
+              #                  start_column_index: 0, end_column_index: 2`
+              #
+              #   `Sheet1 == sheet_id:0`
+              #
+              # The start index must always be less than or equal to the end index.
+              # If the start index equals the end index, then the range is empty.
+              # Empty ranges are typically not meaningful and are usually rendered in the
+              # UI as `#REF!`.
+            "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
+            "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+            "sheetId": 42, # The sheet this range is on.
+            "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
+            "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
+          },
+        },
+        "updatedRows": 42, # The number of rows where at least one cell in the row was updated.
+        "updatedData": { # Data within a range of the spreadsheet. # The values of the cells in the range matched by the dataFilter after all
+            # updates were applied. This is only included if the request's
+            # `includeValuesInResponse` field was `true`.
+          "range": "A String", # The range the values cover, in A1 notation.
+              # For output, this range indicates the entire requested range,
+              # even though the values will exclude trailing rows and columns.
+              # When appending values, this field represents the range to search for a
+              # table, after which values will be appended.
+          "values": [ # The data that was read or to be written.  This is an array of arrays,
+              # the outer array representing all the data and each inner array
+              # representing a major dimension. Each item in the inner array
+              # corresponds with one cell.
+              #
+              # For output, empty trailing rows and columns will not be included.
+              #
+              # For input, supported value types are: bool, string, and double.
+              # Null values will be skipped.
+              # To set a cell to an empty value, set the string value to an empty string.
+            [
+              "",
+            ],
+          ],
+          "majorDimension": "A String", # The major dimension of the values.
+              #
+              # For output, if the spreadsheet data is: `A1=1,B1=2,A2=3,B2=4`,
+              # then requesting `range=A1:B2,majorDimension=ROWS` will return
+              # `[[1,2],[3,4]]`,
+              # whereas requesting `range=A1:B2,majorDimension=COLUMNS` will return
+              # `[[1,3],[2,4]]`.
+              #
+              # For input, with `range=A1:B2,majorDimension=ROWS` then `[[1,2],[3,4]]`
+              # will set `A1=1,B1=2,A2=3,B2=4`. With `range=A1:B2,majorDimension=COLUMNS`
+              # then `[[1,2],[3,4]]` will set `A1=1,B1=3,A2=2,B2=4`.
+              #
+              # When writing, if this field is not set, it defaults to ROWS.
+        },
+        "updatedCells": 42, # The number of cells updated.
+      },
+    ],
+    "totalUpdatedColumns": 42, # The total number of columns where at least one cell in the column was
+        # updated.
+    "totalUpdatedCells": 42, # The total number of cells updated.
+    "totalUpdatedRows": 42, # The total number of rows where at least one cell in the row was updated.
+    "spreadsheetId": "A String", # The spreadsheet the updates were applied to.
+    "totalUpdatedSheets": 42, # The total number of sheets where at least one cell in the sheet was
+        # updated.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="clear">clear(spreadsheetId, range, body=None, x__xgafv=None)</code>
   <pre>Clears values from a spreadsheet.
 The caller must specify the spreadsheet ID and range.
 Only values are cleared -- all other properties of the cell (such as
@@ -474,7 +1219,7 @@
 Args:
   spreadsheetId: string, The ID of the spreadsheet to update. (required)
   range: string, The A1 notation of the values to clear. (required)
-  body: object, The request body. (required)
+  body: object, The request body.
     The object takes the form of:
 
 { # The request for clearing a range of values in a spreadsheet.
@@ -498,13 +1243,15 @@
 </div>
 
 <div class="method">
-    <code class="details" id="get">get(spreadsheetId, range, majorDimension=None, dateTimeRenderOption=None, valueRenderOption=None, x__xgafv=None)</code>
+    <code class="details" id="get">get(spreadsheetId, range, valueRenderOption=None, majorDimension=None, dateTimeRenderOption=None, x__xgafv=None)</code>
   <pre>Returns a range of values from a spreadsheet.
 The caller must specify the spreadsheet ID and a range.
 
 Args:
   spreadsheetId: string, The ID of the spreadsheet to retrieve data from. (required)
   range: string, The A1 notation of the values to retrieve. (required)
+  valueRenderOption: string, How values should be represented in the output.
+The default render option is ValueRenderOption.FORMATTED_VALUE.
   majorDimension: string, The major dimension that results should use.
 
 For example, if the spreadsheet data is: `A1=1,B1=2,A2=3,B2=4`,
@@ -516,8 +1263,6 @@
 This is ignored if value_render_option is
 FORMATTED_VALUE.
 The default dateTime render option is [DateTimeRenderOption.SERIAL_NUMBER].
-  valueRenderOption: string, How values should be represented in the output.
-The default render option is ValueRenderOption.FORMATTED_VALUE.
   x__xgafv: string, V1 error format.
     Allowed values
       1 - v1 error format
@@ -625,14 +1370,15 @@
   responseDateTimeRenderOption: string, Determines how dates, times, and durations in the response should be
 rendered. This is ignored if response_value_render_option is
 FORMATTED_VALUE.
-The default dateTime render option is [DateTimeRenderOption.SERIAL_NUMBER].
+The default dateTime render option is
+DateTimeRenderOption.SERIAL_NUMBER.
 
 Returns:
   An object of the form:
 
     { # The response when updating a range of values in a spreadsheet.
-    "updatedRange": "A String", # The range (in A1 notation) that updates were applied to.
     "updatedColumns": 42, # The number of columns where at least one cell in the column was updated.
+    "updatedRange": "A String", # The range (in A1 notation) that updates were applied to.
     "updatedRows": 42, # The number of rows where at least one cell in the row was updated.
     "updatedData": { # Data within a range of the spreadsheet. # The values of the cells after updates were applied.
         # This is only included if the request's `includeValuesInResponse` field