<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="drive_v2.html">Drive API</a> . <a href="drive_v2.properties.html">properties</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#delete">delete(fileId, propertyKey, visibility=None)</a></code></p>
<p class="firstline">Deletes a property.</p>
<p class="toc_element">
  <code><a href="#get">get(fileId, propertyKey, visibility=None)</a></code></p>
<p class="firstline">Gets a property by its key.</p>
<p class="toc_element">
  <code><a href="#insert">insert(fileId, body=None)</a></code></p>
<p class="firstline">Adds a property to a file, or updates it if it already exists.</p>
<p class="toc_element">
  <code><a href="#list">list(fileId)</a></code></p>
<p class="firstline">Lists a file's properties.</p>
<p class="toc_element">
  <code><a href="#patch">patch(fileId, propertyKey, body=None, visibility=None)</a></code></p>
<p class="firstline">Updates a property.</p>
<p class="toc_element">
  <code><a href="#update">update(fileId, propertyKey, body=None, visibility=None)</a></code></p>
<p class="firstline">Updates a property.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="delete">delete(fileId, propertyKey, visibility=None)</code>
  <pre>Deletes a property.

Args:
  fileId: string, The ID of the file. (required)
  propertyKey: string, The key of the property. (required)
  visibility: string, The visibility of the property.
</pre>
</div>

<div class="method">
    <code class="details" id="get">get(fileId, propertyKey, visibility=None)</code>
  <pre>Gets a property by its key.

Args:
  fileId: string, The ID of the file. (required)
  propertyKey: string, The key of the property. (required)
  visibility: string, The visibility of the property.

Returns:
  An object of the form:

    { # A key-value pair attached to a file that is either public or private to an application.
      # The following limits apply to file properties:
      # - Maximum of 100 properties total per file
      # - Maximum of 30 private properties per app
      # - Maximum of 30 public properties
      # - Maximum of 124 bytes size limit on (key + value) string in UTF-8 encoding for a single property.
    &quot;etag&quot;: &quot;A String&quot;, # ETag of the property.
    &quot;key&quot;: &quot;A String&quot;, # The key of this property.
    &quot;kind&quot;: &quot;drive#property&quot;, # This is always drive#property.
    &quot;selfLink&quot;: &quot;A String&quot;, # The link back to this property.
    &quot;value&quot;: &quot;A String&quot;, # The value of this property.
    &quot;visibility&quot;: &quot;A String&quot;, # The visibility of this property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE)
  }</pre>
</div>

<div class="method">
    <code class="details" id="insert">insert(fileId, body=None)</code>
  <pre>Adds a property to a file, or updates it if it already exists.

Args:
  fileId: string, The ID of the file. (required)
  body: object, The request body.
    The object takes the form of:

{ # A key-value pair attached to a file that is either public or private to an application.
    # The following limits apply to file properties:
    # - Maximum of 100 properties total per file
    # - Maximum of 30 private properties per app
    # - Maximum of 30 public properties
    # - Maximum of 124 bytes size limit on (key + value) string in UTF-8 encoding for a single property.
  &quot;etag&quot;: &quot;A String&quot;, # ETag of the property.
  &quot;key&quot;: &quot;A String&quot;, # The key of this property.
  &quot;kind&quot;: &quot;drive#property&quot;, # This is always drive#property.
  &quot;selfLink&quot;: &quot;A String&quot;, # The link back to this property.
  &quot;value&quot;: &quot;A String&quot;, # The value of this property.
  &quot;visibility&quot;: &quot;A String&quot;, # The visibility of this property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE)
}


Returns:
  An object of the form:

    { # A key-value pair attached to a file that is either public or private to an application.
      # The following limits apply to file properties:
      # - Maximum of 100 properties total per file
      # - Maximum of 30 private properties per app
      # - Maximum of 30 public properties
      # - Maximum of 124 bytes size limit on (key + value) string in UTF-8 encoding for a single property.
    &quot;etag&quot;: &quot;A String&quot;, # ETag of the property.
    &quot;key&quot;: &quot;A String&quot;, # The key of this property.
    &quot;kind&quot;: &quot;drive#property&quot;, # This is always drive#property.
    &quot;selfLink&quot;: &quot;A String&quot;, # The link back to this property.
    &quot;value&quot;: &quot;A String&quot;, # The value of this property.
    &quot;visibility&quot;: &quot;A String&quot;, # The visibility of this property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE)
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(fileId)</code>
  <pre>Lists a file&#x27;s properties.

Args:
  fileId: string, The ID of the file. (required)

Returns:
  An object of the form:

    { # A collection of properties, key-value pairs that are either public or private to an application.
    &quot;etag&quot;: &quot;A String&quot;, # The ETag of the list.
    &quot;items&quot;: [ # The list of properties.
      { # A key-value pair attached to a file that is either public or private to an application.
          # The following limits apply to file properties:
          # - Maximum of 100 properties total per file
          # - Maximum of 30 private properties per app
          # - Maximum of 30 public properties
          # - Maximum of 124 bytes size limit on (key + value) string in UTF-8 encoding for a single property.
        &quot;etag&quot;: &quot;A String&quot;, # ETag of the property.
        &quot;key&quot;: &quot;A String&quot;, # The key of this property.
        &quot;kind&quot;: &quot;drive#property&quot;, # This is always drive#property.
        &quot;selfLink&quot;: &quot;A String&quot;, # The link back to this property.
        &quot;value&quot;: &quot;A String&quot;, # The value of this property.
        &quot;visibility&quot;: &quot;A String&quot;, # The visibility of this property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE)
      },
    ],
    &quot;kind&quot;: &quot;drive#propertyList&quot;, # This is always drive#propertyList.
    &quot;selfLink&quot;: &quot;A String&quot;, # The link back to this list.
  }</pre>
</div>

<div class="method">
    <code class="details" id="patch">patch(fileId, propertyKey, body=None, visibility=None)</code>
  <pre>Updates a property.

Args:
  fileId: string, The ID of the file. (required)
  propertyKey: string, The key of the property. (required)
  body: object, The request body.
    The object takes the form of:

{ # A key-value pair attached to a file that is either public or private to an application.
    # The following limits apply to file properties:
    # - Maximum of 100 properties total per file
    # - Maximum of 30 private properties per app
    # - Maximum of 30 public properties
    # - Maximum of 124 bytes size limit on (key + value) string in UTF-8 encoding for a single property.
  &quot;etag&quot;: &quot;A String&quot;, # ETag of the property.
  &quot;key&quot;: &quot;A String&quot;, # The key of this property.
  &quot;kind&quot;: &quot;drive#property&quot;, # This is always drive#property.
  &quot;selfLink&quot;: &quot;A String&quot;, # The link back to this property.
  &quot;value&quot;: &quot;A String&quot;, # The value of this property.
  &quot;visibility&quot;: &quot;A String&quot;, # The visibility of this property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE)
}

  visibility: string, The visibility of the property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE)

Returns:
  An object of the form:

    { # A key-value pair attached to a file that is either public or private to an application.
      # The following limits apply to file properties:
      # - Maximum of 100 properties total per file
      # - Maximum of 30 private properties per app
      # - Maximum of 30 public properties
      # - Maximum of 124 bytes size limit on (key + value) string in UTF-8 encoding for a single property.
    &quot;etag&quot;: &quot;A String&quot;, # ETag of the property.
    &quot;key&quot;: &quot;A String&quot;, # The key of this property.
    &quot;kind&quot;: &quot;drive#property&quot;, # This is always drive#property.
    &quot;selfLink&quot;: &quot;A String&quot;, # The link back to this property.
    &quot;value&quot;: &quot;A String&quot;, # The value of this property.
    &quot;visibility&quot;: &quot;A String&quot;, # The visibility of this property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE)
  }</pre>
</div>

<div class="method">
    <code class="details" id="update">update(fileId, propertyKey, body=None, visibility=None)</code>
  <pre>Updates a property.

Args:
  fileId: string, The ID of the file. (required)
  propertyKey: string, The key of the property. (required)
  body: object, The request body.
    The object takes the form of:

{ # A key-value pair attached to a file that is either public or private to an application.
    # The following limits apply to file properties:
    # - Maximum of 100 properties total per file
    # - Maximum of 30 private properties per app
    # - Maximum of 30 public properties
    # - Maximum of 124 bytes size limit on (key + value) string in UTF-8 encoding for a single property.
  &quot;etag&quot;: &quot;A String&quot;, # ETag of the property.
  &quot;key&quot;: &quot;A String&quot;, # The key of this property.
  &quot;kind&quot;: &quot;drive#property&quot;, # This is always drive#property.
  &quot;selfLink&quot;: &quot;A String&quot;, # The link back to this property.
  &quot;value&quot;: &quot;A String&quot;, # The value of this property.
  &quot;visibility&quot;: &quot;A String&quot;, # The visibility of this property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE)
}

  visibility: string, The visibility of the property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE)

Returns:
  An object of the form:

    { # A key-value pair attached to a file that is either public or private to an application.
      # The following limits apply to file properties:
      # - Maximum of 100 properties total per file
      # - Maximum of 30 private properties per app
      # - Maximum of 30 public properties
      # - Maximum of 124 bytes size limit on (key + value) string in UTF-8 encoding for a single property.
    &quot;etag&quot;: &quot;A String&quot;, # ETag of the property.
    &quot;key&quot;: &quot;A String&quot;, # The key of this property.
    &quot;kind&quot;: &quot;drive#property&quot;, # This is always drive#property.
    &quot;selfLink&quot;: &quot;A String&quot;, # The link back to this property.
    &quot;value&quot;: &quot;A String&quot;, # The value of this property.
    &quot;visibility&quot;: &quot;A String&quot;, # The visibility of this property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE)
  }</pre>
</div>

</body></html>