<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.parents.html">parents</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#delete">delete(fileId, parentId)</a></code></p>
<p class="firstline">Removes a parent from a file.</p>
<p class="toc_element">
  <code><a href="#get">get(fileId, parentId)</a></code></p>
<p class="firstline">Gets a specific parent reference.</p>
<p class="toc_element">
  <code><a href="#insert">insert(fileId, body, supportsTeamDrives=None, supportsAllDrives=None)</a></code></p>
<p class="firstline">Adds a parent folder for a file.</p>
<p class="toc_element">
  <code><a href="#list">list(fileId)</a></code></p>
<p class="firstline">Lists a file's parents.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="delete">delete(fileId, parentId)</code>
  <pre>Removes a parent from a file.

Args:
  fileId: string, The ID of the file. (required)
  parentId: string, The ID of the parent. (required)
</pre>
</div>

<div class="method">
    <code class="details" id="get">get(fileId, parentId)</code>
  <pre>Gets a specific parent reference.

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

Returns:
  An object of the form:

    { # A reference to a file's parent.
    "selfLink": "A String", # A link back to this reference.
    "kind": "drive#parentReference", # This is always drive#parentReference.
    "id": "A String", # The ID of the parent.
    "isRoot": True or False, # Whether or not the parent is the root folder.
    "parentLink": "A String", # A link to the parent.
  }</pre>
</div>

<div class="method">
    <code class="details" id="insert">insert(fileId, body, supportsTeamDrives=None, supportsAllDrives=None)</code>
  <pre>Adds a parent folder for a file.

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

{ # A reference to a file's parent.
  "selfLink": "A String", # A link back to this reference.
  "kind": "drive#parentReference", # This is always drive#parentReference.
  "id": "A String", # The ID of the parent.
  "isRoot": True or False, # Whether or not the parent is the root folder.
  "parentLink": "A String", # A link to the parent.
}

  supportsTeamDrives: boolean, Deprecated use supportsAllDrives instead.
  supportsAllDrives: boolean, Deprecated - Whether the requesting application supports both My Drives and shared drives. This parameter will only be effective until June 1, 2020. Afterwards all applications are assumed to support shared drives.

Returns:
  An object of the form:

    { # A reference to a file's parent.
    "selfLink": "A String", # A link back to this reference.
    "kind": "drive#parentReference", # This is always drive#parentReference.
    "id": "A String", # The ID of the parent.
    "isRoot": True or False, # Whether or not the parent is the root folder.
    "parentLink": "A String", # A link to the parent.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(fileId)</code>
  <pre>Lists a file's parents.

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

Returns:
  An object of the form:

    { # A list of a file's parents.
    "items": [ # The list of parents.
      { # A reference to a file's parent.
        "selfLink": "A String", # A link back to this reference.
        "kind": "drive#parentReference", # This is always drive#parentReference.
        "id": "A String", # The ID of the parent.
        "isRoot": True or False, # Whether or not the parent is the root folder.
        "parentLink": "A String", # A link to the parent.
      },
    ],
    "kind": "drive#parentList", # This is always drive#parentList.
    "etag": "A String", # The ETag of the list.
    "selfLink": "A String", # A link back to this list.
  }</pre>
</div>

</body></html>