<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, Required. 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;, # Output only. Time the `Ruleset` was created.
  &quot;metadata&quot;: { # Metadata for a Ruleset. # Output only. The metadata for this ruleset.
    &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;, # Output only. Name of the `Ruleset`. The ruleset_id is auto generated by the service. Format: `projects/{project_id}/rulesets/{ruleset_id}`
  &quot;source&quot;: { # `Source` is one or more `File` messages comprising a logical set of rules. # Required. `Source` for the `Ruleset`.
    &quot;files&quot;: [ # Required. `File` set constituting the `Source` bundle.
      { # `File` containing source content.
        &quot;content&quot;: &quot;A String&quot;, # Required. 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;, # Required. 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;, # Output only. Time the `Ruleset` was created.
  &quot;metadata&quot;: { # Metadata for a Ruleset. # Output only. The metadata for this ruleset.
    &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;, # Output only. Name of the `Ruleset`. The ruleset_id is auto generated by the service. Format: `projects/{project_id}/rulesets/{ruleset_id}`
  &quot;source&quot;: { # `Source` is one or more `File` messages comprising a logical set of rules. # Required. `Source` for the `Ruleset`.
    &quot;files&quot;: [ # Required. `File` set constituting the `Source` bundle.
      { # `File` containing source content.
        &quot;content&quot;: &quot;A String&quot;, # Required. 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;, # Required. 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, Required. 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, Required. 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;, # Output only. Time the `Ruleset` was created.
  &quot;metadata&quot;: { # Metadata for a Ruleset. # Output only. The metadata for this ruleset.
    &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;, # Output only. Name of the `Ruleset`. The ruleset_id is auto generated by the service. Format: `projects/{project_id}/rulesets/{ruleset_id}`
  &quot;source&quot;: { # `Source` is one or more `File` messages comprising a logical set of rules. # Required. `Source` for the `Ruleset`.
    &quot;files&quot;: [ # Required. `File` set constituting the `Source` bundle.
      { # `File` containing source content.
        &quot;content&quot;: &quot;A String&quot;, # Required. 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;, # Required. 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, Required. 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;, # Output only. Time the `Ruleset` was created.
      &quot;metadata&quot;: { # Metadata for a Ruleset. # Output only. The metadata for this ruleset.
        &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;, # Output only. Name of the `Ruleset`. The ruleset_id is auto generated by the service. Format: `projects/{project_id}/rulesets/{ruleset_id}`
      &quot;source&quot;: { # `Source` is one or more `File` messages comprising a logical set of rules. # Required. `Source` for the `Ruleset`.
        &quot;files&quot;: [ # Required. `File` set constituting the `Source` bundle.
          { # `File` containing source content.
            &quot;content&quot;: &quot;A String&quot;, # Required. 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;, # Required. 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>