Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Safely load metadata files. #19

Merged
merged 2 commits into from
Apr 19, 2024
Merged

Safely load metadata files. #19

merged 2 commits into from
Apr 19, 2024

Conversation

DavidSouther
Copy link
Contributor

By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

Comment on lines +138 to +155
try:
with open(config / "sdks.yaml", encoding="utf-8") as file:
meta = yaml.safe_load(file)
sdks, errs = parse_sdks("sdks.yaml", meta)
self.sdks = sdks
self.errors.extend(errs)
except Exception:
pass

try:
with open(config / "services.yaml", encoding="utf-8") as file:
meta = yaml.safe_load(file)
services, service_errors = parse_services("services.yaml", meta)
self.services = services
self.errors.extend(service_errors)
except Exception:
pass
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If these silently fail then you'll have empty sdks and services, which will blow up later. Better to error out here.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's the default state, and there are clear error messages then. In fact, most tributaries are not expected to have sdks or services, so they need to be empty and need to inherit from the parent doc_gen.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If these files don't exist at all, even in the root repo, the first place I see an error happening is in metadata.parse_services, where it will raise an UnknownService exception. This seems a lot harder to track down than "no services defined" or something in this doc_gen function. I see that you don't want to error out on a missing file, but I think you'll want to check that at least some sdks and services exist before you start the parse_examples loop.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's not an error here until the consumer of for_root says it is. doc_gen.py doesn't care if there are services or sdks or validation. Only consumers do.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

But it is an error here if there are no services loaded at all. In this function it eventually calls parse_examples, which ultimately calls metadata.parse_services, which will fail with UnknownService. I think this is a bad experience and easily overcome by checking that sdks and services are not None or empty. I see that this is unlikely in that the main root would have to omit one of these files, so arguably "it will never happen", although saying that means it is now guaranteed to happen. If we just need to get this in today that's fine, I don't want to block on this.

aws_doc_sdk_examples_tools/doc_gen.py Outdated Show resolved Hide resolved
Copy link
Contributor

@Laren-AWS Laren-AWS left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reluctantly approve. 😏

@Laren-AWS Laren-AWS merged commit bd26f0c into main Apr 19, 2024
1 check passed
@Laren-AWS Laren-AWS deleted the bug/safe_load_metadata branch April 19, 2024 17:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants