<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, pageToken=None, pageSize=None, filter=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;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;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;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;fingerprint&quot;: &quot;A String&quot;, # Fingerprint (e.g. github sha) associated with the `File`.
          &quot;content&quot;: &quot;A String&quot;, # Textual Content.
          &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;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;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;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;fingerprint&quot;: &quot;A String&quot;, # Fingerprint (e.g. github sha) associated with the `File`.
            &quot;content&quot;: &quot;A String&quot;, # Textual Content.
            &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;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;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;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;fingerprint&quot;: &quot;A String&quot;, # Fingerprint (e.g. github sha) associated with the `File`.
            &quot;content&quot;: &quot;A String&quot;, # Textual Content.
            &quot;name&quot;: &quot;A String&quot;, # File name.
          },
        ],
      },
    }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(name, pageToken=None, pageSize=None, filter=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)
  pageToken: string, Next page token for loading the next batch of `Ruleset` instances.
  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.
  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-*`
  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;rulesets&quot;: [ # List of `Ruleset` instances.
      { # `Ruleset` is an immutable copy of `Source` with a globally unique identifier and a creation time.
          &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;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;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;fingerprint&quot;: &quot;A String&quot;, # Fingerprint (e.g. github sha) associated with the `File`.
                &quot;content&quot;: &quot;A String&quot;, # Textual Content.
                &quot;name&quot;: &quot;A String&quot;, # File name.
              },
            ],
          },
        },
    ],
    &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.
  }</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>