python-botocore/botocore/docs/service.py

107 lines
3.8 KiB
Python
Raw Normal View History

# 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.
from botocore.docs.bcdoc.restdoc import DocumentStructure
2022-05-26 00:10:07 +02:00
from botocore.docs.client import ClientDocumenter, ClientExceptionsDocumenter
from botocore.docs.paginator import PaginatorDocumenter
from botocore.docs.waiter import WaiterDocumenter
from botocore.exceptions import DataNotFoundError
2022-05-26 00:10:07 +02:00
class ServiceDocumenter:
def __init__(self, service_name, session):
self._session = session
self._service_name = service_name
self._client = self._session.create_client(
2022-05-26 00:10:07 +02:00
service_name,
region_name='us-east-1',
aws_access_key_id='foo',
aws_secret_access_key='bar',
)
2019-02-27 08:30:11 +01:00
self._event_emitter = self._client.meta.events
self.sections = [
'title',
'table-of-contents',
'client-api',
2020-05-30 12:49:33 +02:00
'client-exceptions',
'paginator-api',
2022-05-26 00:10:07 +02:00
'waiter-api',
]
def document_service(self):
"""Documents an entire service.
:returns: The reStructured text of the documented service.
"""
doc_structure = DocumentStructure(
2022-05-26 00:10:07 +02:00
self._service_name, section_names=self.sections, target='html'
)
self.title(doc_structure.get_section('title'))
self.table_of_contents(doc_structure.get_section('table-of-contents'))
self.client_api(doc_structure.get_section('client-api'))
2020-05-30 12:49:33 +02:00
self.client_exceptions(doc_structure.get_section('client-exceptions'))
self.paginator_api(doc_structure.get_section('paginator-api'))
self.waiter_api(doc_structure.get_section('waiter-api'))
return doc_structure.flush_structure()
def title(self, section):
section.style.h1(self._client.__class__.__name__)
2019-02-27 08:30:11 +01:00
self._event_emitter.emit(
2022-05-26 00:10:07 +02:00
f"docs.title.{self._service_name}", section=section
2019-02-27 08:30:11 +01:00
)
def table_of_contents(self, section):
section.style.table_of_contents(title='Table of Contents', depth=2)
def client_api(self, section):
examples = None
try:
examples = self.get_examples(self._service_name)
except DataNotFoundError:
pass
ClientDocumenter(self._client, examples).document_client(section)
2020-05-30 12:49:33 +02:00
def client_exceptions(self, section):
ClientExceptionsDocumenter(self._client).document_exceptions(section)
def paginator_api(self, section):
try:
service_paginator_model = self._session.get_paginator_model(
2022-05-26 00:10:07 +02:00
self._service_name
)
except DataNotFoundError:
return
paginator_documenter = PaginatorDocumenter(
2022-05-26 00:10:07 +02:00
self._client, service_paginator_model
)
paginator_documenter.document_paginators(section)
def waiter_api(self, section):
if self._client.waiter_names:
service_waiter_model = self._session.get_waiter_model(
2022-05-26 00:10:07 +02:00
self._service_name
)
waiter_documenter = WaiterDocumenter(
2022-05-26 00:10:07 +02:00
self._client, service_waiter_model
)
waiter_documenter.document_waiters(section)
def get_examples(self, service_name, api_version=None):
loader = self._session.get_component('data_loader')
examples = loader.load_service_model(
2022-05-26 00:10:07 +02:00
service_name, 'examples-1', api_version
)
return examples['examples']