<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="appstate_v1.html">Google App State API</a> . <a href="appstate_v1.states.html">states</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#clear">clear(stateKey, currentDataVersion=None)</a></code></p>
<p class="firstline">Clears (sets to empty) the data for the passed key if and only if the passed version matches the currently stored version. This method results in a conflict error on version mismatch.</p>
<p class="toc_element">
  <code><a href="#delete">delete(stateKey)</a></code></p>
<p class="firstline">Deletes a key and the data associated with it. The key is removed and no longer counts against the key quota. Note that since this method is not safe in the face of concurrent modifications, it should only be used for development and testing purposes. Invoking this method in shipping code can result in data loss and data corruption.</p>
<p class="toc_element">
  <code><a href="#get">get(stateKey)</a></code></p>
<p class="firstline">Retrieves the data corresponding to the passed key. If the key does not exist on the server, an HTTP 404 will be returned.</p>
<p class="toc_element">
  <code><a href="#list">list(includeData=None)</a></code></p>
<p class="firstline">Lists all the states keys, and optionally the state data.</p>
<p class="toc_element">
  <code><a href="#update">update(stateKey, body, currentStateVersion=None)</a></code></p>
<p class="firstline">Update the data associated with the input key if and only if the passed version matches the currently stored version. This method is safe in the face of concurrent writes. Maximum per-key size is 128KB.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="clear">clear(stateKey, currentDataVersion=None)</code>
  <pre>Clears (sets to empty) the data for the passed key if and only if the passed version matches the currently stored version. This method results in a conflict error on version mismatch.

Args:
  stateKey: integer, The key for the data to be retrieved. (required)
  currentDataVersion: string, The version of the data to be cleared. Version strings are returned by the server.

Returns:
  An object of the form:

    { # This is a JSON template for an app state write result.
    "kind": "appstate#writeResult", # Uniquely identifies the type of this resource. Value is always the fixed string appstate#writeResult.
    "stateKey": 42, # The written key.
    "currentStateVersion": "A String", # The version of the data for this key on the server.
  }</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(stateKey)</code>
  <pre>Deletes a key and the data associated with it. The key is removed and no longer counts against the key quota. Note that since this method is not safe in the face of concurrent modifications, it should only be used for development and testing purposes. Invoking this method in shipping code can result in data loss and data corruption.

Args:
  stateKey: integer, The key for the data to be retrieved. (required)
</pre>
</div>

<div class="method">
    <code class="details" id="get">get(stateKey)</code>
  <pre>Retrieves the data corresponding to the passed key. If the key does not exist on the server, an HTTP 404 will be returned.

Args:
  stateKey: integer, The key for the data to be retrieved. (required)

Returns:
  An object of the form:

    { # This is a JSON template for an app state resource.
    "stateKey": 42, # The key for the data.
    "kind": "appstate#getResponse", # Uniquely identifies the type of this resource. Value is always the fixed string appstate#getResponse.
    "data": "A String", # The requested data.
    "currentStateVersion": "A String", # The current app state version.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(includeData=None)</code>
  <pre>Lists all the states keys, and optionally the state data.

Args:
  includeData: boolean, Whether to include the full data in addition to the version number

Returns:
  An object of the form:

    { # This is a JSON template to convert a list-response for app state.
    "items": [ # The app state data.
      { # This is a JSON template for an app state resource.
        "stateKey": 42, # The key for the data.
        "kind": "appstate#getResponse", # Uniquely identifies the type of this resource. Value is always the fixed string appstate#getResponse.
        "data": "A String", # The requested data.
        "currentStateVersion": "A String", # The current app state version.
      },
    ],
    "kind": "appstate#listResponse", # Uniquely identifies the type of this resource. Value is always the fixed string appstate#listResponse.
    "maximumKeyCount": 42, # The maximum number of keys allowed for this user.
  }</pre>
</div>

<div class="method">
    <code class="details" id="update">update(stateKey, body, currentStateVersion=None)</code>
  <pre>Update the data associated with the input key if and only if the passed version matches the currently stored version. This method is safe in the face of concurrent writes. Maximum per-key size is 128KB.

Args:
  stateKey: integer, The key for the data to be retrieved. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # This is a JSON template for a requests which update app state
    "kind": "appstate#updateRequest", # Uniquely identifies the type of this resource. Value is always the fixed string appstate#updateRequest.
    "data": "A String", # The new app state data that your application is trying to update with.
  }

  currentStateVersion: string, The version of the app state your application is attempting to update. If this does not match the current version, this method will return a conflict error. If there is no data stored on the server for this key, the update will succeed irrespective of the value of this parameter.

Returns:
  An object of the form:

    { # This is a JSON template for an app state write result.
    "kind": "appstate#writeResult", # Uniquely identifies the type of this resource. Value is always the fixed string appstate#writeResult.
    "stateKey": 42, # The written key.
    "currentStateVersion": "A String", # The version of the data for this key on the server.
  }</pre>
</div>

</body></html>