<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.children.html">children</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#delete">delete(folderId, childId, enforceSingleParent=None)</a></code></p>
<p class="firstline">Removes a child from a folder.</p>
<p class="toc_element">
  <code><a href="#get">get(folderId, childId)</a></code></p>
<p class="firstline">Gets a specific child reference.</p>
<p class="toc_element">
  <code><a href="#insert">insert(folderId, body=None, enforceSingleParent=None, supportsAllDrives=None, supportsTeamDrives=None)</a></code></p>
<p class="firstline">Inserts a file into a folder.</p>
<p class="toc_element">
  <code><a href="#list">list(folderId, maxResults=None, orderBy=None, pageToken=None, q=None)</a></code></p>
<p class="firstline">Lists a folder's children.</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>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="delete">delete(folderId, childId, enforceSingleParent=None)</code>
  <pre>Removes a child from a folder.

Args:
  folderId: string, The ID of the folder. (required)
  childId: string, The ID of the child. (required)
  enforceSingleParent: boolean, Set to true to opt in to API behavior that aims for all items to have exactly one parent. This parameter only takes effect if the item is not in a shared drive. If the item&#x27;s last parent is removed, the item is placed under its owner&#x27;s root.
</pre>
</div>

<div class="method">
    <code class="details" id="get">get(folderId, childId)</code>
  <pre>Gets a specific child reference.

Args:
  folderId: string, The ID of the folder. (required)
  childId: string, The ID of the child. (required)

Returns:
  An object of the form:

    { # A reference to a folder&#x27;s child.
    &quot;childLink&quot;: &quot;A String&quot;, # A link to the child.
    &quot;id&quot;: &quot;A String&quot;, # The ID of the child.
    &quot;kind&quot;: &quot;drive#childReference&quot;, # This is always drive#childReference.
    &quot;selfLink&quot;: &quot;A String&quot;, # A link back to this reference.
  }</pre>
</div>

<div class="method">
    <code class="details" id="insert">insert(folderId, body=None, enforceSingleParent=None, supportsAllDrives=None, supportsTeamDrives=None)</code>
  <pre>Inserts a file into a folder.

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

{ # A reference to a folder&#x27;s child.
  &quot;childLink&quot;: &quot;A String&quot;, # A link to the child.
  &quot;id&quot;: &quot;A String&quot;, # The ID of the child.
  &quot;kind&quot;: &quot;drive#childReference&quot;, # This is always drive#childReference.
  &quot;selfLink&quot;: &quot;A String&quot;, # A link back to this reference.
}

  enforceSingleParent: boolean, Set to true to opt in to API behavior that aims for all items to have exactly one parent. This parameter only takes effect if the item is not in a shared drive. If the child&#x27;s owner makes the request, the child is removed from all current folders and placed in the requested folder. Any other requests that increase the number of the child&#x27;s parents fail, except when the canAddMyDriveParent file capability is true and a single parent is being added.
  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.
  supportsTeamDrives: boolean, Deprecated use supportsAllDrives instead.

Returns:
  An object of the form:

    { # A reference to a folder&#x27;s child.
    &quot;childLink&quot;: &quot;A String&quot;, # A link to the child.
    &quot;id&quot;: &quot;A String&quot;, # The ID of the child.
    &quot;kind&quot;: &quot;drive#childReference&quot;, # This is always drive#childReference.
    &quot;selfLink&quot;: &quot;A String&quot;, # A link back to this reference.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(folderId, maxResults=None, orderBy=None, pageToken=None, q=None)</code>
  <pre>Lists a folder&#x27;s children.

Args:
  folderId: string, The ID of the folder. (required)
  maxResults: integer, Maximum number of children to return.
  orderBy: string, A comma-separated list of sort keys. Valid keys are &#x27;createdDate&#x27;, &#x27;folder&#x27;, &#x27;lastViewedByMeDate&#x27;, &#x27;modifiedByMeDate&#x27;, &#x27;modifiedDate&#x27;, &#x27;quotaBytesUsed&#x27;, &#x27;recency&#x27;, &#x27;sharedWithMeDate&#x27;, &#x27;starred&#x27;, and &#x27;title&#x27;. Each key sorts ascending by default, but may be reversed with the &#x27;desc&#x27; modifier. Example usage: ?orderBy=folder,modifiedDate desc,title. Please note that there is a current limitation for users with approximately one million files in which the requested sort order is ignored.
  pageToken: string, Page token for children.
  q: string, Query string for searching children.

Returns:
  An object of the form:

    { # A list of children of a file.
    &quot;etag&quot;: &quot;A String&quot;, # The ETag of the list.
    &quot;items&quot;: [ # The list of children. If nextPageToken is populated, then this list may be incomplete and an additional page of results should be fetched.
      { # A reference to a folder&#x27;s child.
        &quot;childLink&quot;: &quot;A String&quot;, # A link to the child.
        &quot;id&quot;: &quot;A String&quot;, # The ID of the child.
        &quot;kind&quot;: &quot;drive#childReference&quot;, # This is always drive#childReference.
        &quot;selfLink&quot;: &quot;A String&quot;, # A link back to this reference.
      },
    ],
    &quot;kind&quot;: &quot;drive#childList&quot;, # This is always drive#childList.
    &quot;nextLink&quot;: &quot;A String&quot;, # A link to the next page of children.
    &quot;nextPageToken&quot;: &quot;A String&quot;, # The page token for the next page of children. This will be absent if the end of the children list has been reached. If the token is rejected for any reason, it should be discarded, and pagination should be restarted from the first page of results.
    &quot;selfLink&quot;: &quot;A String&quot;, # A link back to this list.
  }</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 &#x27;execute()&#x27; on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

</body></html>