Skip to main content
Lesync
======
Http helpers for `django-channels`

Hello world
-----------
```python
from lesync import login_required

@login_required
async def hello(request):
return {'hello': request.user.username}
```

Install
-------

pip install lesync

Add `ApiConsumer` into your `routing.py`:

```python
from django.urls import path
from channels.routing import ProtocolTypeRouter, URLRouter
from channels.sessions import SessionMiddlewareStack
from lesync import ApiConsumer

application = ProtocolTypeRouter({
# ... websockets or something
'http': SessionMiddlewareStack(
URLRouter([
path('/async/<path:path>', ApiConsumer),
# ... fallback to sync views
]),
),
})
```

That's it. Now you can add async views which will be served win `/async/` url
prefix.


Request
-------
Subclass of `channels.http.AsgiRequest` with:

- `json` attribute
- `async load_user()` method - which returns standard django user
- `user` attribute - it's available after calling `load_user()` of if you use
`@login_required` or `@staff_member_required` decorators


Response
--------
In addition to `django.http.HttpResponse`
you can use sugary json responses and streaming:

```python
async def standard(request):
return HttpResponse('hello, world')

async def json_data(request):
return {'hello': 'world'}

async def with_status(request):
return {'bad': 'request'}, 400

async def with_headers(request):
return {}, 200, {'my': 'header'}

async def streaming(request):
async def stream():
for i in range(1, 1000):
yield f'{i},{i**2}\n'
await asyncio.sleep(.1)
return stream(), 200, {'Content-Type': 'text/csv'}
```


Auth
----
Familiar `@login_required` and `@staff_member_required` decorators:

```python
from lesync import staff_member_required

@staff_member_required
async def hello(request):
return {'admin': request.user.username}
```


Request validation
------------------
You can use `@validate_query` and `@validate_json` decorators
to validate requests data. They're using `trafaret` library to perform
validation, so make sure it's installed.

```python
from lesync.trafaret import validate_json

@validate_json({'ids': [int], 'hello?': str})
async def foo(request):
return request.json
```


Tests
-----
```bash
python -m venv .venv
source .venv/bin/activate
pip install -Ur requirements-dev.txt
python -m pytest tests/
```

Download files

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

Source Distribution

lesync-0.2.0.tar.gz (4.7 kB view details)

Uploaded Source

File details

Details for the file lesync-0.2.0.tar.gz.

File metadata

  • Download URL: lesync-0.2.0.tar.gz
  • Upload date:
  • Size: 4.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: Python-urllib/3.7

File hashes

Hashes for lesync-0.2.0.tar.gz
Algorithm Hash digest
SHA256 3ab2096380d445512df6bf02e4c90c177965138c0ab7f1ebfa465b4adc27ce34
MD5 cab342fc6093fc4ed18d328c8a5148c9
BLAKE2b-256 569e68637d9c935ae49b5c4e0078edc8c711f8357f945ac76a63fdda6b4b63bf

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page