aboutsummaryrefslogtreecommitdiff
path: root/.venv/lib/python3.12/site-packages/boto3/docs/collection.py
diff options
context:
space:
mode:
Diffstat (limited to '.venv/lib/python3.12/site-packages/boto3/docs/collection.py')
-rw-r--r--.venv/lib/python3.12/site-packages/boto3/docs/collection.py291
1 files changed, 291 insertions, 0 deletions
diff --git a/.venv/lib/python3.12/site-packages/boto3/docs/collection.py b/.venv/lib/python3.12/site-packages/boto3/docs/collection.py
new file mode 100644
index 00000000..16108db8
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/boto3/docs/collection.py
@@ -0,0 +1,291 @@
+# Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"). You
+# may not use this file except in compliance with the License. A copy of
+# the License is located at
+#
+# https://aws.amazon.com/apache2.0/
+#
+# or in the "license" file accompanying this file. This file is
+# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
+# ANY KIND, either express or implied. See the License for the specific
+# language governing permissions and limitations under the License.
+import os
+
+from botocore import xform_name
+from botocore.docs.bcdoc.restdoc import DocumentStructure
+from botocore.docs.method import get_instance_public_methods
+from botocore.docs.utils import DocumentedShape
+
+from boto3.docs.base import NestedDocumenter
+from boto3.docs.method import document_model_driven_resource_method
+from boto3.docs.utils import (
+ add_resource_type_overview,
+ get_resource_ignore_params,
+)
+
+
+class CollectionDocumenter(NestedDocumenter):
+ def document_collections(self, section):
+ collections = self._resource.meta.resource_model.collections
+ collections_list = []
+ add_resource_type_overview(
+ section=section,
+ resource_type='Collections',
+ description=(
+ 'Collections provide an interface to iterate over and '
+ 'manipulate groups of resources. '
+ ),
+ intro_link='guide_collections',
+ )
+ self.member_map['collections'] = collections_list
+ for collection in collections:
+ collections_list.append(collection.name)
+ # Create a new DocumentStructure for each collection and add contents.
+ collection_doc = DocumentStructure(collection.name, target='html')
+ breadcrumb_section = collection_doc.add_new_section('breadcrumb')
+ breadcrumb_section.style.ref(self._resource_class_name, 'index')
+ breadcrumb_section.write(f' / Collection / {collection.name}')
+ collection_doc.add_title_section(collection.name)
+ collection_section = collection_doc.add_new_section(
+ collection.name,
+ context={'qualifier': f'{self.class_name}.'},
+ )
+ self._document_collection(collection_section, collection)
+
+ # Write collections in individual/nested files.
+ # Path: <root>/reference/services/<service>/<resource_name>/<collection_name>.rst
+ collections_dir_path = os.path.join(
+ self._root_docs_path,
+ f'{self._service_name}',
+ f'{self._resource_sub_path}',
+ )
+ collection_doc.write_to_file(collections_dir_path, collection.name)
+
+ def _document_collection(self, section, collection):
+ methods = get_instance_public_methods(
+ getattr(self._resource, collection.name)
+ )
+ document_collection_object(section, collection)
+ batch_actions = {}
+ for batch_action in collection.batch_actions:
+ batch_actions[batch_action.name] = batch_action
+
+ for method in sorted(methods):
+ method_section = section.add_new_section(method)
+ if method in batch_actions:
+ document_batch_action(
+ section=method_section,
+ resource_name=self._resource_name,
+ event_emitter=self._resource.meta.client.meta.events,
+ batch_action_model=batch_actions[method],
+ collection_model=collection,
+ service_model=self._resource.meta.client.meta.service_model,
+ )
+ else:
+ document_collection_method(
+ section=method_section,
+ resource_name=self._resource_name,
+ action_name=method,
+ event_emitter=self._resource.meta.client.meta.events,
+ collection_model=collection,
+ service_model=self._resource.meta.client.meta.service_model,
+ )
+
+
+def document_collection_object(
+ section,
+ collection_model,
+ include_signature=True,
+):
+ """Documents a collection resource object
+
+ :param section: The section to write to
+
+ :param collection_model: The model of the collection
+
+ :param include_signature: Whether or not to include the signature.
+ It is useful for generating docstrings.
+ """
+ if include_signature:
+ full_collection_name = (
+ f"{section.context.get('qualifier', '')}{collection_model.name}"
+ )
+ section.style.start_sphinx_py_attr(full_collection_name)
+ section.include_doc_string(
+ f'A collection of {collection_model.resource.type} resources.'
+ )
+ section.include_doc_string(
+ f'A {collection_model.resource.type} Collection will include all '
+ f'resources by default, and extreme caution should be taken when '
+ f'performing actions on all resources.'
+ )
+
+
+def document_batch_action(
+ section,
+ resource_name,
+ event_emitter,
+ batch_action_model,
+ service_model,
+ collection_model,
+ include_signature=True,
+):
+ """Documents a collection's batch action
+
+ :param section: The section to write to
+
+ :param resource_name: The name of the resource
+
+ :param action_name: The name of collection action. Currently only
+ can be all, filter, limit, or page_size
+
+ :param event_emitter: The event emitter to use to emit events
+
+ :param batch_action_model: The model of the batch action
+
+ :param collection_model: The model of the collection
+
+ :param service_model: The model of the service
+
+ :param include_signature: Whether or not to include the signature.
+ It is useful for generating docstrings.
+ """
+ operation_model = service_model.operation_model(
+ batch_action_model.request.operation
+ )
+ ignore_params = get_resource_ignore_params(
+ batch_action_model.request.params
+ )
+
+ example_return_value = 'response'
+ if batch_action_model.resource:
+ example_return_value = xform_name(batch_action_model.resource.type)
+
+ example_resource_name = xform_name(resource_name)
+ if service_model.service_name == resource_name:
+ example_resource_name = resource_name
+ example_prefix = f'{example_return_value} = {example_resource_name}.{collection_model.name}.{batch_action_model.name}'
+ document_model_driven_resource_method(
+ section=section,
+ method_name=batch_action_model.name,
+ operation_model=operation_model,
+ event_emitter=event_emitter,
+ method_description=operation_model.documentation,
+ example_prefix=example_prefix,
+ exclude_input=ignore_params,
+ resource_action_model=batch_action_model,
+ include_signature=include_signature,
+ )
+
+
+def document_collection_method(
+ section,
+ resource_name,
+ action_name,
+ event_emitter,
+ collection_model,
+ service_model,
+ include_signature=True,
+):
+ """Documents a collection method
+
+ :param section: The section to write to
+
+ :param resource_name: The name of the resource
+
+ :param action_name: The name of collection action. Currently only
+ can be all, filter, limit, or page_size
+
+ :param event_emitter: The event emitter to use to emit events
+
+ :param collection_model: The model of the collection
+
+ :param service_model: The model of the service
+
+ :param include_signature: Whether or not to include the signature.
+ It is useful for generating docstrings.
+ """
+ operation_model = service_model.operation_model(
+ collection_model.request.operation
+ )
+
+ underlying_operation_members = []
+ if operation_model.input_shape:
+ underlying_operation_members = operation_model.input_shape.members
+
+ example_resource_name = xform_name(resource_name)
+ if service_model.service_name == resource_name:
+ example_resource_name = resource_name
+
+ custom_action_info_dict = {
+ 'all': {
+ 'method_description': (
+ f'Creates an iterable of all {collection_model.resource.type} '
+ f'resources in the collection.'
+ ),
+ 'example_prefix': f'{xform_name(collection_model.resource.type)}_iterator = {example_resource_name}.{collection_model.name}.all',
+ 'exclude_input': underlying_operation_members,
+ },
+ 'filter': {
+ 'method_description': (
+ f'Creates an iterable of all {collection_model.resource.type} '
+ f'resources in the collection filtered by kwargs passed to '
+ f'method. A {collection_model.resource.type} collection will '
+ f'include all resources by default if no filters are provided, '
+ f'and extreme caution should be taken when performing actions '
+ f'on all resources.'
+ ),
+ 'example_prefix': f'{xform_name(collection_model.resource.type)}_iterator = {example_resource_name}.{collection_model.name}.filter',
+ 'exclude_input': get_resource_ignore_params(
+ collection_model.request.params
+ ),
+ },
+ 'limit': {
+ 'method_description': (
+ f'Creates an iterable up to a specified amount of '
+ f'{collection_model.resource.type} resources in the collection.'
+ ),
+ 'example_prefix': f'{xform_name(collection_model.resource.type)}_iterator = {example_resource_name}.{collection_model.name}.limit',
+ 'include_input': [
+ DocumentedShape(
+ name='count',
+ type_name='integer',
+ documentation=(
+ 'The limit to the number of resources '
+ 'in the iterable.'
+ ),
+ )
+ ],
+ 'exclude_input': underlying_operation_members,
+ },
+ 'page_size': {
+ 'method_description': (
+ f'Creates an iterable of all {collection_model.resource.type} '
+ f'resources in the collection, but limits the number of '
+ f'items returned by each service call by the specified amount.'
+ ),
+ 'example_prefix': f'{xform_name(collection_model.resource.type)}_iterator = {example_resource_name}.{collection_model.name}.page_size',
+ 'include_input': [
+ DocumentedShape(
+ name='count',
+ type_name='integer',
+ documentation=(
+ 'The number of items returned by each ' 'service call'
+ ),
+ )
+ ],
+ 'exclude_input': underlying_operation_members,
+ },
+ }
+ if action_name in custom_action_info_dict:
+ action_info = custom_action_info_dict[action_name]
+ document_model_driven_resource_method(
+ section=section,
+ method_name=action_name,
+ operation_model=operation_model,
+ event_emitter=event_emitter,
+ resource_action_model=collection_model,
+ include_signature=include_signature,
+ **action_info,
+ )