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

[WIP] Allow to implement custom endpoints #809

Draft
wants to merge 1 commit into
base: develop
Choose a base branch
from

Conversation

lucapirrone
Copy link
Contributor

Description

Based on #2 dev meeting's discussion about allowing cat rest api to be extended by custom routes through hook.

Type of change

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • This change requires a documentation update

Checklist:

  • My code follows the style guidelines of this project
  • I have performed a self-review of my own code
  • I have commented my code, particularly in hard-to-understand areas

@lucapirrone
Copy link
Contributor Author

The structure is what we discussed on last dev meeting.
You can extend the cat rest api through an hook like that:
`
from cat.mad_hatter.decorators import hook
from fastapi.routing import APIRouter

@hook
def load_custom_endpoints(custom_endpoint_router: APIRouter, cat) -> None:

@custom_endpoint_router.get("/hello/world")
async def hello_world():
    return "Hello World!"

return custom_endpoint_router

`
image

The main problem now is that the router is not reloaded every time the plugins are toggled because from the CheshireCat instance it is not possible to access the fastapi instance.
It could be passed here:
image
but it is a circular dependency(?)

@sambarza
Copy link
Contributor

sambarza commented Nov 2, 2024

@lucapirrone reading this now!
I'm working on this proposal #964

@sambarza
Copy link
Contributor

sambarza commented Nov 2, 2024

Some conclusion, the CheshireCat constructor needs the FastAPI app instance.

I discovered that is not possible to add routes to an already included APIRouter, so in my proposal I have a different approach, creation and inclusion of a new APIRouter for each decorated endpoint

@valentimarco valentimarco added the enhancement New feature or request label Nov 7, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants