Skip to main content

Starlette resource that helps you follow a layered architecture.

Project description

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

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

starlette_resource-0.1.1.tar.gz (1.9 kB view details)

Uploaded Source

Built Distribution

starlette_resource-0.1.1-py3-none-any.whl (2.8 kB view details)

Uploaded Python 3

File details

Details for the file starlette_resource-0.1.1.tar.gz.

File metadata

  • Download URL: starlette_resource-0.1.1.tar.gz
  • Upload date:
  • Size: 1.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.6.1 CPython/3.11.6 Linux/6.5.8-200.fc38.x86_64

File hashes

Hashes for starlette_resource-0.1.1.tar.gz
Algorithm Hash digest
SHA256 1bed38bb53c8c51beff9d8ec44c09e3f7224c24b5b5874dc25ca45a1b210a074
MD5 516ef99598b1bd7931d39207e83890b3
BLAKE2b-256 36afd0165bb3bc548cde25b348ee78277f5c92c5920a95acd644306840f7280b

See more details on using hashes here.

File details

Details for the file starlette_resource-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: starlette_resource-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 2.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.6.1 CPython/3.11.6 Linux/6.5.8-200.fc38.x86_64

File hashes

Hashes for starlette_resource-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 76d7974745adedf22c2beafb541854834ae2d25b1ea1efcea393c27100c5a761
MD5 150a40bff3e3286151e11187e29c9980
BLAKE2b-256 a4e37298765c977a942bf62d4fe521eafadea08b4a51cb9ec3e300ba2f145bc8

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page