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

fix(event_handler): do not skip middleware and exception handlers on 404 error #4492

Merged

Conversation

heitorlessa
Copy link
Contributor

@heitorlessa heitorlessa commented Jun 12, 2024

Issue number: #3916

Summary

This PR addresses the bug where non-matched routes (404) did not kick off the request chain and instead immediately process a 404 response.

The reasons this PR do not reach for a 404 middleware solution are:

  1. Middlewares are tightly coupled with a Route, so request processing is kicked off from a route (__call__())
  2. Moving as a middleware would require a dummy/no-op route to be called only to be overwritten, causing unnecessary CPU cycle and memory usage (tbh, it's somewhat a minor and we can revert later).

NOTE. Nothing stops us for making it a middleware w/ a dummy route to kick the request chain when we have more time. This was an issue ever since middleware was introduced in #2917, so I'd favoured keeping the core the same and focusing on covering any edge cases (e.g., what if a middleware short-circuit).

Changes

Please provide a summary of what's being changed

  • Removed duplicated CORS Origin Header logic
  • Removed unnecessary CORS injection within 404 logic
  • Creates 404 route handler and call it to kick off request chain
  • Test FastAPI and Flask to be triple sure it's a standard
  • Test pre-flight for not found route with middleware
  • Enrich docstring for resolve() to share request flow

unrelated

  • Moved special sorted set to list str for CORS Allow Methods to CORSConfig

User experience

Please share what the user experience looks like before and after this change

Checklist

If your change doesn't seem to apply, please leave them unchecked.

Is this a breaking change?

RFC issue number:

Checklist:

  • Migration process documented
  • Implement warnings (if it can live side by side)

Acknowledgment

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

Disclaimer: We value your time and bandwidth. As such, any pull requests created on non-triaged issues might not be successful.

@heitorlessa heitorlessa requested a review from a team as a code owner June 12, 2024 19:53
@pull-request-size pull-request-size bot added the size/L Denotes a PR that changes 100-499 lines, ignoring generated files. label Jun 12, 2024
@github-actions github-actions bot added the bug Something isn't working label Jun 12, 2024
Copy link

codecov bot commented Jun 12, 2024

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 96.43%. Comparing base (e14e768) to head (395f1ad).
Report is 563 commits behind head on develop.

Additional details and impacted files
@@             Coverage Diff             @@
##           develop    #4492      +/-   ##
===========================================
+ Coverage    96.38%   96.43%   +0.05%     
===========================================
  Files          214      219       +5     
  Lines        10030    10627     +597     
  Branches      1846     1976     +130     
===========================================
+ Hits          9667    10248     +581     
- Misses         259      267       +8     
- Partials       104      112       +8     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@heitorlessa
Copy link
Contributor Author

@leandrodamascena can I get your help in doing your crazy QA skills just in case I missed any edge case?

Copy link

Quality Gate Passed Quality Gate passed

Issues
0 New issues
0 Accepted issues

Measures
0 Security Hotspots
No data about Coverage
2.3% Duplication on New Code

See analysis details on SonarCloud

@leandrodamascena
Copy link
Contributor

@leandrodamascena can I get your help in doing your crazy QA skills just in case I missed any edge case?

Hey @heitorlessa, I've spent some time testing various scenarios with different kinds of Resolvers, including Bedrock, and everything seems to be working fine for me. CORS is working correctly also, and it's also running Middleware with the OPTIONS method/route.

e2e tests are also green. A note for the future is to create e2e tests with Middleware to ensure that we are testing those scenarios.

image

Copy link
Contributor

@leandrodamascena leandrodamascena left a comment

Choose a reason for hiding this comment

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

Thanks for this hard and amazing work @heitorlessa!

APPROVED!

@leandrodamascena leandrodamascena changed the title fix(apigateway): do not skip middleware and exception handlers on 404 fix(event_handler): do not skip middleware and exception handlers on 404 error Jun 12, 2024
@leandrodamascena leandrodamascena merged commit 463dd47 into aws-powertools:develop Jun 12, 2024
17 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working event_handlers size/L Denotes a PR that changes 100-499 lines, ignoring generated files. tests
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Bug: Event handler middleware not triggered for not found routes
2 participants