drakaina
Framework for simple RPC service implementation.
Features
- Serializers layer.
json,orjson,ujsonandmsgpackserializers.
- Generates schemas for documentation in OpenRPC format.
- WSGI protocol implementation
login_requiredandcheck_permissionsdecorators.
Installation and Dependencies
Drakaina may be installed via pip and requires Python 3.8 or higher :
pip install drakaina
Usage Examples
A minimal Drakaina example is:
from drakaina import remote_procedure
from drakaina.wsgi import WSGIHandler
@remote_procedure("hello")
def hello_method(name):
return f"Hello, {name}!"
"""
>>> from drakaina.rpc_protocols import JsonRPCv2
>>> JsonRPCv2().handle({"jsonrpc": "2.0", "method": "hello", "params": ["🐍 Python"] "id": 1})
{"jsonrpc": "2.0", "result": "Hello, 🐍 Python!", "id": 1}
"""
# Or define WSGI application
app = WSGIHandler(route="/jrpc")
Documentation
Optional requirements
pip install drakaina[jwt, orjson, ujson]
Middlewares
CORS
JWT
Drakaina may be installed via pip and requires Python 3.7 or higher :
pip install drakaina[jwt]
Example of using Drakaina:
from functools import partial
from drakaina import check_permissions
from drakaina import ENV_IS_AUTHENTICATED
from drakaina import ENV_USER_ID
from drakaina import login_required
from drakaina import match_any
from drakaina import remote_procedure
from drakaina.contrib.jwt.middleware import JWTAuthenticationMiddleware
from drakaina.wsgi import WSGIHandler
import user_store
@login_required
@remote_procedure(provide_request=True)
def my_method(request):
assert request[ENV_IS_AUTHENTICATED]
return f"Hello Bro ✋! Your ID={request[ENV_USER_ID]}"
@check_permissions(["user_read", "user:admin", "username:johndoe"], match_any)
@remote_procedure
def my_method():
return "Hello Bro! ✋️"
def get_user(request, payload):
user_id = request[ENV_USER_ID] or payload["user_id"]
return user_store.get(id=user_id)
def get_jwt_scopes(request, payload):
# here `scp` is the key for the scopes value in the token payload
return payload.get("scp")
app = WSGIHandler(
middlewares=[
partial(
JWTAuthenticationMiddleware,
secret_phrase="_secret_",
credentials_required=True,
auth_scheme="Bearer",
# token_getter=custom_implementation_get_token,
user_getter=get_user,
scopes_getter=get_jwt_scopes,
# revoke_checker=is_revoked,
)
]
)
Drakaina may be ran with any WSGI-compliant server, such as Gunicorn.
gunicorn main:app
or ran with any ASGI-compliant server
uvicorn main:app2
Using with Django
Create file rpc_views.py in your django application.
Define function and wrap it remote_procedure decorator:
from drakaina import remote_procedure
@remote_procedure
def my_method():
return "Hello, Django Bro! ✋"
Add RPCView class to urlpatterns. The as_view method
must accept the autodiscover argument as the name of
the remote procedure files.
from django.urls import path
from drakaina.contrib.django.views import RPCView
urlpatterns = [
...,
path("api/", RPCView.as_view(autodiscover="rpc_views")),
]
JWT Authentication in your Django project
Wrap an instance of RPCView with the JWTAuthenticationMiddleware.
from django.urls import path
from drakaina.contrib.django import RPCView, JWTAuthenticationMiddleware
urlpatterns = [
...,
path("api/", JWTAuthenticationMiddleware(
RPCView.as_view(autodiscover="rpc_views")
)),
]
Define the parameters in the settings.py file.
...
DRAKAINA_JWT_SECRET_KEY = "__SECRET_KEY__"
...
License
Apache License 2.0
Artwork
"drakaina.png" by Korolko Anastasia is licensed under
(CC BY-SA 4.0).
Release files for drakaina 0.7.6
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| drakaina-0.7.6.tar.gz | 38.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| drakaina-0.7.6-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 86.7 kB
Release files / drakaina-0.7.6.tar.gz
| Download URL | drakaina-0.7.6.tar.gz |
|---|---|
| Size | 38.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0758ca3b1d8a4342ef9ffd0ca25aa7915b03852684a4e766752aaba18a8c102b
|
|
BLAKE2b-256 checksum How to use checksums |
8c023c3385575ceaba91b92a3320a056810cc718abf0de46e217796729e71cf1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/1.5.1 CPython/3.11.0 Windows/10
|
Release files / drakaina-0.7.6-py3-none-any.whl
| Download URL | drakaina-0.7.6-py3-none-any.whl |
|---|---|
| Size | 47.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4f809c133da40a0e6383b4ee935bb3cdcaa64840fe9d52780e3f59e11776d53d
|
|
BLAKE2b-256 checksum How to use checksums |
e780891b0ae01bf81a6a0b9903ea0dc05a756fb4d0dae1c68e27d146d553601c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/1.5.1 CPython/3.11.0 Windows/10
|