<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="cloudsearch_v1.html">Cloud Search API</a> . <a href="cloudsearch_v1.indexing.html">indexing</a> . <a href="cloudsearch_v1.indexing.datasources.html">datasources</a> . <a href="cloudsearch_v1.indexing.datasources.items.html">items</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#delete">delete(name, connectorName=None, version=None, mode=None, debugOptions_enableDebugging=None, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes Item resource for the</p>
<p class="toc_element">
  <code><a href="#deleteQueueItems">deleteQueueItems(name, body, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes all items in a queue. This method is useful for deleting stale</p>
<p class="toc_element">
  <code><a href="#get">get(name, connectorName=None, debugOptions_enableDebugging=None, x__xgafv=None)</a></code></p>
<p class="firstline">Gets Item resource by item name.</p>
<p class="toc_element">
  <code><a href="#index">index(name, body, x__xgafv=None)</a></code></p>
<p class="firstline">Updates Item ACL, metadata, and</p>
<p class="toc_element">
  <code><a href="#list">list(name, pageSize=None, brief=None, connectorName=None, debugOptions_enableDebugging=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists all or a subset of Item resources.</p>
<p class="toc_element">
  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#poll">poll(name, body, x__xgafv=None)</a></code></p>
<p class="firstline">Polls for unreserved items from the indexing queue and marks a</p>
<p class="toc_element">
  <code><a href="#push">push(name, body, x__xgafv=None)</a></code></p>
<p class="firstline">Pushes an item onto a queue for later polling and updating.</p>
<p class="toc_element">
  <code><a href="#unreserve">unreserve(name, body, x__xgafv=None)</a></code></p>
<p class="firstline">Unreserves all items from a queue, making them all eligible to be</p>
<p class="toc_element">
  <code><a href="#upload">upload(name, body, x__xgafv=None)</a></code></p>
<p class="firstline">Creates an upload session for uploading item content. For items smaller</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="delete">delete(name, connectorName=None, version=None, mode=None, debugOptions_enableDebugging=None, x__xgafv=None)</code>
  <pre>Deletes Item resource for the
specified resource name.

Args:
  name: string, Required. Name of the item to delete.
Format: datasources/{source_id}/items/{item_id} (required)
  connectorName: string, Name of connector making this call.
<br />Format: datasources/{source_id}/connectors/{ID}
  version: string, Required. The incremented version of the item to delete from the index.
The indexing system stores the version from the datasource as a
byte string and compares the Item version in the index
to the version of the queued Item using lexical ordering.
<br /><br />
Cloud Search Indexing won't delete any queued item with
a version value that is less than or equal to
the version of the currently indexed item.
The maximum length for this field is 1024 bytes.
  mode: string, Required. The RequestMode for this request.
  debugOptions_enableDebugging: boolean, If you are asked by Google to help with debugging, set this field.
Otherwise, ignore this field.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # This resource represents a long-running operation that is the result of a
      # network API call.
    "metadata": { # Service-specific metadata associated with the operation.  It typically
        # contains progress information and common metadata such as create time.
        # Some services might not provide such metadata.  Any method that returns a
        # long-running operation should document the metadata type, if any.
      "a_key": "", # Properties of the object. Contains field @type with type URL.
    },
    "error": { # The `Status` type defines a logical error model that is suitable for # The error result of the operation in case of failure or cancellation.
        # different programming environments, including REST APIs and RPC APIs. It is
        # used by [gRPC](https://github.com/grpc). Each `Status` message contains
        # three pieces of data: error code, error message, and error details.
        #
        # You can find out more about this error model and how to work with it in the
        # [API Design Guide](https://cloud.google.com/apis/design/errors).
      "message": "A String", # A developer-facing error message, which should be in English. Any
          # user-facing error message should be localized and sent in the
          # google.rpc.Status.details field, or localized by the client.
      "code": 42, # The status code, which should be an enum value of google.rpc.Code.
      "details": [ # A list of messages that carry the error details.  There is a common set of
          # message types for APIs to use.
        {
          "a_key": "", # Properties of the object. Contains field @type with type URL.
        },
      ],
    },
    "done": True or False, # If the value is `false`, it means the operation is still in progress.
        # If `true`, the operation is completed, and either `error` or `response` is
        # available.
    "response": { # The normal response of the operation in case of success.  If the original
        # method returns no data on success, such as `Delete`, the response is
        # `google.protobuf.Empty`.  If the original method is standard
        # `Get`/`Create`/`Update`, the response should be the resource.  For other
        # methods, the response should have the type `XxxResponse`, where `Xxx`
        # is the original method name.  For example, if the original method name
        # is `TakeSnapshot()`, the inferred response type is
        # `TakeSnapshotResponse`.
      "a_key": "", # Properties of the object. Contains field @type with type URL.
    },
    "name": "A String", # The server-assigned name, which is only unique within the same service that
        # originally returns it. If you use the default HTTP mapping, the
        # `name` should be a resource name ending with `operations/{unique_id}`.
  }</pre>
</div>

<div class="method">
    <code class="details" id="deleteQueueItems">deleteQueueItems(name, body, x__xgafv=None)</code>
  <pre>Deletes all items in a queue. This method is useful for deleting stale
items.

Args:
  name: string, Name of the Data Source to delete items in a queue.
Format: datasources/{source_id} (required)
  body: object, The request body. (required)
    The object takes the form of:

{
    "queue": "A String", # Name of a queue to delete items from.
    "connectorName": "A String", # Name of connector making this call.
        # <br />Format: datasources/{source_id}/connectors/{ID}
    "debugOptions": { # Shared request debug options for all cloudsearch RPC methods. # Common debug options.
      "enableDebugging": True or False, # If you are asked by Google to help with debugging, set this field.
          # Otherwise, ignore this field.
    },
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # This resource represents a long-running operation that is the result of a
      # network API call.
    "metadata": { # Service-specific metadata associated with the operation.  It typically
        # contains progress information and common metadata such as create time.
        # Some services might not provide such metadata.  Any method that returns a
        # long-running operation should document the metadata type, if any.
      "a_key": "", # Properties of the object. Contains field @type with type URL.
    },
    "error": { # The `Status` type defines a logical error model that is suitable for # The error result of the operation in case of failure or cancellation.
        # different programming environments, including REST APIs and RPC APIs. It is
        # used by [gRPC](https://github.com/grpc). Each `Status` message contains
        # three pieces of data: error code, error message, and error details.
        #
        # You can find out more about this error model and how to work with it in the
        # [API Design Guide](https://cloud.google.com/apis/design/errors).
      "message": "A String", # A developer-facing error message, which should be in English. Any
          # user-facing error message should be localized and sent in the
          # google.rpc.Status.details field, or localized by the client.
      "code": 42, # The status code, which should be an enum value of google.rpc.Code.
      "details": [ # A list of messages that carry the error details.  There is a common set of
          # message types for APIs to use.
        {
          "a_key": "", # Properties of the object. Contains field @type with type URL.
        },
      ],
    },
    "done": True or False, # If the value is `false`, it means the operation is still in progress.
        # If `true`, the operation is completed, and either `error` or `response` is
        # available.
    "response": { # The normal response of the operation in case of success.  If the original
        # method returns no data on success, such as `Delete`, the response is
        # `google.protobuf.Empty`.  If the original method is standard
        # `Get`/`Create`/`Update`, the response should be the resource.  For other
        # methods, the response should have the type `XxxResponse`, where `Xxx`
        # is the original method name.  For example, if the original method name
        # is `TakeSnapshot()`, the inferred response type is
        # `TakeSnapshotResponse`.
      "a_key": "", # Properties of the object. Contains field @type with type URL.
    },
    "name": "A String", # The server-assigned name, which is only unique within the same service that
        # originally returns it. If you use the default HTTP mapping, the
        # `name` should be a resource name ending with `operations/{unique_id}`.
  }</pre>
</div>

<div class="method">
    <code class="details" id="get">get(name, connectorName=None, debugOptions_enableDebugging=None, x__xgafv=None)</code>
  <pre>Gets Item resource by item name.

Args:
  name: string, Name of the item to get info.
Format: datasources/{source_id}/items/{item_id} (required)
  connectorName: string, Name of connector making this call.
<br />Format: datasources/{source_id}/connectors/{ID}
  debugOptions_enableDebugging: boolean, If you are asked by Google to help with debugging, set this field.
Otherwise, ignore this field.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Represents a single object that is an item in the search index, such as a
      # file, folder, or a database record.
    "status": { # This contains item's status and any errors. # Status of the item.
        # Output only field.
      "processingErrors": [ # Error details in case the item is in ERROR state.
        {
          "code": "A String", # Error code indicating the nature of the error.
          "errorMessage": "A String", # Description of the error.
          "fieldViolations": [ # In case the item fields are invalid, this field contains the details
              # about the validation errors.
            {
              "field": "A String", # Path of field with violation.
              "description": "A String", # Description of the error.
            },
          ],
        },
      ],
      "repositoryErrors": [ # Repository error reported by connector.
        { # Errors when the connector is communicating to the source repository.
          "httpStatusCode": 42, # Error codes.  Matches the definition of HTTP status codes.
          "errorMessage": "A String", # Message that describes the error. The maximum allowable length
              # of the message is 8192 characters.
          "type": "A String", # Type of error.
        },
      ],
      "code": "A String", # Status code.
    },
    "queue": "A String", # Queue this item belongs to.
        # The maximum length is 100 characters.
    "name": "A String", # Name of the Item. Format:
        # datasources/{source_id}/items/{item_id}
        # <br />This is a required field.
        # The maximum length is 1536 characters.
    "acl": { # Access control list information for the item. For more information see # Access control list for this item.
        # https://developers.google.com/cloud-search/docs/guides/index-your-data#acls
      "aclInheritanceType": "A String", # Sets the type of access rules to apply when an item inherits its ACL from a
          # parent. This should always be set in tandem with the
          # inheritAclFrom
          # field. Also, when the
          # inheritAclFrom field
          # is set, this field should be set to a valid AclInheritanceType.
      "readers": [ # List of principals who are allowed to see the item in search results.
          # Optional if inheriting permissions from another item or if the item
          # is not intended to be visible, such as
          # virtual
          # containers.
          # The maximum number of elements is 1000.
        { # Reference to a user, group, or domain.
          "userResourceName": "A String", # This principal is a user identified using an external identity.
              # The name field must specify the user resource name with this format:
              # identitysources/{source_id}/users/{ID}
          "groupResourceName": "A String", # This principal is a group identified using an external identity.
              # The name field must specify the group resource name with this format:
              # identitysources/{source_id}/groups/{ID}
          "gsuitePrincipal": { # This principal is a GSuite user, group or domain.
            "gsuiteUserEmail": "A String", # This principal references a G Suite user account
            "gsuiteDomain": True or False, # This principal represents all users of the G Suite domain of the
                # customer.
            "gsuiteGroupEmail": "A String", # This principal references a G Suite group account
          },
        },
      ],
      "deniedReaders": [ # List of principals who are explicitly denied access to the item in search
          # results. While principals are denied access by default, use denied readers
          # to handle exceptions and override the list allowed readers.
          # The maximum number of elements is 100.
        { # Reference to a user, group, or domain.
          "userResourceName": "A String", # This principal is a user identified using an external identity.
              # The name field must specify the user resource name with this format:
              # identitysources/{source_id}/users/{ID}
          "groupResourceName": "A String", # This principal is a group identified using an external identity.
              # The name field must specify the group resource name with this format:
              # identitysources/{source_id}/groups/{ID}
          "gsuitePrincipal": { # This principal is a GSuite user, group or domain.
            "gsuiteUserEmail": "A String", # This principal references a G Suite user account
            "gsuiteDomain": True or False, # This principal represents all users of the G Suite domain of the
                # customer.
            "gsuiteGroupEmail": "A String", # This principal references a G Suite group account
          },
        },
      ],
      "owners": [ # Optional. List of owners for the item. This field has no bearing on
          # document access permissions. It does, however, offer
          # a slight ranking boosts items where the querying user is an owner.
          # The maximum number of elements is 5.
        { # Reference to a user, group, or domain.
          "userResourceName": "A String", # This principal is a user identified using an external identity.
              # The name field must specify the user resource name with this format:
              # identitysources/{source_id}/users/{ID}
          "groupResourceName": "A String", # This principal is a group identified using an external identity.
              # The name field must specify the group resource name with this format:
              # identitysources/{source_id}/groups/{ID}
          "gsuitePrincipal": { # This principal is a GSuite user, group or domain.
            "gsuiteUserEmail": "A String", # This principal references a G Suite user account
            "gsuiteDomain": True or False, # This principal represents all users of the G Suite domain of the
                # customer.
            "gsuiteGroupEmail": "A String", # This principal references a G Suite group account
          },
        },
      ],
      "inheritAclFrom": "A String", # Name of the item to inherit the Access Permission List (ACL) from.
          # Note: ACL inheritance *only* provides access permissions
          # to child items and does not define structural relationships, nor does it
          # provide convenient ways to delete large groups of items.
          # Deleting an ACL parent from the index only alters the access permissions of
          # child items that reference the parent in the
          # inheritAclFrom
          # field. The item is still in the index, but may not
          # visible in search results. By contrast, deletion of a container item
          # also deletes all items that reference the container via the
          # containerName
          # field.
          # The maximum length for this field is 1536 characters.
    },
    "content": { # Content of an item to be indexed and surfaced by Cloud Search. # Item content to be indexed and made text searchable.
      "contentDataRef": { # Represents an upload session reference. # Upload reference ID of a previously uploaded content via write method.
          # This reference is created via upload
          # method.
          # Updating of item content may refer to this uploaded content via
          # contentDataRef.
        "name": "A String", # Name of the content reference.
            # The maximum length is 2048 characters.
      },
      "contentFormat": "A String",
      "hash": "A String", # Hashing info calculated and provided by the API client for content.
          # Can be used with the items.push method to calculate modified state.
          # The maximum length is 2048 characters.
      "inlineContent": "A String", # Content that is supplied inlined within the update method.
          # The maximum length is 102400 bytes (100 KiB).
    },
    "version": "A String", # Required. The indexing system stores the version from the datasource as a
        # byte string and compares the Item version in the index
        # to the version of the queued Item using lexical ordering.
        # <br /><br />
        # Cloud Search Indexing won't index or delete any queued item with
        # a version value that is less than or equal to the version of the
        # currently indexed item.
        # The maximum length for this field is 1024 bytes.
    "itemType": "A String", # Type for this item.
    "structuredData": { # Available structured data fields for the item. # The structured data for the item that should conform to a registered
        # object definition in the schema for the data source.
      "object": { # A structured data object consisting of named properties. # The structured data object that should conform to a registered object
          # definition in the schema for the data source.
        "properties": [ # The properties for the object.
            # The maximum number of elements is 1000.
          { # A typed name-value pair for structured data.  The type of the value should
              # be the same as the registered type for the `name` property in the object
              # definition of `objectType`.
            "objectValues": { # List of object values.
              "values": [
                # Object with schema name: StructuredDataObject
              ],
            },
            "dateValues": { # List of date values.
              "values": [
                { # Represents a whole calendar date, for example a date of birth. The time of day and time zone are either specified elsewhere or are not significant. The date is relative to the [Proleptic Gregorian Calendar](https://en.wikipedia.org/wiki/Proleptic_Gregorian_calendar). The date must be a valid calendar date between the year 1 and 9999.
                  "month": 42, # Month of date. Must be from 1 to 12.
                  "day": 42, # Day of month. Must be from 1 to 31 and valid for the year and month.
                  "year": 42, # Year of date. Must be from 1 to 9999.
                },
              ],
            },
            "textValues": { # List of text values.
              "values": [ # The maximum allowable length for text values is 2048 characters.
                "A String",
              ],
            },
            "enumValues": { # List of enum values.
              "values": [ # The maximum allowable length for string values is 32 characters.
                "A String",
              ],
            },
            "integerValues": { # List of integer values.
              "values": [
                "A String",
              ],
            },
            "doubleValues": { # List of double values.
              "values": [
                3.14,
              ],
            },
            "htmlValues": { # List of html values.
              "values": [ # The maximum allowable length for html values is 2048 characters.
                "A String",
              ],
            },
            "booleanValue": True or False,
            "timestampValues": { # List of timestamp values.
              "values": [
                "A String",
              ],
            },
            "name": "A String", # The name of the property.  This name should correspond to the name of the
                # property that was registered for object definition in the schema.
                # The maximum allowable length for this property is 256 characters.
          },
        ],
      },
      "hash": "A String", # Hashing value provided by the API caller.
          # This can be used with the
          # items.push
          # method to calculate modified state.
          # The maximum length is 2048 characters.
    },
    "payload": "A String", # Additional state connector can store for this item.
        # The maximum length is 10000 bytes.
    "metadata": { # Available metadata fields for the item. # Metadata information.
      "mimeType": "A String", # The original mime-type of
          # ItemContent.content
          # in the source repository.
          # The maximum length is 256 characters.
      "containerName": "A String", # The name of the container for this item.
          # Deletion of the container item leads to automatic deletion of this
          # item.  Note: ACLs are not inherited from a container item.
          # To provide ACL inheritance for an item, use the
          # inheritAclFrom
          # field. The maximum length is 1536 characters.
      "updateTime": "A String", # The time when the item was last modified in the source repository.
      "hash": "A String", # Hashing value provided by the API caller.
          # This can be used with the
          # items.push
          # method to calculate modified state.
          # The maximum length is 2048 characters.
      "contentLanguage": "A String", # The BCP-47 language code for the item, such as "en-US" or "sr-Latn". For
          # more information, see
          # http://www.unicode.org/reports/tr35/#Unicode_locale_identifier.
          # The maximum length is 32 characters.
      "title": "A String", # The title of the item.  If given, this will be the displayed title of the
          # Search result.
          # The maximum length is 2048 characters.
      "interactions": [ # A list of interactions for the item.  Interactions are used to improve
          # Search quality, but are not exposed to end users.
          # The maximum number of elements is 1000.
        { # Represents an interaction between a user and an item.
          "interactionTime": "A String", # The time when the user acted on the item.  If multiple actions of the same
              # type exist for a single user, only the most recent action is recorded.
          "type": "A String",
          "principal": { # Reference to a user, group, or domain. # The user that acted on the item.
            "userResourceName": "A String", # This principal is a user identified using an external identity.
                # The name field must specify the user resource name with this format:
                # identitysources/{source_id}/users/{ID}
            "groupResourceName": "A String", # This principal is a group identified using an external identity.
                # The name field must specify the group resource name with this format:
                # identitysources/{source_id}/groups/{ID}
            "gsuitePrincipal": { # This principal is a GSuite user, group or domain.
              "gsuiteUserEmail": "A String", # This principal references a G Suite user account
              "gsuiteDomain": True or False, # This principal represents all users of the G Suite domain of the
                  # customer.
              "gsuiteGroupEmail": "A String", # This principal references a G Suite group account
            },
          },
        },
      ],
      "searchQualityMetadata": { # Additional search quality metadata of the item. # Additional search quality metadata of the item
        "quality": 3.14, # An indication of the quality of the item, used to influence search quality.
            # Value should be between 0.0 (lowest quality) and 1.0 (highest quality). The
            # default value is 0.0.
      },
      "keywords": [ # Additional keywords or phrases that should match the item.
          # Used internally for user generated content.
          # The maximum number of elements is 100.
          # The maximum length is 8192 characters.
        "A String",
      ],
      "sourceRepositoryUrl": "A String", # Link to the source repository serving the data.  &#83;earch results apply
          # this link to the title.
          # The maximum length is 2048 characters.
      "createTime": "A String", # The time when the item was created in the source repository.
      "objectType": "A String", # The type of the item.  This should correspond to the name of an object
          # definition in the schema registered for the data source.  For example, if
          # the schema for the data source contains an object definition with name
          # 'document', then item indexing requests for objects of that type should set
          # objectType to 'document'.
          # The maximum length is 256 characters.
    },
  }</pre>
</div>

<div class="method">
    <code class="details" id="index">index(name, body, x__xgafv=None)</code>
  <pre>Updates Item ACL, metadata, and
content. It will insert the Item if it
does not exist.
This method does not support partial updates.  Fields with no provided
values are cleared out in the Cloud Search index.

Args:
  name: string, Name of the Item. Format:
datasources/{source_id}/items/{item_id}
<br />This is a required field.
The maximum length is 1536 characters. (required)
  body: object, The request body. (required)
    The object takes the form of:

{
    "item": { # Represents a single object that is an item in the search index, such as a # Name of the item.  Format:
        # datasources/{source_id}/items/{item_id}
        # file, folder, or a database record.
      "status": { # This contains item's status and any errors. # Status of the item.
          # Output only field.
        "processingErrors": [ # Error details in case the item is in ERROR state.
          {
            "code": "A String", # Error code indicating the nature of the error.
            "errorMessage": "A String", # Description of the error.
            "fieldViolations": [ # In case the item fields are invalid, this field contains the details
                # about the validation errors.
              {
                "field": "A String", # Path of field with violation.
                "description": "A String", # Description of the error.
              },
            ],
          },
        ],
        "repositoryErrors": [ # Repository error reported by connector.
          { # Errors when the connector is communicating to the source repository.
            "httpStatusCode": 42, # Error codes.  Matches the definition of HTTP status codes.
            "errorMessage": "A String", # Message that describes the error. The maximum allowable length
                # of the message is 8192 characters.
            "type": "A String", # Type of error.
          },
        ],
        "code": "A String", # Status code.
      },
      "queue": "A String", # Queue this item belongs to.
          # The maximum length is 100 characters.
      "name": "A String", # Name of the Item. Format:
          # datasources/{source_id}/items/{item_id}
          # <br />This is a required field.
          # The maximum length is 1536 characters.
      "acl": { # Access control list information for the item. For more information see # Access control list for this item.
          # https://developers.google.com/cloud-search/docs/guides/index-your-data#acls
        "aclInheritanceType": "A String", # Sets the type of access rules to apply when an item inherits its ACL from a
            # parent. This should always be set in tandem with the
            # inheritAclFrom
            # field. Also, when the
            # inheritAclFrom field
            # is set, this field should be set to a valid AclInheritanceType.
        "readers": [ # List of principals who are allowed to see the item in search results.
            # Optional if inheriting permissions from another item or if the item
            # is not intended to be visible, such as
            # virtual
            # containers.
            # The maximum number of elements is 1000.
          { # Reference to a user, group, or domain.
            "userResourceName": "A String", # This principal is a user identified using an external identity.
                # The name field must specify the user resource name with this format:
                # identitysources/{source_id}/users/{ID}
            "groupResourceName": "A String", # This principal is a group identified using an external identity.
                # The name field must specify the group resource name with this format:
                # identitysources/{source_id}/groups/{ID}
            "gsuitePrincipal": { # This principal is a GSuite user, group or domain.
              "gsuiteUserEmail": "A String", # This principal references a G Suite user account
              "gsuiteDomain": True or False, # This principal represents all users of the G Suite domain of the
                  # customer.
              "gsuiteGroupEmail": "A String", # This principal references a G Suite group account
            },
          },
        ],
        "deniedReaders": [ # List of principals who are explicitly denied access to the item in search
            # results. While principals are denied access by default, use denied readers
            # to handle exceptions and override the list allowed readers.
            # The maximum number of elements is 100.
          { # Reference to a user, group, or domain.
            "userResourceName": "A String", # This principal is a user identified using an external identity.
                # The name field must specify the user resource name with this format:
                # identitysources/{source_id}/users/{ID}
            "groupResourceName": "A String", # This principal is a group identified using an external identity.
                # The name field must specify the group resource name with this format:
                # identitysources/{source_id}/groups/{ID}
            "gsuitePrincipal": { # This principal is a GSuite user, group or domain.
              "gsuiteUserEmail": "A String", # This principal references a G Suite user account
              "gsuiteDomain": True or False, # This principal represents all users of the G Suite domain of the
                  # customer.
              "gsuiteGroupEmail": "A String", # This principal references a G Suite group account
            },
          },
        ],
        "owners": [ # Optional. List of owners for the item. This field has no bearing on
            # document access permissions. It does, however, offer
            # a slight ranking boosts items where the querying user is an owner.
            # The maximum number of elements is 5.
          { # Reference to a user, group, or domain.
            "userResourceName": "A String", # This principal is a user identified using an external identity.
                # The name field must specify the user resource name with this format:
                # identitysources/{source_id}/users/{ID}
            "groupResourceName": "A String", # This principal is a group identified using an external identity.
                # The name field must specify the group resource name with this format:
                # identitysources/{source_id}/groups/{ID}
            "gsuitePrincipal": { # This principal is a GSuite user, group or domain.
              "gsuiteUserEmail": "A String", # This principal references a G Suite user account
              "gsuiteDomain": True or False, # This principal represents all users of the G Suite domain of the
                  # customer.
              "gsuiteGroupEmail": "A String", # This principal references a G Suite group account
            },
          },
        ],
        "inheritAclFrom": "A String", # Name of the item to inherit the Access Permission List (ACL) from.
            # Note: ACL inheritance *only* provides access permissions
            # to child items and does not define structural relationships, nor does it
            # provide convenient ways to delete large groups of items.
            # Deleting an ACL parent from the index only alters the access permissions of
            # child items that reference the parent in the
            # inheritAclFrom
            # field. The item is still in the index, but may not
            # visible in search results. By contrast, deletion of a container item
            # also deletes all items that reference the container via the
            # containerName
            # field.
            # The maximum length for this field is 1536 characters.
      },
      "content": { # Content of an item to be indexed and surfaced by Cloud Search. # Item content to be indexed and made text searchable.
        "contentDataRef": { # Represents an upload session reference. # Upload reference ID of a previously uploaded content via write method.
            # This reference is created via upload
            # method.
            # Updating of item content may refer to this uploaded content via
            # contentDataRef.
          "name": "A String", # Name of the content reference.
              # The maximum length is 2048 characters.
        },
        "contentFormat": "A String",
        "hash": "A String", # Hashing info calculated and provided by the API client for content.
            # Can be used with the items.push method to calculate modified state.
            # The maximum length is 2048 characters.
        "inlineContent": "A String", # Content that is supplied inlined within the update method.
            # The maximum length is 102400 bytes (100 KiB).
      },
      "version": "A String", # Required. The indexing system stores the version from the datasource as a
          # byte string and compares the Item version in the index
          # to the version of the queued Item using lexical ordering.
          # <br /><br />
          # Cloud Search Indexing won't index or delete any queued item with
          # a version value that is less than or equal to the version of the
          # currently indexed item.
          # The maximum length for this field is 1024 bytes.
      "itemType": "A String", # Type for this item.
      "structuredData": { # Available structured data fields for the item. # The structured data for the item that should conform to a registered
          # object definition in the schema for the data source.
        "object": { # A structured data object consisting of named properties. # The structured data object that should conform to a registered object
            # definition in the schema for the data source.
          "properties": [ # The properties for the object.
              # The maximum number of elements is 1000.
            { # A typed name-value pair for structured data.  The type of the value should
                # be the same as the registered type for the `name` property in the object
                # definition of `objectType`.
              "objectValues": { # List of object values.
                "values": [
                  # Object with schema name: StructuredDataObject
                ],
              },
              "dateValues": { # List of date values.
                "values": [
                  { # Represents a whole calendar date, for example a date of birth. The time of day and time zone are either specified elsewhere or are not significant. The date is relative to the [Proleptic Gregorian Calendar](https://en.wikipedia.org/wiki/Proleptic_Gregorian_calendar). The date must be a valid calendar date between the year 1 and 9999.
                    "month": 42, # Month of date. Must be from 1 to 12.
                    "day": 42, # Day of month. Must be from 1 to 31 and valid for the year and month.
                    "year": 42, # Year of date. Must be from 1 to 9999.
                  },
                ],
              },
              "textValues": { # List of text values.
                "values": [ # The maximum allowable length for text values is 2048 characters.
                  "A String",
                ],
              },
              "enumValues": { # List of enum values.
                "values": [ # The maximum allowable length for string values is 32 characters.
                  "A String",
                ],
              },
              "integerValues": { # List of integer values.
                "values": [
                  "A String",
                ],
              },
              "doubleValues": { # List of double values.
                "values": [
                  3.14,
                ],
              },
              "htmlValues": { # List of html values.
                "values": [ # The maximum allowable length for html values is 2048 characters.
                  "A String",
                ],
              },
              "booleanValue": True or False,
              "timestampValues": { # List of timestamp values.
                "values": [
                  "A String",
                ],
              },
              "name": "A String", # The name of the property.  This name should correspond to the name of the
                  # property that was registered for object definition in the schema.
                  # The maximum allowable length for this property is 256 characters.
            },
          ],
        },
        "hash": "A String", # Hashing value provided by the API caller.
            # This can be used with the
            # items.push
            # method to calculate modified state.
            # The maximum length is 2048 characters.
      },
      "payload": "A String", # Additional state connector can store for this item.
          # The maximum length is 10000 bytes.
      "metadata": { # Available metadata fields for the item. # Metadata information.
        "mimeType": "A String", # The original mime-type of
            # ItemContent.content
            # in the source repository.
            # The maximum length is 256 characters.
        "containerName": "A String", # The name of the container for this item.
            # Deletion of the container item leads to automatic deletion of this
            # item.  Note: ACLs are not inherited from a container item.
            # To provide ACL inheritance for an item, use the
            # inheritAclFrom
            # field. The maximum length is 1536 characters.
        "updateTime": "A String", # The time when the item was last modified in the source repository.
        "hash": "A String", # Hashing value provided by the API caller.
            # This can be used with the
            # items.push
            # method to calculate modified state.
            # The maximum length is 2048 characters.
        "contentLanguage": "A String", # The BCP-47 language code for the item, such as "en-US" or "sr-Latn". For
            # more information, see
            # http://www.unicode.org/reports/tr35/#Unicode_locale_identifier.
            # The maximum length is 32 characters.
        "title": "A String", # The title of the item.  If given, this will be the displayed title of the
            # Search result.
            # The maximum length is 2048 characters.
        "interactions": [ # A list of interactions for the item.  Interactions are used to improve
            # Search quality, but are not exposed to end users.
            # The maximum number of elements is 1000.
          { # Represents an interaction between a user and an item.
            "interactionTime": "A String", # The time when the user acted on the item.  If multiple actions of the same
                # type exist for a single user, only the most recent action is recorded.
            "type": "A String",
            "principal": { # Reference to a user, group, or domain. # The user that acted on the item.
              "userResourceName": "A String", # This principal is a user identified using an external identity.
                  # The name field must specify the user resource name with this format:
                  # identitysources/{source_id}/users/{ID}
              "groupResourceName": "A String", # This principal is a group identified using an external identity.
                  # The name field must specify the group resource name with this format:
                  # identitysources/{source_id}/groups/{ID}
              "gsuitePrincipal": { # This principal is a GSuite user, group or domain.
                "gsuiteUserEmail": "A String", # This principal references a G Suite user account
                "gsuiteDomain": True or False, # This principal represents all users of the G Suite domain of the
                    # customer.
                "gsuiteGroupEmail": "A String", # This principal references a G Suite group account
              },
            },
          },
        ],
        "searchQualityMetadata": { # Additional search quality metadata of the item. # Additional search quality metadata of the item
          "quality": 3.14, # An indication of the quality of the item, used to influence search quality.
              # Value should be between 0.0 (lowest quality) and 1.0 (highest quality). The
              # default value is 0.0.
        },
        "keywords": [ # Additional keywords or phrases that should match the item.
            # Used internally for user generated content.
            # The maximum number of elements is 100.
            # The maximum length is 8192 characters.
          "A String",
        ],
        "sourceRepositoryUrl": "A String", # Link to the source repository serving the data.  &#83;earch results apply
            # this link to the title.
            # The maximum length is 2048 characters.
        "createTime": "A String", # The time when the item was created in the source repository.
        "objectType": "A String", # The type of the item.  This should correspond to the name of an object
            # definition in the schema registered for the data source.  For example, if
            # the schema for the data source contains an object definition with name
            # 'document', then item indexing requests for objects of that type should set
            # objectType to 'document'.
            # The maximum length is 256 characters.
      },
    },
    "mode": "A String", # Required. The RequestMode for this request.
    "debugOptions": { # Shared request debug options for all cloudsearch RPC methods. # Common debug options.
      "enableDebugging": True or False, # If you are asked by Google to help with debugging, set this field.
          # Otherwise, ignore this field.
    },
    "indexItemOptions": {
      "allowUnknownGsuitePrincipals": True or False, # Specifies if the index request should allow gsuite principals that do not
          # exist or are deleted in the index request.
    },
    "connectorName": "A String", # Name of connector making this call.
        # <br />Format: datasources/{source_id}/connectors/{ID}
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # This resource represents a long-running operation that is the result of a
      # network API call.
    "metadata": { # Service-specific metadata associated with the operation.  It typically
        # contains progress information and common metadata such as create time.
        # Some services might not provide such metadata.  Any method that returns a
        # long-running operation should document the metadata type, if any.
      "a_key": "", # Properties of the object. Contains field @type with type URL.
    },
    "error": { # The `Status` type defines a logical error model that is suitable for # The error result of the operation in case of failure or cancellation.
        # different programming environments, including REST APIs and RPC APIs. It is
        # used by [gRPC](https://github.com/grpc). Each `Status` message contains
        # three pieces of data: error code, error message, and error details.
        #
        # You can find out more about this error model and how to work with it in the
        # [API Design Guide](https://cloud.google.com/apis/design/errors).
      "message": "A String", # A developer-facing error message, which should be in English. Any
          # user-facing error message should be localized and sent in the
          # google.rpc.Status.details field, or localized by the client.
      "code": 42, # The status code, which should be an enum value of google.rpc.Code.
      "details": [ # A list of messages that carry the error details.  There is a common set of
          # message types for APIs to use.
        {
          "a_key": "", # Properties of the object. Contains field @type with type URL.
        },
      ],
    },
    "done": True or False, # If the value is `false`, it means the operation is still in progress.
        # If `true`, the operation is completed, and either `error` or `response` is
        # available.
    "response": { # The normal response of the operation in case of success.  If the original
        # method returns no data on success, such as `Delete`, the response is
        # `google.protobuf.Empty`.  If the original method is standard
        # `Get`/`Create`/`Update`, the response should be the resource.  For other
        # methods, the response should have the type `XxxResponse`, where `Xxx`
        # is the original method name.  For example, if the original method name
        # is `TakeSnapshot()`, the inferred response type is
        # `TakeSnapshotResponse`.
      "a_key": "", # Properties of the object. Contains field @type with type URL.
    },
    "name": "A String", # The server-assigned name, which is only unique within the same service that
        # originally returns it. If you use the default HTTP mapping, the
        # `name` should be a resource name ending with `operations/{unique_id}`.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(name, pageSize=None, brief=None, connectorName=None, debugOptions_enableDebugging=None, pageToken=None, x__xgafv=None)</code>
  <pre>Lists all or a subset of Item resources.

Args:
  name: string, Name of the Data Source to list Items.  Format:
datasources/{source_id} (required)
  pageSize: integer, Maximum number of items to fetch in a request.
The max value is 1000 when brief is true.  The max value is 10 if brief
is false.
<br />The default value is 10
  brief: boolean, When set to true, the indexing system only populates the following fields:
name,
version,
metadata.hash,
structured_data.hash,
content.hash.
<br />If this value is false, then all the fields are populated in Item.
  connectorName: string, Name of connector making this call.
<br />Format: datasources/{source_id}/connectors/{ID}
  debugOptions_enableDebugging: boolean, If you are asked by Google to help with debugging, set this field.
Otherwise, ignore this field.
  pageToken: string, The next_page_token value returned from a previous List request, if any.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    {
    "nextPageToken": "A String", # Token to retrieve the next page of results, or empty if there are no
        # more results in the list.
    "items": [
      { # Represents a single object that is an item in the search index, such as a
          # file, folder, or a database record.
        "status": { # This contains item's status and any errors. # Status of the item.
            # Output only field.
          "processingErrors": [ # Error details in case the item is in ERROR state.
            {
              "code": "A String", # Error code indicating the nature of the error.
              "errorMessage": "A String", # Description of the error.
              "fieldViolations": [ # In case the item fields are invalid, this field contains the details
                  # about the validation errors.
                {
                  "field": "A String", # Path of field with violation.
                  "description": "A String", # Description of the error.
                },
              ],
            },
          ],
          "repositoryErrors": [ # Repository error reported by connector.
            { # Errors when the connector is communicating to the source repository.
              "httpStatusCode": 42, # Error codes.  Matches the definition of HTTP status codes.
              "errorMessage": "A String", # Message that describes the error. The maximum allowable length
                  # of the message is 8192 characters.
              "type": "A String", # Type of error.
            },
          ],
          "code": "A String", # Status code.
        },
        "queue": "A String", # Queue this item belongs to.
            # The maximum length is 100 characters.
        "name": "A String", # Name of the Item. Format:
            # datasources/{source_id}/items/{item_id}
            # <br />This is a required field.
            # The maximum length is 1536 characters.
        "acl": { # Access control list information for the item. For more information see # Access control list for this item.
            # https://developers.google.com/cloud-search/docs/guides/index-your-data#acls
          "aclInheritanceType": "A String", # Sets the type of access rules to apply when an item inherits its ACL from a
              # parent. This should always be set in tandem with the
              # inheritAclFrom
              # field. Also, when the
              # inheritAclFrom field
              # is set, this field should be set to a valid AclInheritanceType.
          "readers": [ # List of principals who are allowed to see the item in search results.
              # Optional if inheriting permissions from another item or if the item
              # is not intended to be visible, such as
              # virtual
              # containers.
              # The maximum number of elements is 1000.
            { # Reference to a user, group, or domain.
              "userResourceName": "A String", # This principal is a user identified using an external identity.
                  # The name field must specify the user resource name with this format:
                  # identitysources/{source_id}/users/{ID}
              "groupResourceName": "A String", # This principal is a group identified using an external identity.
                  # The name field must specify the group resource name with this format:
                  # identitysources/{source_id}/groups/{ID}
              "gsuitePrincipal": { # This principal is a GSuite user, group or domain.
                "gsuiteUserEmail": "A String", # This principal references a G Suite user account
                "gsuiteDomain": True or False, # This principal represents all users of the G Suite domain of the
                    # customer.
                "gsuiteGroupEmail": "A String", # This principal references a G Suite group account
              },
            },
          ],
          "deniedReaders": [ # List of principals who are explicitly denied access to the item in search
              # results. While principals are denied access by default, use denied readers
              # to handle exceptions and override the list allowed readers.
              # The maximum number of elements is 100.
            { # Reference to a user, group, or domain.
              "userResourceName": "A String", # This principal is a user identified using an external identity.
                  # The name field must specify the user resource name with this format:
                  # identitysources/{source_id}/users/{ID}
              "groupResourceName": "A String", # This principal is a group identified using an external identity.
                  # The name field must specify the group resource name with this format:
                  # identitysources/{source_id}/groups/{ID}
              "gsuitePrincipal": { # This principal is a GSuite user, group or domain.
                "gsuiteUserEmail": "A String", # This principal references a G Suite user account
                "gsuiteDomain": True or False, # This principal represents all users of the G Suite domain of the
                    # customer.
                "gsuiteGroupEmail": "A String", # This principal references a G Suite group account
              },
            },
          ],
          "owners": [ # Optional. List of owners for the item. This field has no bearing on
              # document access permissions. It does, however, offer
              # a slight ranking boosts items where the querying user is an owner.
              # The maximum number of elements is 5.
            { # Reference to a user, group, or domain.
              "userResourceName": "A String", # This principal is a user identified using an external identity.
                  # The name field must specify the user resource name with this format:
                  # identitysources/{source_id}/users/{ID}
              "groupResourceName": "A String", # This principal is a group identified using an external identity.
                  # The name field must specify the group resource name with this format:
                  # identitysources/{source_id}/groups/{ID}
              "gsuitePrincipal": { # This principal is a GSuite user, group or domain.
                "gsuiteUserEmail": "A String", # This principal references a G Suite user account
                "gsuiteDomain": True or False, # This principal represents all users of the G Suite domain of the
                    # customer.
                "gsuiteGroupEmail": "A String", # This principal references a G Suite group account
              },
            },
          ],
          "inheritAclFrom": "A String", # Name of the item to inherit the Access Permission List (ACL) from.
              # Note: ACL inheritance *only* provides access permissions
              # to child items and does not define structural relationships, nor does it
              # provide convenient ways to delete large groups of items.
              # Deleting an ACL parent from the index only alters the access permissions of
              # child items that reference the parent in the
              # inheritAclFrom
              # field. The item is still in the index, but may not
              # visible in search results. By contrast, deletion of a container item
              # also deletes all items that reference the container via the
              # containerName
              # field.
              # The maximum length for this field is 1536 characters.
        },
        "content": { # Content of an item to be indexed and surfaced by Cloud Search. # Item content to be indexed and made text searchable.
          "contentDataRef": { # Represents an upload session reference. # Upload reference ID of a previously uploaded content via write method.
              # This reference is created via upload
              # method.
              # Updating of item content may refer to this uploaded content via
              # contentDataRef.
            "name": "A String", # Name of the content reference.
                # The maximum length is 2048 characters.
          },
          "contentFormat": "A String",
          "hash": "A String", # Hashing info calculated and provided by the API client for content.
              # Can be used with the items.push method to calculate modified state.
              # The maximum length is 2048 characters.
          "inlineContent": "A String", # Content that is supplied inlined within the update method.
              # The maximum length is 102400 bytes (100 KiB).
        },
        "version": "A String", # Required. The indexing system stores the version from the datasource as a
            # byte string and compares the Item version in the index
            # to the version of the queued Item using lexical ordering.
            # <br /><br />
            # Cloud Search Indexing won't index or delete any queued item with
            # a version value that is less than or equal to the version of the
            # currently indexed item.
            # The maximum length for this field is 1024 bytes.
        "itemType": "A String", # Type for this item.
        "structuredData": { # Available structured data fields for the item. # The structured data for the item that should conform to a registered
            # object definition in the schema for the data source.
          "object": { # A structured data object consisting of named properties. # The structured data object that should conform to a registered object
              # definition in the schema for the data source.
            "properties": [ # The properties for the object.
                # The maximum number of elements is 1000.
              { # A typed name-value pair for structured data.  The type of the value should
                  # be the same as the registered type for the `name` property in the object
                  # definition of `objectType`.
                "objectValues": { # List of object values.
                  "values": [
                    # Object with schema name: StructuredDataObject
                  ],
                },
                "dateValues": { # List of date values.
                  "values": [
                    { # Represents a whole calendar date, for example a date of birth. The time of day and time zone are either specified elsewhere or are not significant. The date is relative to the [Proleptic Gregorian Calendar](https://en.wikipedia.org/wiki/Proleptic_Gregorian_calendar). The date must be a valid calendar date between the year 1 and 9999.
                      "month": 42, # Month of date. Must be from 1 to 12.
                      "day": 42, # Day of month. Must be from 1 to 31 and valid for the year and month.
                      "year": 42, # Year of date. Must be from 1 to 9999.
                    },
                  ],
                },
                "textValues": { # List of text values.
                  "values": [ # The maximum allowable length for text values is 2048 characters.
                    "A String",
                  ],
                },
                "enumValues": { # List of enum values.
                  "values": [ # The maximum allowable length for string values is 32 characters.
                    "A String",
                  ],
                },
                "integerValues": { # List of integer values.
                  "values": [
                    "A String",
                  ],
                },
                "doubleValues": { # List of double values.
                  "values": [
                    3.14,
                  ],
                },
                "htmlValues": { # List of html values.
                  "values": [ # The maximum allowable length for html values is 2048 characters.
                    "A String",
                  ],
                },
                "booleanValue": True or False,
                "timestampValues": { # List of timestamp values.
                  "values": [
                    "A String",
                  ],
                },
                "name": "A String", # The name of the property.  This name should correspond to the name of the
                    # property that was registered for object definition in the schema.
                    # The maximum allowable length for this property is 256 characters.
              },
            ],
          },
          "hash": "A String", # Hashing value provided by the API caller.
              # This can be used with the
              # items.push
              # method to calculate modified state.
              # The maximum length is 2048 characters.
        },
        "payload": "A String", # Additional state connector can store for this item.
            # The maximum length is 10000 bytes.
        "metadata": { # Available metadata fields for the item. # Metadata information.
          "mimeType": "A String", # The original mime-type of
              # ItemContent.content
              # in the source repository.
              # The maximum length is 256 characters.
          "containerName": "A String", # The name of the container for this item.
              # Deletion of the container item leads to automatic deletion of this
              # item.  Note: ACLs are not inherited from a container item.
              # To provide ACL inheritance for an item, use the
              # inheritAclFrom
              # field. The maximum length is 1536 characters.
          "updateTime": "A String", # The time when the item was last modified in the source repository.
          "hash": "A String", # Hashing value provided by the API caller.
              # This can be used with the
              # items.push
              # method to calculate modified state.
              # The maximum length is 2048 characters.
          "contentLanguage": "A String", # The BCP-47 language code for the item, such as "en-US" or "sr-Latn". For
              # more information, see
              # http://www.unicode.org/reports/tr35/#Unicode_locale_identifier.
              # The maximum length is 32 characters.
          "title": "A String", # The title of the item.  If given, this will be the displayed title of the
              # Search result.
              # The maximum length is 2048 characters.
          "interactions": [ # A list of interactions for the item.  Interactions are used to improve
              # Search quality, but are not exposed to end users.
              # The maximum number of elements is 1000.
            { # Represents an interaction between a user and an item.
              "interactionTime": "A String", # The time when the user acted on the item.  If multiple actions of the same
                  # type exist for a single user, only the most recent action is recorded.
              "type": "A String",
              "principal": { # Reference to a user, group, or domain. # The user that acted on the item.
                "userResourceName": "A String", # This principal is a user identified using an external identity.
                    # The name field must specify the user resource name with this format:
                    # identitysources/{source_id}/users/{ID}
                "groupResourceName": "A String", # This principal is a group identified using an external identity.
                    # The name field must specify the group resource name with this format:
                    # identitysources/{source_id}/groups/{ID}
                "gsuitePrincipal": { # This principal is a GSuite user, group or domain.
                  "gsuiteUserEmail": "A String", # This principal references a G Suite user account
                  "gsuiteDomain": True or False, # This principal represents all users of the G Suite domain of the
                      # customer.
                  "gsuiteGroupEmail": "A String", # This principal references a G Suite group account
                },
              },
            },
          ],
          "searchQualityMetadata": { # Additional search quality metadata of the item. # Additional search quality metadata of the item
            "quality": 3.14, # An indication of the quality of the item, used to influence search quality.
                # Value should be between 0.0 (lowest quality) and 1.0 (highest quality). The
                # default value is 0.0.
          },
          "keywords": [ # Additional keywords or phrases that should match the item.
              # Used internally for user generated content.
              # The maximum number of elements is 100.
              # The maximum length is 8192 characters.
            "A String",
          ],
          "sourceRepositoryUrl": "A String", # Link to the source repository serving the data.  &#83;earch results apply
              # this link to the title.
              # The maximum length is 2048 characters.
          "createTime": "A String", # The time when the item was created in the source repository.
          "objectType": "A String", # The type of the item.  This should correspond to the name of an object
              # definition in the schema registered for the data source.  For example, if
              # the schema for the data source contains an object definition with name
              # 'document', then item indexing requests for objects of that type should set
              # objectType to 'document'.
              # The maximum length is 256 characters.
        },
      },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
  <pre>Retrieves the next page of results.

Args:
  previous_request: The request for the previous page. (required)
  previous_response: The response from the request for the previous page. (required)

Returns:
  A request object that you can call 'execute()' on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

<div class="method">
    <code class="details" id="poll">poll(name, body, x__xgafv=None)</code>
  <pre>Polls for unreserved items from the indexing queue and marks a
set as reserved, starting with items that have
the oldest timestamp from the highest priority
ItemStatus.
The priority order is as follows: <br />
ERROR
<br />
MODIFIED
<br />
NEW_ITEM
<br />
ACCEPTED
<br />
Reserving items ensures that polling from other threads
cannot create overlapping sets.

After handling the reserved items, the client should put items back
into the unreserved state, either by calling
index,
or by calling
push with
the type REQUEUE.

Items automatically become available (unreserved) after 4 hours even if no
update or push method is called.

Args:
  name: string, Name of the Data Source to poll items.
Format: datasources/{source_id} (required)
  body: object, The request body. (required)
    The object takes the form of:

{
    "queue": "A String", # Queue name to fetch items from.  If unspecified, PollItems will
        # fetch from 'default' queue.
        # The maximum length is 100 characters.
    "debugOptions": { # Shared request debug options for all cloudsearch RPC methods. # Common debug options.
      "enableDebugging": True or False, # If you are asked by Google to help with debugging, set this field.
          # Otherwise, ignore this field.
    },
    "limit": 42, # Maximum number of items to return.
        # <br />The maximum and the default value is 1000
    "connectorName": "A String", # Name of connector making this call.
        # <br />Format: datasources/{source_id}/connectors/{ID}
    "statusCodes": [ # Limit the items polled to the ones with these statuses.
      "A String",
    ],
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    {
    "items": [ # Set of items from the queue available for connector to process.
        # <br />These items have the following subset of fields populated: <br />
        # <br />version
        # <br />metadata.hash
        # <br />structured_data.hash
        # <br />content.hash
        # <br />payload
        # <br />status
        # <br />queue
      { # Represents a single object that is an item in the search index, such as a
          # file, folder, or a database record.
        "status": { # This contains item's status and any errors. # Status of the item.
            # Output only field.
          "processingErrors": [ # Error details in case the item is in ERROR state.
            {
              "code": "A String", # Error code indicating the nature of the error.
              "errorMessage": "A String", # Description of the error.
              "fieldViolations": [ # In case the item fields are invalid, this field contains the details
                  # about the validation errors.
                {
                  "field": "A String", # Path of field with violation.
                  "description": "A String", # Description of the error.
                },
              ],
            },
          ],
          "repositoryErrors": [ # Repository error reported by connector.
            { # Errors when the connector is communicating to the source repository.
              "httpStatusCode": 42, # Error codes.  Matches the definition of HTTP status codes.
              "errorMessage": "A String", # Message that describes the error. The maximum allowable length
                  # of the message is 8192 characters.
              "type": "A String", # Type of error.
            },
          ],
          "code": "A String", # Status code.
        },
        "queue": "A String", # Queue this item belongs to.
            # The maximum length is 100 characters.
        "name": "A String", # Name of the Item. Format:
            # datasources/{source_id}/items/{item_id}
            # <br />This is a required field.
            # The maximum length is 1536 characters.
        "acl": { # Access control list information for the item. For more information see # Access control list for this item.
            # https://developers.google.com/cloud-search/docs/guides/index-your-data#acls
          "aclInheritanceType": "A String", # Sets the type of access rules to apply when an item inherits its ACL from a
              # parent. This should always be set in tandem with the
              # inheritAclFrom
              # field. Also, when the
              # inheritAclFrom field
              # is set, this field should be set to a valid AclInheritanceType.
          "readers": [ # List of principals who are allowed to see the item in search results.
              # Optional if inheriting permissions from another item or if the item
              # is not intended to be visible, such as
              # virtual
              # containers.
              # The maximum number of elements is 1000.
            { # Reference to a user, group, or domain.
              "userResourceName": "A String", # This principal is a user identified using an external identity.
                  # The name field must specify the user resource name with this format:
                  # identitysources/{source_id}/users/{ID}
              "groupResourceName": "A String", # This principal is a group identified using an external identity.
                  # The name field must specify the group resource name with this format:
                  # identitysources/{source_id}/groups/{ID}
              "gsuitePrincipal": { # This principal is a GSuite user, group or domain.
                "gsuiteUserEmail": "A String", # This principal references a G Suite user account
                "gsuiteDomain": True or False, # This principal represents all users of the G Suite domain of the
                    # customer.
                "gsuiteGroupEmail": "A String", # This principal references a G Suite group account
              },
            },
          ],
          "deniedReaders": [ # List of principals who are explicitly denied access to the item in search
              # results. While principals are denied access by default, use denied readers
              # to handle exceptions and override the list allowed readers.
              # The maximum number of elements is 100.
            { # Reference to a user, group, or domain.
              "userResourceName": "A String", # This principal is a user identified using an external identity.
                  # The name field must specify the user resource name with this format:
                  # identitysources/{source_id}/users/{ID}
              "groupResourceName": "A String", # This principal is a group identified using an external identity.
                  # The name field must specify the group resource name with this format:
                  # identitysources/{source_id}/groups/{ID}
              "gsuitePrincipal": { # This principal is a GSuite user, group or domain.
                "gsuiteUserEmail": "A String", # This principal references a G Suite user account
                "gsuiteDomain": True or False, # This principal represents all users of the G Suite domain of the
                    # customer.
                "gsuiteGroupEmail": "A String", # This principal references a G Suite group account
              },
            },
          ],
          "owners": [ # Optional. List of owners for the item. This field has no bearing on
              # document access permissions. It does, however, offer
              # a slight ranking boosts items where the querying user is an owner.
              # The maximum number of elements is 5.
            { # Reference to a user, group, or domain.
              "userResourceName": "A String", # This principal is a user identified using an external identity.
                  # The name field must specify the user resource name with this format:
                  # identitysources/{source_id}/users/{ID}
              "groupResourceName": "A String", # This principal is a group identified using an external identity.
                  # The name field must specify the group resource name with this format:
                  # identitysources/{source_id}/groups/{ID}
              "gsuitePrincipal": { # This principal is a GSuite user, group or domain.
                "gsuiteUserEmail": "A String", # This principal references a G Suite user account
                "gsuiteDomain": True or False, # This principal represents all users of the G Suite domain of the
                    # customer.
                "gsuiteGroupEmail": "A String", # This principal references a G Suite group account
              },
            },
          ],
          "inheritAclFrom": "A String", # Name of the item to inherit the Access Permission List (ACL) from.
              # Note: ACL inheritance *only* provides access permissions
              # to child items and does not define structural relationships, nor does it
              # provide convenient ways to delete large groups of items.
              # Deleting an ACL parent from the index only alters the access permissions of
              # child items that reference the parent in the
              # inheritAclFrom
              # field. The item is still in the index, but may not
              # visible in search results. By contrast, deletion of a container item
              # also deletes all items that reference the container via the
              # containerName
              # field.
              # The maximum length for this field is 1536 characters.
        },
        "content": { # Content of an item to be indexed and surfaced by Cloud Search. # Item content to be indexed and made text searchable.
          "contentDataRef": { # Represents an upload session reference. # Upload reference ID of a previously uploaded content via write method.
              # This reference is created via upload
              # method.
              # Updating of item content may refer to this uploaded content via
              # contentDataRef.
            "name": "A String", # Name of the content reference.
                # The maximum length is 2048 characters.
          },
          "contentFormat": "A String",
          "hash": "A String", # Hashing info calculated and provided by the API client for content.
              # Can be used with the items.push method to calculate modified state.
              # The maximum length is 2048 characters.
          "inlineContent": "A String", # Content that is supplied inlined within the update method.
              # The maximum length is 102400 bytes (100 KiB).
        },
        "version": "A String", # Required. The indexing system stores the version from the datasource as a
            # byte string and compares the Item version in the index
            # to the version of the queued Item using lexical ordering.
            # <br /><br />
            # Cloud Search Indexing won't index or delete any queued item with
            # a version value that is less than or equal to the version of the
            # currently indexed item.
            # The maximum length for this field is 1024 bytes.
        "itemType": "A String", # Type for this item.
        "structuredData": { # Available structured data fields for the item. # The structured data for the item that should conform to a registered
            # object definition in the schema for the data source.
          "object": { # A structured data object consisting of named properties. # The structured data object that should conform to a registered object
              # definition in the schema for the data source.
            "properties": [ # The properties for the object.
                # The maximum number of elements is 1000.
              { # A typed name-value pair for structured data.  The type of the value should
                  # be the same as the registered type for the `name` property in the object
                  # definition of `objectType`.
                "objectValues": { # List of object values.
                  "values": [
                    # Object with schema name: StructuredDataObject
                  ],
                },
                "dateValues": { # List of date values.
                  "values": [
                    { # Represents a whole calendar date, for example a date of birth. The time of day and time zone are either specified elsewhere or are not significant. The date is relative to the [Proleptic Gregorian Calendar](https://en.wikipedia.org/wiki/Proleptic_Gregorian_calendar). The date must be a valid calendar date between the year 1 and 9999.
                      "month": 42, # Month of date. Must be from 1 to 12.
                      "day": 42, # Day of month. Must be from 1 to 31 and valid for the year and month.
                      "year": 42, # Year of date. Must be from 1 to 9999.
                    },
                  ],
                },
                "textValues": { # List of text values.
                  "values": [ # The maximum allowable length for text values is 2048 characters.
                    "A String",
                  ],
                },
                "enumValues": { # List of enum values.
                  "values": [ # The maximum allowable length for string values is 32 characters.
                    "A String",
                  ],
                },
                "integerValues": { # List of integer values.
                  "values": [
                    "A String",
                  ],
                },
                "doubleValues": { # List of double values.
                  "values": [
                    3.14,
                  ],
                },
                "htmlValues": { # List of html values.
                  "values": [ # The maximum allowable length for html values is 2048 characters.
                    "A String",
                  ],
                },
                "booleanValue": True or False,
                "timestampValues": { # List of timestamp values.
                  "values": [
                    "A String",
                  ],
                },
                "name": "A String", # The name of the property.  This name should correspond to the name of the
                    # property that was registered for object definition in the schema.
                    # The maximum allowable length for this property is 256 characters.
              },
            ],
          },
          "hash": "A String", # Hashing value provided by the API caller.
              # This can be used with the
              # items.push
              # method to calculate modified state.
              # The maximum length is 2048 characters.
        },
        "payload": "A String", # Additional state connector can store for this item.
            # The maximum length is 10000 bytes.
        "metadata": { # Available metadata fields for the item. # Metadata information.
          "mimeType": "A String", # The original mime-type of
              # ItemContent.content
              # in the source repository.
              # The maximum length is 256 characters.
          "containerName": "A String", # The name of the container for this item.
              # Deletion of the container item leads to automatic deletion of this
              # item.  Note: ACLs are not inherited from a container item.
              # To provide ACL inheritance for an item, use the
              # inheritAclFrom
              # field. The maximum length is 1536 characters.
          "updateTime": "A String", # The time when the item was last modified in the source repository.
          "hash": "A String", # Hashing value provided by the API caller.
              # This can be used with the
              # items.push
              # method to calculate modified state.
              # The maximum length is 2048 characters.
          "contentLanguage": "A String", # The BCP-47 language code for the item, such as "en-US" or "sr-Latn". For
              # more information, see
              # http://www.unicode.org/reports/tr35/#Unicode_locale_identifier.
              # The maximum length is 32 characters.
          "title": "A String", # The title of the item.  If given, this will be the displayed title of the
              # Search result.
              # The maximum length is 2048 characters.
          "interactions": [ # A list of interactions for the item.  Interactions are used to improve
              # Search quality, but are not exposed to end users.
              # The maximum number of elements is 1000.
            { # Represents an interaction between a user and an item.
              "interactionTime": "A String", # The time when the user acted on the item.  If multiple actions of the same
                  # type exist for a single user, only the most recent action is recorded.
              "type": "A String",
              "principal": { # Reference to a user, group, or domain. # The user that acted on the item.
                "userResourceName": "A String", # This principal is a user identified using an external identity.
                    # The name field must specify the user resource name with this format:
                    # identitysources/{source_id}/users/{ID}
                "groupResourceName": "A String", # This principal is a group identified using an external identity.
                    # The name field must specify the group resource name with this format:
                    # identitysources/{source_id}/groups/{ID}
                "gsuitePrincipal": { # This principal is a GSuite user, group or domain.
                  "gsuiteUserEmail": "A String", # This principal references a G Suite user account
                  "gsuiteDomain": True or False, # This principal represents all users of the G Suite domain of the
                      # customer.
                  "gsuiteGroupEmail": "A String", # This principal references a G Suite group account
                },
              },
            },
          ],
          "searchQualityMetadata": { # Additional search quality metadata of the item. # Additional search quality metadata of the item
            "quality": 3.14, # An indication of the quality of the item, used to influence search quality.
                # Value should be between 0.0 (lowest quality) and 1.0 (highest quality). The
                # default value is 0.0.
          },
          "keywords": [ # Additional keywords or phrases that should match the item.
              # Used internally for user generated content.
              # The maximum number of elements is 100.
              # The maximum length is 8192 characters.
            "A String",
          ],
          "sourceRepositoryUrl": "A String", # Link to the source repository serving the data.  &#83;earch results apply
              # this link to the title.
              # The maximum length is 2048 characters.
          "createTime": "A String", # The time when the item was created in the source repository.
          "objectType": "A String", # The type of the item.  This should correspond to the name of an object
              # definition in the schema registered for the data source.  For example, if
              # the schema for the data source contains an object definition with name
              # 'document', then item indexing requests for objects of that type should set
              # objectType to 'document'.
              # The maximum length is 256 characters.
        },
      },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="push">push(name, body, x__xgafv=None)</code>
  <pre>Pushes an item onto a queue for later polling and updating.

Args:
  name: string, Name of the item to
push into the indexing queue.<br />
Format: datasources/{source_id}/items/{ID}
<br />This is a required field.
The maximum length is 1536 characters. (required)
  body: object, The request body. (required)
    The object takes the form of:

{
    "item": { # Represents an item to be pushed to the indexing queue. # Item to push onto the queue.
      "contentHash": "A String", # Content hash of the item according to the repository. If specified, this is
          # used to determine how to modify this
          # item's status. Setting this field and the
          # type field results in argument
          # error.
          # The maximum length is 2048 characters.
      "metadataHash": "A String", # Metadata hash of the item according to the repository. If specified, this
          # is used to determine how to modify this
          # item's status. Setting this field and the
          # type field results in argument
          # error.
          # The maximum length is 2048 characters.
      "queue": "A String", # Queue to which this item belongs to.  The <code>default</code> queue is
          # chosen if this field is not specified. The maximum length is
          # 512 characters.
      "repositoryError": { # Errors when the connector is communicating to the source repository. # Populate this field to store Connector or repository error details.
          # This information is displayed in the Admin Console.
          # This field may only be populated when the
          # Type is
          # REPOSITORY_ERROR.
        "httpStatusCode": 42, # Error codes.  Matches the definition of HTTP status codes.
        "errorMessage": "A String", # Message that describes the error. The maximum allowable length
            # of the message is 8192 characters.
        "type": "A String", # Type of error.
      },
      "structuredDataHash": "A String", # Structured data hash of the item according to the repository. If specified,
          # this is used to determine how to modify this item's status. Setting this
          # field and the type field
          # results in argument error.
          # The maximum length is 2048 characters.
      "type": "A String", # The type of the push operation that defines the push behavior.
      "payload": "A String", # Provides additional document state information for the connector,
          # such as an alternate repository ID and other metadata.
          # The maximum length is 8192 bytes.
    },
    "connectorName": "A String", # Name of connector making this call.
        # <br />Format: datasources/{source_id}/connectors/{ID}
    "debugOptions": { # Shared request debug options for all cloudsearch RPC methods. # Common debug options.
      "enableDebugging": True or False, # If you are asked by Google to help with debugging, set this field.
          # Otherwise, ignore this field.
    },
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Represents a single object that is an item in the search index, such as a
      # file, folder, or a database record.
    "status": { # This contains item's status and any errors. # Status of the item.
        # Output only field.
      "processingErrors": [ # Error details in case the item is in ERROR state.
        {
          "code": "A String", # Error code indicating the nature of the error.
          "errorMessage": "A String", # Description of the error.
          "fieldViolations": [ # In case the item fields are invalid, this field contains the details
              # about the validation errors.
            {
              "field": "A String", # Path of field with violation.
              "description": "A String", # Description of the error.
            },
          ],
        },
      ],
      "repositoryErrors": [ # Repository error reported by connector.
        { # Errors when the connector is communicating to the source repository.
          "httpStatusCode": 42, # Error codes.  Matches the definition of HTTP status codes.
          "errorMessage": "A String", # Message that describes the error. The maximum allowable length
              # of the message is 8192 characters.
          "type": "A String", # Type of error.
        },
      ],
      "code": "A String", # Status code.
    },
    "queue": "A String", # Queue this item belongs to.
        # The maximum length is 100 characters.
    "name": "A String", # Name of the Item. Format:
        # datasources/{source_id}/items/{item_id}
        # <br />This is a required field.
        # The maximum length is 1536 characters.
    "acl": { # Access control list information for the item. For more information see # Access control list for this item.
        # https://developers.google.com/cloud-search/docs/guides/index-your-data#acls
      "aclInheritanceType": "A String", # Sets the type of access rules to apply when an item inherits its ACL from a
          # parent. This should always be set in tandem with the
          # inheritAclFrom
          # field. Also, when the
          # inheritAclFrom field
          # is set, this field should be set to a valid AclInheritanceType.
      "readers": [ # List of principals who are allowed to see the item in search results.
          # Optional if inheriting permissions from another item or if the item
          # is not intended to be visible, such as
          # virtual
          # containers.
          # The maximum number of elements is 1000.
        { # Reference to a user, group, or domain.
          "userResourceName": "A String", # This principal is a user identified using an external identity.
              # The name field must specify the user resource name with this format:
              # identitysources/{source_id}/users/{ID}
          "groupResourceName": "A String", # This principal is a group identified using an external identity.
              # The name field must specify the group resource name with this format:
              # identitysources/{source_id}/groups/{ID}
          "gsuitePrincipal": { # This principal is a GSuite user, group or domain.
            "gsuiteUserEmail": "A String", # This principal references a G Suite user account
            "gsuiteDomain": True or False, # This principal represents all users of the G Suite domain of the
                # customer.
            "gsuiteGroupEmail": "A String", # This principal references a G Suite group account
          },
        },
      ],
      "deniedReaders": [ # List of principals who are explicitly denied access to the item in search
          # results. While principals are denied access by default, use denied readers
          # to handle exceptions and override the list allowed readers.
          # The maximum number of elements is 100.
        { # Reference to a user, group, or domain.
          "userResourceName": "A String", # This principal is a user identified using an external identity.
              # The name field must specify the user resource name with this format:
              # identitysources/{source_id}/users/{ID}
          "groupResourceName": "A String", # This principal is a group identified using an external identity.
              # The name field must specify the group resource name with this format:
              # identitysources/{source_id}/groups/{ID}
          "gsuitePrincipal": { # This principal is a GSuite user, group or domain.
            "gsuiteUserEmail": "A String", # This principal references a G Suite user account
            "gsuiteDomain": True or False, # This principal represents all users of the G Suite domain of the
                # customer.
            "gsuiteGroupEmail": "A String", # This principal references a G Suite group account
          },
        },
      ],
      "owners": [ # Optional. List of owners for the item. This field has no bearing on
          # document access permissions. It does, however, offer
          # a slight ranking boosts items where the querying user is an owner.
          # The maximum number of elements is 5.
        { # Reference to a user, group, or domain.
          "userResourceName": "A String", # This principal is a user identified using an external identity.
              # The name field must specify the user resource name with this format:
              # identitysources/{source_id}/users/{ID}
          "groupResourceName": "A String", # This principal is a group identified using an external identity.
              # The name field must specify the group resource name with this format:
              # identitysources/{source_id}/groups/{ID}
          "gsuitePrincipal": { # This principal is a GSuite user, group or domain.
            "gsuiteUserEmail": "A String", # This principal references a G Suite user account
            "gsuiteDomain": True or False, # This principal represents all users of the G Suite domain of the
                # customer.
            "gsuiteGroupEmail": "A String", # This principal references a G Suite group account
          },
        },
      ],
      "inheritAclFrom": "A String", # Name of the item to inherit the Access Permission List (ACL) from.
          # Note: ACL inheritance *only* provides access permissions
          # to child items and does not define structural relationships, nor does it
          # provide convenient ways to delete large groups of items.
          # Deleting an ACL parent from the index only alters the access permissions of
          # child items that reference the parent in the
          # inheritAclFrom
          # field. The item is still in the index, but may not
          # visible in search results. By contrast, deletion of a container item
          # also deletes all items that reference the container via the
          # containerName
          # field.
          # The maximum length for this field is 1536 characters.
    },
    "content": { # Content of an item to be indexed and surfaced by Cloud Search. # Item content to be indexed and made text searchable.
      "contentDataRef": { # Represents an upload session reference. # Upload reference ID of a previously uploaded content via write method.
          # This reference is created via upload
          # method.
          # Updating of item content may refer to this uploaded content via
          # contentDataRef.
        "name": "A String", # Name of the content reference.
            # The maximum length is 2048 characters.
      },
      "contentFormat": "A String",
      "hash": "A String", # Hashing info calculated and provided by the API client for content.
          # Can be used with the items.push method to calculate modified state.
          # The maximum length is 2048 characters.
      "inlineContent": "A String", # Content that is supplied inlined within the update method.
          # The maximum length is 102400 bytes (100 KiB).
    },
    "version": "A String", # Required. The indexing system stores the version from the datasource as a
        # byte string and compares the Item version in the index
        # to the version of the queued Item using lexical ordering.
        # <br /><br />
        # Cloud Search Indexing won't index or delete any queued item with
        # a version value that is less than or equal to the version of the
        # currently indexed item.
        # The maximum length for this field is 1024 bytes.
    "itemType": "A String", # Type for this item.
    "structuredData": { # Available structured data fields for the item. # The structured data for the item that should conform to a registered
        # object definition in the schema for the data source.
      "object": { # A structured data object consisting of named properties. # The structured data object that should conform to a registered object
          # definition in the schema for the data source.
        "properties": [ # The properties for the object.
            # The maximum number of elements is 1000.
          { # A typed name-value pair for structured data.  The type of the value should
              # be the same as the registered type for the `name` property in the object
              # definition of `objectType`.
            "objectValues": { # List of object values.
              "values": [
                # Object with schema name: StructuredDataObject
              ],
            },
            "dateValues": { # List of date values.
              "values": [
                { # Represents a whole calendar date, for example a date of birth. The time of day and time zone are either specified elsewhere or are not significant. The date is relative to the [Proleptic Gregorian Calendar](https://en.wikipedia.org/wiki/Proleptic_Gregorian_calendar). The date must be a valid calendar date between the year 1 and 9999.
                  "month": 42, # Month of date. Must be from 1 to 12.
                  "day": 42, # Day of month. Must be from 1 to 31 and valid for the year and month.
                  "year": 42, # Year of date. Must be from 1 to 9999.
                },
              ],
            },
            "textValues": { # List of text values.
              "values": [ # The maximum allowable length for text values is 2048 characters.
                "A String",
              ],
            },
            "enumValues": { # List of enum values.
              "values": [ # The maximum allowable length for string values is 32 characters.
                "A String",
              ],
            },
            "integerValues": { # List of integer values.
              "values": [
                "A String",
              ],
            },
            "doubleValues": { # List of double values.
              "values": [
                3.14,
              ],
            },
            "htmlValues": { # List of html values.
              "values": [ # The maximum allowable length for html values is 2048 characters.
                "A String",
              ],
            },
            "booleanValue": True or False,
            "timestampValues": { # List of timestamp values.
              "values": [
                "A String",
              ],
            },
            "name": "A String", # The name of the property.  This name should correspond to the name of the
                # property that was registered for object definition in the schema.
                # The maximum allowable length for this property is 256 characters.
          },
        ],
      },
      "hash": "A String", # Hashing value provided by the API caller.
          # This can be used with the
          # items.push
          # method to calculate modified state.
          # The maximum length is 2048 characters.
    },
    "payload": "A String", # Additional state connector can store for this item.
        # The maximum length is 10000 bytes.
    "metadata": { # Available metadata fields for the item. # Metadata information.
      "mimeType": "A String", # The original mime-type of
          # ItemContent.content
          # in the source repository.
          # The maximum length is 256 characters.
      "containerName": "A String", # The name of the container for this item.
          # Deletion of the container item leads to automatic deletion of this
          # item.  Note: ACLs are not inherited from a container item.
          # To provide ACL inheritance for an item, use the
          # inheritAclFrom
          # field. The maximum length is 1536 characters.
      "updateTime": "A String", # The time when the item was last modified in the source repository.
      "hash": "A String", # Hashing value provided by the API caller.
          # This can be used with the
          # items.push
          # method to calculate modified state.
          # The maximum length is 2048 characters.
      "contentLanguage": "A String", # The BCP-47 language code for the item, such as "en-US" or "sr-Latn". For
          # more information, see
          # http://www.unicode.org/reports/tr35/#Unicode_locale_identifier.
          # The maximum length is 32 characters.
      "title": "A String", # The title of the item.  If given, this will be the displayed title of the
          # Search result.
          # The maximum length is 2048 characters.
      "interactions": [ # A list of interactions for the item.  Interactions are used to improve
          # Search quality, but are not exposed to end users.
          # The maximum number of elements is 1000.
        { # Represents an interaction between a user and an item.
          "interactionTime": "A String", # The time when the user acted on the item.  If multiple actions of the same
              # type exist for a single user, only the most recent action is recorded.
          "type": "A String",
          "principal": { # Reference to a user, group, or domain. # The user that acted on the item.
            "userResourceName": "A String", # This principal is a user identified using an external identity.
                # The name field must specify the user resource name with this format:
                # identitysources/{source_id}/users/{ID}
            "groupResourceName": "A String", # This principal is a group identified using an external identity.
                # The name field must specify the group resource name with this format:
                # identitysources/{source_id}/groups/{ID}
            "gsuitePrincipal": { # This principal is a GSuite user, group or domain.
              "gsuiteUserEmail": "A String", # This principal references a G Suite user account
              "gsuiteDomain": True or False, # This principal represents all users of the G Suite domain of the
                  # customer.
              "gsuiteGroupEmail": "A String", # This principal references a G Suite group account
            },
          },
        },
      ],
      "searchQualityMetadata": { # Additional search quality metadata of the item. # Additional search quality metadata of the item
        "quality": 3.14, # An indication of the quality of the item, used to influence search quality.
            # Value should be between 0.0 (lowest quality) and 1.0 (highest quality). The
            # default value is 0.0.
      },
      "keywords": [ # Additional keywords or phrases that should match the item.
          # Used internally for user generated content.
          # The maximum number of elements is 100.
          # The maximum length is 8192 characters.
        "A String",
      ],
      "sourceRepositoryUrl": "A String", # Link to the source repository serving the data.  &#83;earch results apply
          # this link to the title.
          # The maximum length is 2048 characters.
      "createTime": "A String", # The time when the item was created in the source repository.
      "objectType": "A String", # The type of the item.  This should correspond to the name of an object
          # definition in the schema registered for the data source.  For example, if
          # the schema for the data source contains an object definition with name
          # 'document', then item indexing requests for objects of that type should set
          # objectType to 'document'.
          # The maximum length is 256 characters.
    },
  }</pre>
</div>

<div class="method">
    <code class="details" id="unreserve">unreserve(name, body, x__xgafv=None)</code>
  <pre>Unreserves all items from a queue, making them all eligible to be
polled.  This method is useful for resetting the indexing queue
after a connector has been restarted.

Args:
  name: string, Name of the Data Source to unreserve all items.
Format: datasources/{source_id} (required)
  body: object, The request body. (required)
    The object takes the form of:

{
    "queue": "A String", # Name of a queue to unreserve items from.
    "debugOptions": { # Shared request debug options for all cloudsearch RPC methods. # Common debug options.
      "enableDebugging": True or False, # If you are asked by Google to help with debugging, set this field.
          # Otherwise, ignore this field.
    },
    "connectorName": "A String", # Name of connector making this call.
        # <br />Format: datasources/{source_id}/connectors/{ID}
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # This resource represents a long-running operation that is the result of a
      # network API call.
    "metadata": { # Service-specific metadata associated with the operation.  It typically
        # contains progress information and common metadata such as create time.
        # Some services might not provide such metadata.  Any method that returns a
        # long-running operation should document the metadata type, if any.
      "a_key": "", # Properties of the object. Contains field @type with type URL.
    },
    "error": { # The `Status` type defines a logical error model that is suitable for # The error result of the operation in case of failure or cancellation.
        # different programming environments, including REST APIs and RPC APIs. It is
        # used by [gRPC](https://github.com/grpc). Each `Status` message contains
        # three pieces of data: error code, error message, and error details.
        #
        # You can find out more about this error model and how to work with it in the
        # [API Design Guide](https://cloud.google.com/apis/design/errors).
      "message": "A String", # A developer-facing error message, which should be in English. Any
          # user-facing error message should be localized and sent in the
          # google.rpc.Status.details field, or localized by the client.
      "code": 42, # The status code, which should be an enum value of google.rpc.Code.
      "details": [ # A list of messages that carry the error details.  There is a common set of
          # message types for APIs to use.
        {
          "a_key": "", # Properties of the object. Contains field @type with type URL.
        },
      ],
    },
    "done": True or False, # If the value is `false`, it means the operation is still in progress.
        # If `true`, the operation is completed, and either `error` or `response` is
        # available.
    "response": { # The normal response of the operation in case of success.  If the original
        # method returns no data on success, such as `Delete`, the response is
        # `google.protobuf.Empty`.  If the original method is standard
        # `Get`/`Create`/`Update`, the response should be the resource.  For other
        # methods, the response should have the type `XxxResponse`, where `Xxx`
        # is the original method name.  For example, if the original method name
        # is `TakeSnapshot()`, the inferred response type is
        # `TakeSnapshotResponse`.
      "a_key": "", # Properties of the object. Contains field @type with type URL.
    },
    "name": "A String", # The server-assigned name, which is only unique within the same service that
        # originally returns it. If you use the default HTTP mapping, the
        # `name` should be a resource name ending with `operations/{unique_id}`.
  }</pre>
</div>

<div class="method">
    <code class="details" id="upload">upload(name, body, x__xgafv=None)</code>
  <pre>Creates an upload session for uploading item content. For items smaller
than 100 KiB, it's easier to embed the content
inline within
update.

Args:
  name: string, Name of the Item to start a resumable upload.
Format: datasources/{source_id}/items/{item_id}. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # Start upload file request.
    "debugOptions": { # Shared request debug options for all cloudsearch RPC methods. # Common debug options.
      "enableDebugging": True or False, # If you are asked by Google to help with debugging, set this field.
          # Otherwise, ignore this field.
    },
    "connectorName": "A String", # Name of connector making this call.
        # <br />Format: datasources/{source_id}/connectors/{ID}
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Represents an upload session reference.
      # This reference is created via upload
      # method.
      # Updating of item content may refer to this uploaded content via
      # contentDataRef.
    "name": "A String", # Name of the content reference.
        # The maximum length is 2048 characters.
  }</pre>
</div>

</body></html>