Skip to content

Commit f8ec54a

Browse files
authored
Updates for UpdateMirror snippet_file consistency (#29)
1 parent ee72943 commit f8ec54a

File tree

5 files changed

+37
-14
lines changed

5 files changed

+37
-14
lines changed

aws_doc_sdk_examples_tools/doc_gen.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ class DocGenMergeWarning(MetadataError):
3636
class DocGen:
3737
root: Path
3838
errors: MetadataErrors
39+
prefix: Optional[str] = None
3940
validation: ValidationConfig = field(default_factory=ValidationConfig)
4041
sdks: Dict[str, Sdk] = field(default_factory=dict)
4142
services: Dict[str, Service] = field(default_factory=dict)
@@ -55,7 +56,11 @@ def collect_snippets(
5556
snippets_root = self.root
5657
snippets, errs = collect_snippets(snippets_root, prefix)
5758
collect_snippet_files(
58-
self.examples.values(), snippets=snippets, errors=errs, root=self.root
59+
self.examples.values(),
60+
prefix=prefix,
61+
snippets=snippets,
62+
errors=errs,
63+
root=self.root,
5964
)
6065
self.snippets = snippets
6166
self.errors.extend(errs)
@@ -114,6 +119,10 @@ def extend_examples(self, examples: Iterable[Example]):
114119
def empty(cls, validation: ValidationConfig = ValidationConfig()) -> "DocGen":
115120
return DocGen(root=Path("/"), errors=MetadataErrors(), validation=validation)
116121

122+
@classmethod
123+
def default(cls) -> "DocGen":
124+
return DocGen.empty().for_root(Path(__file__).parent)
125+
117126
def clone(self) -> "DocGen":
118127
return DocGen(
119128
root=self.root,

aws_doc_sdk_examples_tools/metadata.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -395,7 +395,11 @@ def check_id_format(
395395
if len(rest) == 0:
396396
errors.append(metadata_errors.NameFormat(id=id))
397397
elif service not in parsed_services and service not in ["cross", "serverless"]:
398-
errors.append(metadata_errors.NameFormat(id=id))
398+
errors.append(
399+
metadata_errors.ServiceNameFormat(
400+
id=id, svc=service, svcs=[*parsed_services.keys()]
401+
)
402+
)
399403
elif check_action and (
400404
len(rest) > 1 or rest[0] not in parsed_services.get(service, {})
401405
):

aws_doc_sdk_examples_tools/metadata_errors.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,8 @@
33

44
from __future__ import annotations
55

6-
import os.path
76
import re
8-
from dataclasses import dataclass
7+
from dataclasses import dataclass, field
98
from typing import Optional, Iterator, Iterable, List, TypeVar
109

1110

@@ -124,6 +123,18 @@ def message(self):
124123
return "name does not match the required format of 'svc_Operation', 'svc_Operation_Specialization', or 'cross_Title'"
125124

126125

126+
@dataclass
127+
class ServiceNameFormat(NameFormat):
128+
svc: str = ""
129+
svcs: list[str] = field(default_factory=list)
130+
131+
def message(self):
132+
return (
133+
NameFormat.message(self)
134+
+ f" (service {self.svc}, services {', '.join(self.svcs)})"
135+
)
136+
137+
127138
@dataclass
128139
class ActionNameFormat(MetadataParseError):
129140
def message(self):

aws_doc_sdk_examples_tools/metadata_test.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -488,9 +488,11 @@ def test_verify_load_successful():
488488
file="empty_metadata.yaml",
489489
id="sns_EmptyExample",
490490
),
491-
metadata_errors.NameFormat(
491+
metadata_errors.ServiceNameFormat(
492492
file="empty_metadata.yaml",
493493
id="sns_EmptyExample",
494+
svc="sns",
495+
svcs=[],
494496
),
495497
],
496498
),
@@ -525,9 +527,11 @@ def test_verify_load_successful():
525527
language="Perl",
526528
sdk_version=None,
527529
),
528-
metadata_errors.NameFormat(
530+
metadata_errors.ServiceNameFormat(
529531
file="errors_metadata.yaml",
530532
id="sqs_WrongServiceSlug",
533+
svc="sqs",
534+
svcs=["sns"],
531535
),
532536
metadata_errors.MissingField(
533537
field="versions",

aws_doc_sdk_examples_tools/snippets.py

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,7 @@ def collect_snippets(
179179
def collect_snippet_files(
180180
examples: Iterable[Example],
181181
snippets: Dict[str, Snippet],
182+
prefix: str,
182183
errors: MetadataErrors,
183184
root: Path,
184185
):
@@ -207,15 +208,15 @@ def collect_snippet_files(
207208
)
208209
)
209210
continue
210-
name = str(snippet_file).replace("/", ".")
211+
name = prefix + str(snippet_file).replace("/", ".")
211212
with open(root / snippet_file, encoding="utf8") as file:
212213
code = file.readlines()
213214
snippets[name] = Snippet(
214215
id=name,
215216
file=str(snippet_file),
216217
line_start=0,
217218
line_end=len(code),
218-
code="\n".join(file),
219+
code="\n".join(code),
219220
)
220221

221222

@@ -290,12 +291,6 @@ def write_snippets(root: Path, snippets: Dict[str, Snippet], check: bool = False
290291
return errors
291292

292293

293-
def write_snippet_file(folder: Path, snippet_file: Path):
294-
name = str(snippet_file).replace("/", ".")
295-
dest = folder / f"{name}.txt"
296-
copyfile(folder / snippet_file, dest)
297-
298-
299294
def main():
300295
from argparse import ArgumentParser
301296

0 commit comments

Comments
 (0)