Skip to content

Provide an example of feed on a dynamic route #1

Open
alexpdp7 opened this issue Jun 22, 2020 · 1 comment
Open

Provide an example of feed on a dynamic route #1

alexpdp7 opened this issue Jun 22, 2020 · 1 comment

Comments

@alexpdp7
Copy link

This might be my own lack of knowledge around starlette, but could you provide an example of how to create a dynamic route:

@app.route('/foo/{bar}')
class Feed(FeedEndpoint):

and how to use bar to calculate title, description, linkand use it to calculate the feed items?

@alexpdp7
Copy link
Author

Well, I figured it out. You can close...

from typing import Iterable

from starlette.applications import Starlette  # type: ignore
from starlette.requests import Request  # type: ignore
from starlette_feedgen import FeedEndpoint  # type: ignore

app = Starlette()


class FeedObject:
    def __init__(self, username: str):
        self.username = username


@app.route("/{username}")
class Feed(FeedEndpoint):  # type: ignore
    async def get_object(self, request: Request) -> FeedObject:
        return FeedObject(request.path_params["username"])

    def title(self, obj: FeedObject) -> str:
        return f"RSS feed for {obj.username}"

    def description(self, obj: FeedObject) -> str:
        return f"RSS feed for {obj.username}"

    def link(self, obj: FeedObject) -> str:
        return f"https://twitter.com/{obj.username}"

    def get_items(self) -> Iterable[FeedItem]:
        username = self.scope["path_params"]["username"]
        return map(FeedItem, xxx)

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant