<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="firebaserules_v1.html">Firebase Rules API</a> . <a href="firebaserules_v1.projects.html">projects</a> . <a href="firebaserules_v1.projects.rulesets.html">rulesets</a></h1>
<h2>Instance Methods</h2>
<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="#create">create(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Create a `Ruleset` from `Source`. The `Ruleset` is given a unique generated name which is returned to the caller. `Source` containing syntactic or semantics errors will result in an error response indicating the first error encountered. For a detailed view of `Source` issues, use TestRuleset.</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
<p class="firstline">Delete a `Ruleset` by resource name. If the `Ruleset` is referenced by a `Release` the operation will fail.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Get a `Ruleset` by name including the full `Source` contents.</p>
<p class="toc_element">
  <code><a href="#list">list(name, filter=None, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">List `Ruleset` metadata only and optionally filter the results by `Ruleset` name. The full `Source` contents of a `Ruleset` may be retrieved with GetRuleset.</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="create">create(name, body=None, x__xgafv=None)</code>
  <pre>Create a `Ruleset` from `Source`. The `Ruleset` is given a unique generated name which is returned to the caller. `Source` containing syntactic or semantics errors will result in an error response indicating the first error encountered. For a detailed view of `Source` issues, use TestRuleset.

Args:
  name: string, Resource name for Project which owns this `Ruleset`. Format: `projects/{project_id}` (required)
  body: object, The request body.
    The object takes the form of:

{ # `Ruleset` is an immutable copy of `Source` with a globally unique identifier and a creation time.
  &quot;createTime&quot;: &quot;A String&quot;, # Time the `Ruleset` was created. Output only.
  &quot;metadata&quot;: { # Metadata for a Ruleset. # The metadata for this ruleset. Output only.
    &quot;services&quot;: [ # Services that this ruleset has declarations for (e.g., &quot;cloud.firestore&quot;). There may be 0+ of these.
      &quot;A String&quot;,
    ],
  },
  &quot;name&quot;: &quot;A String&quot;, # Name of the `Ruleset`. The ruleset_id is auto generated by the service. Format: `projects/{project_id}/rulesets/{ruleset_id}` Output only.
  &quot;source&quot;: { # `Source` is one or more `File` messages comprising a logical set of rules. # `Source` for the `Ruleset`.
    &quot;files&quot;: [ # `File` set constituting the `Source` bundle.
      { # `File` containing source content.
        &quot;content&quot;: &quot;A String&quot;, # Textual Content.
        &quot;fingerprint&quot;: &quot;A String&quot;, # Fingerprint (e.g. github sha) associated with the `File`.
        &quot;name&quot;: &quot;A String&quot;, # File name.
      },
    ],
  },
}

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # `Ruleset` is an immutable copy of `Source` with a globally unique identifier and a creation time.
  &quot;createTime&quot;: &quot;A String&quot;, # Time the `Ruleset` was created. Output only.
  &quot;metadata&quot;: { # Metadata for a Ruleset. # The metadata for this ruleset. Output only.
    &quot;services&quot;: [ # Services that this ruleset has declarations for (e.g., &quot;cloud.firestore&quot;). There may be 0+ of these.
      &quot;A String&quot;,
    ],
  },
  &quot;name&quot;: &quot;A String&quot;, # Name of the `Ruleset`. The ruleset_id is auto generated by the service. Format: `projects/{project_id}/rulesets/{ruleset_id}` Output only.
  &quot;source&quot;: { # `Source` is one or more `File` messages comprising a logical set of rules. # `Source` for the `Ruleset`.
    &quot;files&quot;: [ # `File` set constituting the `Source` bundle.
      { # `File` containing source content.
        &quot;content&quot;: &quot;A String&quot;, # Textual Content.
        &quot;fingerprint&quot;: &quot;A String&quot;, # Fingerprint (e.g. github sha) associated with the `File`.
        &quot;name&quot;: &quot;A String&quot;, # File name.
      },
    ],
  },
}</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(name, x__xgafv=None)</code>
  <pre>Delete a `Ruleset` by resource name. If the `Ruleset` is referenced by a `Release` the operation will fail.

Args:
  name: string, Resource name for the ruleset to delete. Format: `projects/{project_id}/rulesets/{ruleset_id}` (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`.
}</pre>
</div>

<div class="method">
    <code class="details" id="get">get(name, x__xgafv=None)</code>
  <pre>Get a `Ruleset` by name including the full `Source` contents.

Args:
  name: string, Resource name for the ruleset to get. Format: `projects/{project_id}/rulesets/{ruleset_id}` (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # `Ruleset` is an immutable copy of `Source` with a globally unique identifier and a creation time.
  &quot;createTime&quot;: &quot;A String&quot;, # Time the `Ruleset` was created. Output only.
  &quot;metadata&quot;: { # Metadata for a Ruleset. # The metadata for this ruleset. Output only.
    &quot;services&quot;: [ # Services that this ruleset has declarations for (e.g., &quot;cloud.firestore&quot;). There may be 0+ of these.
      &quot;A String&quot;,
    ],
  },
  &quot;name&quot;: &quot;A String&quot;, # Name of the `Ruleset`. The ruleset_id is auto generated by the service. Format: `projects/{project_id}/rulesets/{ruleset_id}` Output only.
  &quot;source&quot;: { # `Source` is one or more `File` messages comprising a logical set of rules. # `Source` for the `Ruleset`.
    &quot;files&quot;: [ # `File` set constituting the `Source` bundle.
      { # `File` containing source content.
        &quot;content&quot;: &quot;A String&quot;, # Textual Content.
        &quot;fingerprint&quot;: &quot;A String&quot;, # Fingerprint (e.g. github sha) associated with the `File`.
        &quot;name&quot;: &quot;A String&quot;, # File name.
      },
    ],
  },
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(name, filter=None, pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>List `Ruleset` metadata only and optionally filter the results by `Ruleset` name. The full `Source` contents of a `Ruleset` may be retrieved with GetRuleset.

Args:
  name: string, Resource name for the project. Format: `projects/{project_id}` (required)
  filter: string, `Ruleset` filter. The list method supports filters with restrictions on `Ruleset.name`. Filters on `Ruleset.create_time` should use the `date` function which parses strings that conform to the RFC 3339 date/time specifications. Example: `create_time &gt; date(&quot;2017-01-01T00:00:00Z&quot;) AND name=UUID-*`
  pageSize: integer, Page size to load. Maximum of 100. Defaults to 10. Note: `page_size` is just a hint and the service may choose to load less than `page_size` due to the size of the output. To traverse all of the releases, caller should iterate until the `page_token` is empty.
  pageToken: string, Next page token for loading the next batch of `Ruleset` instances.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The response for FirebaseRulesService.ListRulesets.
  &quot;nextPageToken&quot;: &quot;A String&quot;, # The pagination token to retrieve the next page of results. If the value is empty, no further results remain.
  &quot;rulesets&quot;: [ # List of `Ruleset` instances.
    { # `Ruleset` is an immutable copy of `Source` with a globally unique identifier and a creation time.
      &quot;createTime&quot;: &quot;A String&quot;, # Time the `Ruleset` was created. Output only.
      &quot;metadata&quot;: { # Metadata for a Ruleset. # The metadata for this ruleset. Output only.
        &quot;services&quot;: [ # Services that this ruleset has declarations for (e.g., &quot;cloud.firestore&quot;). There may be 0+ of these.
          &quot;A String&quot;,
        ],
      },
      &quot;name&quot;: &quot;A String&quot;, # Name of the `Ruleset`. The ruleset_id is auto generated by the service. Format: `projects/{project_id}/rulesets/{ruleset_id}` Output only.
      &quot;source&quot;: { # `Source` is one or more `File` messages comprising a logical set of rules. # `Source` for the `Ruleset`.
        &quot;files&quot;: [ # `File` set constituting the `Source` bundle.
          { # `File` containing source content.
            &quot;content&quot;: &quot;A String&quot;, # Textual Content.
            &quot;fingerprint&quot;: &quot;A String&quot;, # Fingerprint (e.g. github sha) associated with the `File`.
            &quot;name&quot;: &quot;A String&quot;, # File name.
          },
        ],
      },
    },
  ],
}</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>