|
| 1 | +from typing import Dict, Iterable, List, Set |
| 2 | + |
| 3 | +from aws_doc_sdk_examples_tools.doc_gen import DocGen |
| 4 | +from aws_doc_sdk_examples_tools.metadata import Example as DocGenExample |
| 5 | +from aws_doc_sdk_examples_tools.snippets import Snippet as DocGenSnippet |
| 6 | +from aws_doc_sdk_examples_tools.sdks import Sdk as DocGenSdk |
| 7 | +from aws_doc_sdk_examples_tools.services import Service as DocGenService |
| 8 | + |
| 9 | +from .labels import Sdk, Service, Example, Snippet, Expanded, Label, Excerpt |
| 10 | +from . import known_labels |
| 11 | + |
| 12 | + |
| 13 | +def from_doc_gen(doc_gen: DocGen): |
| 14 | + sdks: Set[Sdk] = _sdks(doc_gen.sdks) |
| 15 | + services: Set[Service] = _services(doc_gen.services) |
| 16 | + snippets: Set[Snippet] = _snippets(doc_gen.examples.values(), doc_gen.snippets) |
| 17 | + examples: Set[Example] = _examples(doc_gen.examples) |
| 18 | + |
| 19 | + return dict( |
| 20 | + sdks=frozenset(sdks), |
| 21 | + services=frozenset(services), |
| 22 | + snippets=frozenset(snippets), |
| 23 | + examples=frozenset(examples), |
| 24 | + ) |
| 25 | + |
| 26 | + |
| 27 | +def _sdks(doc_gen_sdks: Dict[str, DocGenSdk]) -> Set[Sdk]: |
| 28 | + sdks: Set[Sdk] = set() |
| 29 | + for id, sdk in doc_gen_sdks.items(): |
| 30 | + for v in _sdk(id, sdk): |
| 31 | + sdks.add(v) |
| 32 | + return sdks |
| 33 | + |
| 34 | + |
| 35 | +def _sdk(id: str, doc_gen_sdk: DocGenSdk) -> Iterable[Sdk]: |
| 36 | + for v in doc_gen_sdk.versions: |
| 37 | + labels: List[Label] = [] |
| 38 | + if v.caveat: |
| 39 | + labels.append(Label(name="caveat", value=v.caveat)) |
| 40 | + sdk = Sdk( |
| 41 | + language=doc_gen_sdk.property, |
| 42 | + version=str(v.version), |
| 43 | + name=Expanded(long=v.long, short=v.short), |
| 44 | + labels=labels |
| 45 | + ) |
| 46 | + yield sdk |
| 47 | + |
| 48 | + |
| 49 | +def _services(doc_gen_services: Dict[str, DocGenService]) -> Set[Service]: |
| 50 | + return set([_service(id, service) for id, service in doc_gen_services.items()]) |
| 51 | + |
| 52 | + |
| 53 | +def _service(id: str, doc_gen_service: DocGenService) -> Service : |
| 54 | + labels: List[Label] = [] |
| 55 | + if doc_gen_service.caveat: |
| 56 | + labels.append(Label(name=known_labels.CAVEAT, value=doc_gen_service.caveat)) |
| 57 | + |
| 58 | + expanded = Expanded(long="", short="") |
| 59 | + if doc_gen_service.expanded: |
| 60 | + expanded = Expanded(long=doc_gen_service.expanded.long, short=doc_gen_service.expanded.short) |
| 61 | + |
| 62 | + service = Service( |
| 63 | + id=id, |
| 64 | + sort=doc_gen_service.sort, |
| 65 | + name=Expanded(long=doc_gen_service.long, short=doc_gen_service.short), |
| 66 | + expanded=expanded, |
| 67 | + version=str(doc_gen_service.version), |
| 68 | + labels=labels, |
| 69 | + ) |
| 70 | + return service |
| 71 | + |
| 72 | + |
| 73 | +def _examples(examples: Dict[str, DocGenExample]) -> Set[Example]: |
| 74 | + return set([_example(id, example) for id, example in examples.items()]) |
| 75 | + |
| 76 | + |
| 77 | +def _example(id: str, doc_gen_example: DocGenExample) -> Example: |
| 78 | + labels = doc_gen_example_labels(doc_gen_example) |
| 79 | + |
| 80 | + example = Example( |
| 81 | + id=id, |
| 82 | + title=doc_gen_example.title, |
| 83 | + title_abbrev=doc_gen_example.title_abbrev, |
| 84 | + synopsis=doc_gen_example.synopsis or "", |
| 85 | + synopsis_list=doc_gen_example.synopsis_list, |
| 86 | + labels=labels, |
| 87 | + ) |
| 88 | + |
| 89 | + return example |
| 90 | + |
| 91 | + |
| 92 | +def doc_gen_example_labels(doc_gen_example): |
| 93 | + labels: List[Label] = [] |
| 94 | + if doc_gen_example.category: |
| 95 | + labels.append(Label(name=known_labels.CATEGORY, value=doc_gen_example.category)) |
| 96 | + if doc_gen_example.service_main: |
| 97 | + labels.append(Label(name=known_labels.SERVICE, value=doc_gen_example.service_main)) |
| 98 | + for service, actions in doc_gen_example.services.items(): |
| 99 | + labels.append(Label(name=known_labels.SERVICE, value=service)) |
| 100 | + for action in actions: |
| 101 | + labels.append(Label(name=known_labels.ACTION, value=action)) |
| 102 | + return labels |
| 103 | + |
| 104 | + |
| 105 | +def _snippets(doc_gen_examples: Iterable[DocGenExample], doc_gen_snippets: Dict[str, DocGenSnippet]) -> Set[Snippet]: |
| 106 | + snippets = set() |
| 107 | + for example in doc_gen_examples: |
| 108 | + example_labels = doc_gen_example_labels(example) |
| 109 | + for lang, language in example.languages.items(): |
| 110 | + lang = lang.lower() |
| 111 | + for version in language.versions: |
| 112 | + excerpts: List[Excerpt] = [] |
| 113 | + if version.block_content: |
| 114 | + excerpts.append(Excerpt(description=version.block_content)) |
| 115 | + for excerpt in version.excerpts: |
| 116 | + if excerpt.description: |
| 117 | + excerpts.append(Excerpt(description=excerpt.description)) |
| 118 | + for tag in [*excerpt.snippet_tags, *excerpt.snippet_files]: |
| 119 | + doc_gen_snippet = doc_gen_snippets.get(tag, None) |
| 120 | + if doc_gen_snippet: |
| 121 | + excerpts.append(Excerpt(path=doc_gen_snippet.file, range=(doc_gen_snippet.line_start, doc_gen_snippet.line_end), content=doc_gen_snippet.code)) |
| 122 | + labels: List[Label] = [ |
| 123 | + *example_labels, |
| 124 | + Label(name=known_labels.SDK, value=f"{lang}:{version.sdk_version}"), |
| 125 | + ] |
| 126 | + for service in version.add_services: |
| 127 | + labels.append(Label(name=known_labels.SERVICE, value=service)) |
| 128 | + snippet = Snippet( |
| 129 | + id=f"{example.id}:{lang}:{version.sdk_version}", |
| 130 | + labels=labels, |
| 131 | + excerpts=excerpts |
| 132 | + ) |
| 133 | + snippets.add(snippet) |
| 134 | + |
| 135 | + return snippets |
0 commit comments