No project description provided
Project description
Kante
Kante is a simple lightweight strawberry utily library, that merges the efforts aims to provide common utilities for strawberry and strawberry-django projects.
Installation
pip install kante
Usage
Here is a simple example of how to use kante with strawberry and strawberry-django. It can be used with any ASGI application, but this example uses Django.
import asyncio
from typing import AsyncGenerator
from kante.context import WsContext
from kante.types import Info
import strawberry
from strawberry import ID, scalars
from typing import cast
from kante.channel import build_channel
from pydantic import BaseModel
from strawberry.experimental import pydantic
import strawberry_django
class StrChannelModel(BaseModel):
id: str
name: str
@pydantic.type(StrChannelModel)
class StrChannel:
id: str
name: str
str_channel = build_channel(StrChannelModel, "test_channel")
@strawberry.type
class Me:
id: str
@strawberry.type
class Query:
@strawberry.field
def me(self, info: Info, id: ID) -> Me:
return Me(id=id)
@strawberry.type
class Mutation:
@strawberry.field
def me(self, info: Info, id: ID) -> Me:
return Me(id=id)
@strawberry_django.field
def send(self, info: Info, id: ID) -> str:
str_channel.broadcast(StrChannelModel(id=str(id), name="test"))
return str(id)
@strawberry.type
class Subscription:
@strawberry.subscription
async def time(self, info: Info) -> AsyncGenerator[scalars.JSON, None]:
for i in range(2):
assert isinstance(info.context, WsContext)
yield info.context.connection_params
await asyncio.sleep(1)
@strawberry.subscription
async def listen_str_channel(self, info: Info) -> AsyncGenerator[StrChannel, None]:
""" Listen to the str_channel and yield messages."""
assert isinstance(info.context, WsContext)
async for i in str_channel.listen(info.context):
yield cast(StrChannel, i)
schema = strawberry.Schema(
query=Query,
mutation=Mutation,
subscription=Subscription,
)
To wrap the schema with the ASGI application, you can use the router function from kante.router.
import os
from django.core.asgi import get_asgi_application
from kante.router import router
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "test_project.settings")
# Initialize Django ASGI application early to ensure the AppRegistry
# is populated before importing code that may import ORM models.
django_asgi_app = get_asgi_application()
from .schema import schema # noqa
application = router(
django_asgi_app,
schema=schema,
)
Usage
Kante is aimed to be a simple utility library for strawberry and strawberry-django, to build upon to see some extensions look at "authentikate" and "koherent" which are built on top of kante.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file kante-1.1.1.tar.gz.
File metadata
- Download URL: kante-1.1.1.tar.gz
- Upload date:
- Size: 12.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.0 {"installer":{"name":"uv","version":"0.11.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
28d70cbe630cfe27507458955f701acf14b670961da09d9ef0ce51c7391e1f66
|
|
| MD5 |
ca42ba36d8552151682c0f48a4b28ef3
|
|
| BLAKE2b-256 |
49b27ad3f782583dfd421a053c83cdbdb62c68bd97103f181eda6c55165191a7
|
File details
Details for the file kante-1.1.1-py3-none-any.whl.
File metadata
- Download URL: kante-1.1.1-py3-none-any.whl
- Upload date:
- Size: 15.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.0 {"installer":{"name":"uv","version":"0.11.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
509361ba32c8f6b1962364a6fa1353a3fab610e9139c7f0f6cfb16c723985226
|
|
| MD5 |
d23485ad2237689d79efe80a137e070d
|
|
| BLAKE2b-256 |
c8e4611c76e373273ff41de1d6973e51ff727eb0158fa7e1bae7f82ad11c643e
|