Skip to content

Starlette resource that helps you follow a layered architecture.

Notifications You must be signed in to change notification settings

gacou54/starlette-resource

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Starlette-resource

ci

Starlette resource classes that helps you follow a layered architecture.

This module was made to facilitate the implementation of a layered architecture. The Resource and WebSocketResource classes are essentially the same things as Starlette's HTTPEndpoint and WebSocketEndpoint classes. So you can use these classes in the same way.

The difference is that the Resource and WebSockerResource must be instantiated before being passed to Starlette's Route.

Works with Python 3.8+.

Example

from starlette.applications import Starlette
from starlette.requests import Request
from starlette.responses import PlainTextResponse
from starlette.routing import Route, WebSocketRoute
from starlette.websockets import WebSocket

from starlette_resource import Resource, WebSocketResource


class GreetingService:
    async def greet(self, name: str) -> str:
        return f'Hello {name}!'


class GreetingResource(Resource):
    def __init__(self, hello_service: GreetingService) -> None:
        self.hello_service = hello_service

    async def get(self, req: Request) -> PlainTextResponse:
        name = req.path_params['name']
        greeting_message = await self.hello_service.greet(name)

        return PlainTextResponse(greeting_message)
    
    async def post(self, req: Request):
        ...

    async def put(self, req: Request):
        ...

    async def delete(self, req: Request):
        ...


class GreetingWebSocketResource(WebSocketResource):
    def __init__(self, hello_service: GreetingService) -> None:
        self.hello_service = hello_service

    async def on_receive(self, websocket: WebSocket, data: str) -> None:
        greeting_message = await self.hello_service.greet(data)

        await websocket.send_text(greeting_message)


# Services
greeting_service = GreetingService()

# Resources
greeting_resource = GreetingResource(greeting_service)
greeting_websocket_resource = GreetingWebSocketResource(greeting_service)

app = Starlette(
    debug=True,
    routes=[
        Route('/greet/{name}', greeting_resource),
        WebSocketRoute('/websocket_greet', greeting_websocket_resource)
    ]
)

Installation

Simply install from PyPI:

pip install starlette-resource

About

Starlette resource that helps you follow a layered architecture.

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages