Skip to content

Commit 1daecf8

Browse files
authored
Validate that github path items are reachable from the root (#69)
* Validate that github path items are reachable from the root of the doc_gen parse call.
1 parent 4242bfb commit 1daecf8

File tree

8 files changed

+45
-27
lines changed

8 files changed

+45
-27
lines changed

aws_doc_sdk_examples_tools/doc_gen.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,7 @@ def process_metadata(self, path: Path) -> "DocGen":
226226
self.services,
227227
self.cross_blocks,
228228
self.validation,
229+
self.root,
229230
)
230231
self.extend_examples(examples, self.errors)
231232
self.errors.extend(errs)

aws_doc_sdk_examples_tools/metadata.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ def from_yaml(
9696
services: Dict[str, Service],
9797
cross_content_blocks: Set[str],
9898
is_action: bool,
99+
root: Path,
99100
) -> tuple["Version", MetadataErrors]:
100101
errors = MetadataErrors()
101102

@@ -119,6 +120,12 @@ def from_yaml(
119120
link=github, sdk_version=sdk_version
120121
)
121122
)
123+
elif not (root / github).exists():
124+
errors.append(
125+
metadata_errors.MissingGithubLink(
126+
link=github, sdk_version=sdk_version, root=root
127+
)
128+
)
122129

123130
excerpts = []
124131
for excerpt in yaml.get("excerpts", []):
@@ -205,6 +212,7 @@ def from_yaml(
205212
services: Dict[str, Service],
206213
blocks: Set[str],
207214
is_action: bool,
215+
root: Path,
208216
) -> tuple[Language, MetadataErrors]:
209217
errors = MetadataErrors()
210218
if name not in sdks:
@@ -221,7 +229,7 @@ def from_yaml(
221229
versions: List[Version] = []
222230
for version in yaml_versions:
223231
vers, version_errors = Version.from_yaml(
224-
version, services, blocks, is_action
232+
version, services, blocks, is_action, root
225233
)
226234
errors.extend(version_errors)
227235
versions.append(vers)
@@ -301,6 +309,7 @@ def from_yaml(
301309
services: Dict[str, Service],
302310
blocks: Set[str],
303311
validation: ValidationConfig,
312+
root: Path,
304313
) -> tuple[Example, MetadataErrors]:
305314
errors = MetadataErrors()
306315

@@ -360,7 +369,7 @@ def from_yaml(
360369
else:
361370
for name in yaml_languages:
362371
language, errs = Language.from_yaml(
363-
name, yaml_languages[name], sdks, services, blocks, is_action
372+
name, yaml_languages[name], sdks, services, blocks, is_action, root
364373
)
365374
languages[language.name] = language
366375
errors.extend(errs)
@@ -563,13 +572,14 @@ def parse(
563572
services: Dict[str, Service],
564573
blocks: Set[str],
565574
validation: Optional[ValidationConfig],
575+
root: Optional[Path] = None,
566576
) -> tuple[List[Example], MetadataErrors]:
567577
examples: List[Example] = []
568578
errors = MetadataErrors()
569579
validation = validation or ValidationConfig()
570580
for id in yaml:
571581
example, example_errors = Example.from_yaml(
572-
yaml[id], sdks, services, blocks, validation
582+
yaml[id], sdks, services, blocks, validation, root or file.parent
573583
)
574584
check_id_format(
575585
id,

aws_doc_sdk_examples_tools/metadata_errors.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,15 @@ def message(self):
236236
return f"has link {self.link}, which looks like a file. Links to Github should be to the folder that contains the README that describes the example."
237237

238238

239+
@dataclass
240+
class MissingGithubLink(SdkVersionError):
241+
link: str = ""
242+
root: Optional[Path] = None
243+
244+
def message(self):
245+
return f"has link {self.link}, which is not a folder in this project (root: {self.root})."
246+
247+
239248
@dataclass
240249
class InvalidSdkGuideStart(SdkVersionError):
241250
guide: str = ""

aws_doc_sdk_examples_tools/metadata_test.py

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -106,8 +106,6 @@ def load(
106106
C++:
107107
versions:
108108
- sdk_version: 1
109-
github: cpp/example_code/medical-imaging
110-
sdkguide: sdkguide/link
111109
excerpts:
112110
- description: test excerpt description
113111
snippet_tags:
@@ -134,8 +132,6 @@ def test_parse():
134132
versions=[
135133
Version(
136134
sdk_version=1,
137-
github="cpp/example_code/medical-imaging",
138-
sdkguide="sdkguide/link",
139135
excerpts=[
140136
Excerpt(
141137
description="test excerpt description",
@@ -197,8 +193,6 @@ def test_parse():
197193
C++:
198194
versions:
199195
- sdk_version: 1
200-
github: cpp/example_code/medical-imaging
201-
sdkguide: sdkguide/link
202196
excerpts:
203197
- description: test excerpt description
204198
snippet_tags:
@@ -214,8 +208,6 @@ def test_parse():
214208
C++:
215209
versions:
216210
- sdk_version: 1
217-
github: cpp/example_code/medical-imaging
218-
sdkguide: sdkguide/link
219211
excerpts:
220212
- description: test excerpt description
221213
snippet_tags:
@@ -243,8 +235,6 @@ def test_parse_strict_titles():
243235
versions=[
244236
Version(
245237
sdk_version=1,
246-
github="cpp/example_code/medical-imaging",
247-
sdkguide="sdkguide/link",
248238
excerpts=[
249239
Excerpt(
250240
description="test excerpt description",
@@ -326,8 +316,6 @@ def test_parse_strict_titles():
326316
C++:
327317
versions:
328318
- sdk_version: 1
329-
github: cpp/example_code/medical-imaging
330-
sdkguide: sdkguide/link
331319
excerpts:
332320
- description: test excerpt description
333321
snippet_tags:
@@ -340,8 +328,6 @@ def test_parse_strict_titles():
340328
C++:
341329
versions:
342330
- sdk_version: 1
343-
github: cpp/example_code/medical-imaging
344-
sdkguide: sdkguide/link
345331
excerpts:
346332
- description: test excerpt description
347333
snippet_tags:
@@ -392,6 +378,14 @@ def test_parse_strict_title_errors():
392378
file=Path("test_cpp.yaml"),
393379
id="medical-imaging_BadBasics",
394380
),
381+
metadata_errors.MissingGithubLink(
382+
file=Path("test_cpp.yaml"),
383+
id="medical-imaging_BadBasics",
384+
language="C++",
385+
sdk_version=1,
386+
link="cpp/example_code/medical-imaging",
387+
root=Path("."),
388+
),
395389
]
396390
assert expected == [*errors]
397391

@@ -482,7 +476,7 @@ def test_verify_load_successful():
482476
versions=[
483477
Version(
484478
sdk_version=2,
485-
github="javav2/example_code/medical-imaging",
479+
github="test_path",
486480
block_content="test block",
487481
excerpts=[],
488482
add_services={},
@@ -498,7 +492,6 @@ def test_verify_load_successful():
498492
versions=[
499493
Version(
500494
sdk_version=3,
501-
github=None,
502495
block_content=None,
503496
add_services={"s3": set()},
504497
excerpts=[
@@ -523,7 +516,6 @@ def test_verify_load_successful():
523516
versions=[
524517
Version(
525518
sdk_version=3,
526-
github="php/example_code/medical-imaging",
527519
sdkguide="php/sdkguide/link",
528520
block_content=None,
529521
excerpts=[
@@ -649,6 +641,14 @@ def test_verify_load_successful():
649641
guide="https://docs.aws.amazon.com/absolute/link-to-my-guide",
650642
sdk_version=1,
651643
),
644+
metadata_errors.MissingGithubLink(
645+
file=ERRORS_METADATA_PATH,
646+
id="sqs_WrongServiceSlug",
647+
language="Perl",
648+
sdk_version=1,
649+
link="perl/example_code/medical-imaging",
650+
root=ERRORS_METADATA_PATH.parent,
651+
),
652652
metadata_errors.MissingBlockContentAndExcerpt(
653653
file=ERRORS_METADATA_PATH,
654654
id="sqs_WrongServiceSlug",

aws_doc_sdk_examples_tools/test_resources/errors_metadata.yaml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,5 @@ medical-imagingBadFormat:
9494
Java:
9595
versions:
9696
- sdk_version: 2
97-
github: github/link
9897
services:
9998
medical-imaging: { TestAction }

aws_doc_sdk_examples_tools/test_resources/formaterror_metadata.yaml

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,8 @@ WrongNameFormat:
88
versions:
99
- sdk_version: 2
1010
block_content: test/block
11-
github: javav2/example_code/medical-imaging
1211
services:
13-
medical-imaging: {TestAction}
12+
medical-imaging: { TestAction }
1413
cross_TestExample:
1514
title: Test title
1615
title_abbrev: Test title abbrev
@@ -23,5 +22,5 @@ cross_TestExample:
2322
add_services:
2423
garbage:
2524
services:
26-
medical-imaging: {TestAction}
27-
sqs: {TestAction}
25+
medical-imaging: { TestAction }
26+
sqs: { TestAction }
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
snippet file

aws_doc_sdk_examples_tools/test_resources/valid_metadata.yaml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ medical-imaging_TestExample:
1313
Java:
1414
versions:
1515
- sdk_version: 2
16-
github: javav2/example_code/medical-imaging
16+
github: test_path
1717
block_content: test block
1818
JavaScript:
1919
versions:
@@ -29,7 +29,6 @@ medical-imaging_TestExample:
2929
PHP:
3030
versions:
3131
- sdk_version: 3
32-
github: php/example_code/medical-imaging
3332
sdkguide: php/sdkguide/link
3433
excerpts:
3534
- description: Optional description.

0 commit comments

Comments
 (0)