<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="appengine_v1alpha.html">App Engine Admin API</a> . <a href="appengine_v1alpha.projects.html">projects</a> . <a href="appengine_v1alpha.projects.locations.html">locations</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="appengine_v1alpha.projects.locations.operations.html">operations()</a></code>
</p>
<p class="firstline">Returns the operations Resource.</p>

<p class="toc_element">
  <code><a href="#close">close()</a></code></p>
<p class="firstline">Close httplib2 connections.</p>
<p class="toc_element">
  <code><a href="#get">get(projectsId, locationsId, x__xgafv=None)</a></code></p>
<p class="firstline">Gets information about a location.</p>
<p class="toc_element">
  <code><a href="#list">list(projectsId, filter=None, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists information about the supported locations for this service.</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="close">close()</code>
  <pre>Close httplib2 connections.</pre>
</div>

<div class="method">
    <code class="details" id="get">get(projectsId, locationsId, x__xgafv=None)</code>
  <pre>Gets information about a location.

Args:
  projectsId: string, Part of `name`. Resource name for the location. (required)
  locationsId: string, Part of `name`. See documentation of `projectsId`. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A resource that represents Google Cloud Platform location.
  &quot;displayName&quot;: &quot;A String&quot;, # The friendly name for this location, typically a nearby city name. For example, &quot;Tokyo&quot;.
  &quot;labels&quot;: { # Cross-service attributes for the location. For example {&quot;cloud.googleapis.com/region&quot;: &quot;us-east1&quot;}
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;locationId&quot;: &quot;A String&quot;, # The canonical id for this location. For example: &quot;us-east1&quot;.
  &quot;metadata&quot;: { # Service-specific metadata. For example the available capacity at the given location.
    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
  },
  &quot;name&quot;: &quot;A String&quot;, # Resource name for the location, which may vary between implementations. For example: &quot;projects/example-project/locations/us-east1&quot;
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(projectsId, filter=None, pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>Lists information about the supported locations for this service.

Args:
  projectsId: string, Part of `name`. The resource that owns the locations collection, if applicable. (required)
  filter: string, A filter to narrow down results to a preferred subset. The filtering language accepts strings like &quot;displayName=tokyo&quot;, and is documented in more detail in AIP-160 (https://google.aip.dev/160).
  pageSize: integer, The maximum number of results to return. If not set, the service selects a default.
  pageToken: string, A page token received from the next_page_token field in the response. Send that page token to receive the subsequent page.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The response message for Locations.ListLocations.
  &quot;locations&quot;: [ # A list of locations that matches the specified filter in the request.
    { # A resource that represents Google Cloud Platform location.
      &quot;displayName&quot;: &quot;A String&quot;, # The friendly name for this location, typically a nearby city name. For example, &quot;Tokyo&quot;.
      &quot;labels&quot;: { # Cross-service attributes for the location. For example {&quot;cloud.googleapis.com/region&quot;: &quot;us-east1&quot;}
        &quot;a_key&quot;: &quot;A String&quot;,
      },
      &quot;locationId&quot;: &quot;A String&quot;, # The canonical id for this location. For example: &quot;us-east1&quot;.
      &quot;metadata&quot;: { # Service-specific metadata. For example the available capacity at the given location.
        &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
      },
      &quot;name&quot;: &quot;A String&quot;, # Resource name for the location, which may vary between implementations. For example: &quot;projects/example-project/locations/us-east1&quot;
    },
  ],
  &quot;nextPageToken&quot;: &quot;A String&quot;, # The standard List next-page token.
}</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>