aboutsummaryrefslogtreecommitdiff
path: root/.venv/lib/python3.12/site-packages/botocore/docs/shape.py
diff options
context:
space:
mode:
Diffstat (limited to '.venv/lib/python3.12/site-packages/botocore/docs/shape.py')
-rw-r--r--.venv/lib/python3.12/site-packages/botocore/docs/shape.py135
1 files changed, 135 insertions, 0 deletions
diff --git a/.venv/lib/python3.12/site-packages/botocore/docs/shape.py b/.venv/lib/python3.12/site-packages/botocore/docs/shape.py
new file mode 100644
index 00000000..640a5d18
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/botocore/docs/shape.py
@@ -0,0 +1,135 @@
+# 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
+#
+# http://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.
+
+
+# NOTE: This class should not be instantiated and its
+# ``traverse_and_document_shape`` method called directly. It should be
+# inherited from a Documenter class with the appropriate methods
+# and attributes.
+from botocore.utils import is_json_value_header
+
+
+class ShapeDocumenter:
+ EVENT_NAME = ''
+
+ def __init__(
+ self, service_name, operation_name, event_emitter, context=None
+ ):
+ self._service_name = service_name
+ self._operation_name = operation_name
+ self._event_emitter = event_emitter
+ self._context = context
+ if context is None:
+ self._context = {'special_shape_types': {}}
+
+ def traverse_and_document_shape(
+ self,
+ section,
+ shape,
+ history,
+ include=None,
+ exclude=None,
+ name=None,
+ is_required=False,
+ ):
+ """Traverses and documents a shape
+
+ Will take a self class and call its appropriate methods as a shape
+ is traversed.
+
+ :param section: The section to document.
+
+ :param history: A list of the names of the shapes that have been
+ traversed.
+
+ :type include: Dictionary where keys are parameter names and
+ values are the shapes of the parameter names.
+ :param include: The parameter shapes to include in the documentation.
+
+ :type exclude: List of the names of the parameters to exclude.
+ :param exclude: The names of the parameters to exclude from
+ documentation.
+
+ :param name: The name of the shape.
+
+ :param is_required: If the shape is a required member.
+ """
+ param_type = shape.type_name
+ if getattr(shape, 'serialization', {}).get('eventstream'):
+ param_type = 'event_stream'
+ if shape.name in history:
+ self.document_recursive_shape(section, shape, name=name)
+ else:
+ history.append(shape.name)
+ is_top_level_param = len(history) == 2
+ if hasattr(shape, 'is_document_type') and shape.is_document_type:
+ param_type = 'document'
+ getattr(
+ self,
+ f"document_shape_type_{param_type}",
+ self.document_shape_default,
+ )(
+ section,
+ shape,
+ history=history,
+ name=name,
+ include=include,
+ exclude=exclude,
+ is_top_level_param=is_top_level_param,
+ is_required=is_required,
+ )
+ if is_top_level_param:
+ self._event_emitter.emit(
+ f"docs.{self.EVENT_NAME}.{self._service_name}.{self._operation_name}.{name}",
+ section=section,
+ )
+ at_overlying_method_section = len(history) == 1
+ if at_overlying_method_section:
+ self._event_emitter.emit(
+ f"docs.{self.EVENT_NAME}.{self._service_name}.{self._operation_name}.complete-section",
+ section=section,
+ )
+ history.pop()
+
+ def _get_special_py_default(self, shape):
+ special_defaults = {
+ 'document_type': '{...}|[...]|123|123.4|\'string\'|True|None',
+ 'jsonvalue_header': '{...}|[...]|123|123.4|\'string\'|True|None',
+ 'streaming_input_shape': 'b\'bytes\'|file',
+ 'streaming_output_shape': 'StreamingBody()',
+ 'eventstream_output_shape': 'EventStream()',
+ }
+ return self._get_value_for_special_type(shape, special_defaults)
+
+ def _get_special_py_type_name(self, shape):
+ special_type_names = {
+ 'document_type': ':ref:`document<document>`',
+ 'jsonvalue_header': 'JSON serializable',
+ 'streaming_input_shape': 'bytes or seekable file-like object',
+ 'streaming_output_shape': ':class:`.StreamingBody`',
+ 'eventstream_output_shape': ':class:`.EventStream`',
+ }
+ return self._get_value_for_special_type(shape, special_type_names)
+
+ def _get_value_for_special_type(self, shape, special_type_map):
+ if is_json_value_header(shape):
+ return special_type_map['jsonvalue_header']
+ if hasattr(shape, 'is_document_type') and shape.is_document_type:
+ return special_type_map['document_type']
+ for special_type, marked_shape in self._context[
+ 'special_shape_types'
+ ].items():
+ if special_type in special_type_map:
+ if shape == marked_shape:
+ return special_type_map[special_type]
+ return None