[![Downloads](https://static.pepy.tech/badge/django-async-orm)](https://pepy.tech/project/django-async-orm)
## Disclaimer: Don't use this module in production it's still in active development.
# Django Async Orm
Django module that brings async to django ORM.
# Installing
```
python -m pip install django-async-orm
```
then add `django_async_orm` to your `INSTALLED_APPS` list:
```python
INSTALLED_APPS = [
...,
'django_async_orm'
]
```
# Usage
Django Async Orm will patch all your existing models to add `async_*` prefixed methods.
To be
example:
```python
class MyModel(models.Model):
name = models.CharField(max_length=250)
```
you can use it as follow:
```python
async def get_model():
return await MyModel.objects.async_get(name="something")
```
you can also iterate over a query set with `async for`:
```python
async def all_models():
all_result_set = await MyModel.objects.async_all()
async for obj in all_result_set:
print(obj)
```
Some wrappers are also available for template rendering, form validation and login/logout
#### Async login
```python
from django_async_orm.wrappers import async_login
async def my_async_view(request):
await async_login(request)
...
```
#### Form validation
```python
from django_async_orm.wrappers import async_form_is_valid
async def a_view(request):
form = MyForm(request.POST)
is_valid_form = await async_form_is_valid(form)
if is_valid_form:
...
```
# Django ORM support:
This is an on going projects, not all model methods are ported.
### Manager:
| methods | supported | comments |
|------------------------------------------|------------|----------|
| `Model.objects.async_get` | ✅ | |
| `Model.objects.async_create` | ✅ | |
| `Model.objects.async_count` | ✅ | |
| `Model.objects.async_none` | ✅ | |
| `Model.objects.async_bulk_create` | ✅ | |
| `Model.objects.async_bulk_update` | ✅ | |
| `Model.objects.async_get_or_create` | ✅ | |
| `Model.objects.async_update_or_create` | ✅ | |
| `Model.objects.async_earliest` | ✅ | |
| `Model.objects.async_latest` | ✅ | |
| `Model.objects.async_first` | ✅ | |
| `Model.objects.async_last` | ✅ | |
| `Model.objects.async_in_bulk` | ✅ | |
| `Model.objects.async_delete` | ✅ | |
| `Model.objects.async_update` | ✅ | |
| `Model.objects.async_exists` | ✅ | |
| `Model.objects.async_explain` | ✅ | |
| `Model.objects.async_raw` | ✅ | |
| `Model.objects.async_all` | ✅ | |
| `Model.objects.async_filter` | ✅ | |
| `Model.objects.async_exclude` | ✅ | |
| `Model.objects.async_complex_filter` | ✅ | |
| `Model.objects.async_union` | ✅ | |
| `Model.objects.async_intersection` | ✅ | |
| `Model.objects.async_difference` | ✅ | |
| `Model.objects.async_select_for_update` | ✅ | |
| `Model.objects.async_prefetch_related` | ✅ | |
| `Model.objects.async_annotate` | ✅ | |
| `Model.objects.async_order_by` | ✅ | |
| `Model.objects.async_distinct` | ✅ | |
| `Model.objects.async_difference` | ✅ | |
| `Model.objects.async_extra` | ✅ | |
| `Model.objects.async_reverse` | ✅ | |
| `Model.objects.async_defer` | ✅ | |
| `Model.objects.async_only` | ✅ | |
| `Model.objects.async_using` | ✅ | |
| `Model.objects.async_resolve_expression` | ✅ | |
| `Model.objects.async_ordered` | ✅ | |
| `__aiter__` | ✅ | |
| `__repr__` | ✅ | |
| `__len__` | ✅ | |
| `__getitem__` | ✅ | |
| `Model.objects.async_iterator` | ❌ | |
### RawQuerySet
Not supported ❌
You can still call `Model.object.async_raw()` but you will be unable to access the results.
### Model:
| methods | supported | comments |
|----------------------------|------------|----------|
| `Model.async_save` | ❌ | |
| `Model.async_update` | ❌ | |
| `Model.async_delete` | ❌ | |
| `...` | ❌ | |
### User Model / Manager
| methods | supported | comments |
|----------------------------|------------|----------|
| `UserModel.is_authenticated` | ✅ | |
| `UserModel.is_super_user` | ✅ | |
| `UserModel.objects.async_create_user` | ❌ | |
| `...` | ❌ | |
### Foreign object lazy loading:
Not supported ❌
### Wrappers:
| methods | supported | comments |
|----------------------------|------------|----------|
| `wrappers.async_render` | ✅ | |
| `wrappers.async_login` | ✅ | |
| `wrappers.async_logout` | ✅ | |
Raw data
{
"_id": null,
"home_page": "https://github.com/rednaks/django-async-orm",
"name": "django-async-orm",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.7,<4.0",
"maintainer_email": "",
"keywords": "django,async,orm",
"author": "SkanderBM",
"author_email": "skander.bmahmoud@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/04/61/758735273595625c143a02f67fea4e33bd0500894fe5b0c2835de9fb2b93/django-async-orm-0.1.12.tar.gz",
"platform": null,
"description": "[![Downloads](https://static.pepy.tech/badge/django-async-orm)](https://pepy.tech/project/django-async-orm)\n\n## Disclaimer: Don't use this module in production it's still in active development.\n\n# Django Async Orm\nDjango module that brings async to django ORM.\n\n# Installing\n```\npython -m pip install django-async-orm\n``` \n\nthen add `django_async_orm` to your `INSTALLED_APPS` list:\n\n```python\nINSTALLED_APPS = [\n ...,\n 'django_async_orm'\n]\n```\n# Usage\n\nDjango Async Orm will patch all your existing models to add `async_*` prefixed methods.\nTo be\n\nexample:\n\n```python\nclass MyModel(models.Model):\n name = models.CharField(max_length=250)\n\n```\n\nyou can use it as follow:\n\n```python\nasync def get_model():\n return await MyModel.objects.async_get(name=\"something\")\n```\n\nyou can also iterate over a query set with `async for`:\n\n```python\nasync def all_models():\n all_result_set = await MyModel.objects.async_all()\n async for obj in all_result_set:\n print(obj)\n```\n\nSome wrappers are also available for template rendering, form validation and login/logout\n\n\n#### Async login\n```python\nfrom django_async_orm.wrappers import async_login\n\nasync def my_async_view(request):\n await async_login(request)\n ...\n```\n\n#### Form validation\n```python\n\nfrom django_async_orm.wrappers import async_form_is_valid\nasync def a_view(request):\n form = MyForm(request.POST)\n is_valid_form = await async_form_is_valid(form)\n if is_valid_form:\n ...\n \n```\n\n\n# Django ORM support:\n\nThis is an on going projects, not all model methods are ported.\n\n### Manager:\n\n| methods | supported | comments |\n|------------------------------------------|------------|----------|\n| `Model.objects.async_get` | \u2705 | |\n| `Model.objects.async_create` | \u2705 | |\n| `Model.objects.async_count` | \u2705 | |\n| `Model.objects.async_none` | \u2705 | |\n| `Model.objects.async_bulk_create` | \u2705 | |\n| `Model.objects.async_bulk_update` | \u2705 | |\n| `Model.objects.async_get_or_create` | \u2705 | |\n| `Model.objects.async_update_or_create` | \u2705 | |\n| `Model.objects.async_earliest` | \u2705 | |\n| `Model.objects.async_latest` | \u2705 | |\n| `Model.objects.async_first` | \u2705 | |\n| `Model.objects.async_last` | \u2705 | |\n| `Model.objects.async_in_bulk` | \u2705 | |\n| `Model.objects.async_delete` | \u2705 | |\n| `Model.objects.async_update` | \u2705 | |\n| `Model.objects.async_exists` | \u2705 | |\n| `Model.objects.async_explain` | \u2705 | |\n| `Model.objects.async_raw` | \u2705 | |\n| `Model.objects.async_all` | \u2705 | |\n| `Model.objects.async_filter` | \u2705 | |\n| `Model.objects.async_exclude` | \u2705 | |\n| `Model.objects.async_complex_filter` | \u2705 | |\n| `Model.objects.async_union` | \u2705 | |\n| `Model.objects.async_intersection` | \u2705 | |\n| `Model.objects.async_difference` | \u2705 | |\n| `Model.objects.async_select_for_update` | \u2705 | |\n| `Model.objects.async_prefetch_related` | \u2705 | |\n| `Model.objects.async_annotate` | \u2705 | |\n| `Model.objects.async_order_by` | \u2705 | |\n| `Model.objects.async_distinct` | \u2705 | |\n| `Model.objects.async_difference` | \u2705 | |\n| `Model.objects.async_extra` | \u2705 | |\n| `Model.objects.async_reverse` | \u2705 | |\n| `Model.objects.async_defer` | \u2705 | |\n| `Model.objects.async_only` | \u2705 | |\n| `Model.objects.async_using` | \u2705 | |\n| `Model.objects.async_resolve_expression` | \u2705 | |\n| `Model.objects.async_ordered` | \u2705 | |\n| `__aiter__` | \u2705 | |\n| `__repr__` | \u2705 | |\n| `__len__` | \u2705 | |\n| `__getitem__` | \u2705 | |\n| `Model.objects.async_iterator` | \u274c | |\n\n### RawQuerySet\nNot supported \u274c\n\nYou can still call `Model.object.async_raw()` but you will be unable to access the results.\n\n### Model:\n\n| methods | supported | comments |\n|----------------------------|------------|----------|\n| `Model.async_save` | \u274c | |\n| `Model.async_update` | \u274c | |\n| `Model.async_delete` | \u274c | |\n| `...` | \u274c | |\n\n\n### User Model / Manager\n| methods | supported | comments |\n|----------------------------|------------|----------|\n| `UserModel.is_authenticated` | \u2705 | |\n| `UserModel.is_super_user` | \u2705 | |\n| `UserModel.objects.async_create_user` | \u274c | |\n| `...` | \u274c | |\n\n\n### Foreign object lazy loading:\nNot supported \u274c\n\n\n### Wrappers:\n| methods | supported | comments |\n|----------------------------|------------|----------|\n| `wrappers.async_render` | \u2705 | |\n| `wrappers.async_login` | \u2705 | |\n| `wrappers.async_logout` | \u2705 | |\n\n\n\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Bringing async capabilities to django ORM",
"version": "0.1.12",
"project_urls": {
"Homepage": "https://github.com/rednaks/django-async-orm",
"Repository": "https://github.com/rednaks/django-async-orm"
},
"split_keywords": [
"django",
"async",
"orm"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "85cddf12d7ee9a02a402c553c7936c5bb932672b5b3dd2c5f10d1b7b18543ad7",
"md5": "8222334374a2f993123248de4a5c8582",
"sha256": "7f23bade57f2764ffaac63dc248e145b6e5a91f59def13b0ca038183e360da4a"
},
"downloads": -1,
"filename": "django_async_orm-0.1.12-py3-none-any.whl",
"has_sig": false,
"md5_digest": "8222334374a2f993123248de4a5c8582",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7,<4.0",
"size": 8965,
"upload_time": "2023-05-11T18:18:25",
"upload_time_iso_8601": "2023-05-11T18:18:25.570998Z",
"url": "https://files.pythonhosted.org/packages/85/cd/df12d7ee9a02a402c553c7936c5bb932672b5b3dd2c5f10d1b7b18543ad7/django_async_orm-0.1.12-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "0461758735273595625c143a02f67fea4e33bd0500894fe5b0c2835de9fb2b93",
"md5": "f1dd52f7fbdb6f1296c4c1461fee9ad4",
"sha256": "c97e2011eb1e0147473047a229047425e60eaf79f6b6ce37fdbc24f6371436e8"
},
"downloads": -1,
"filename": "django-async-orm-0.1.12.tar.gz",
"has_sig": false,
"md5_digest": "f1dd52f7fbdb6f1296c4c1461fee9ad4",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7,<4.0",
"size": 8890,
"upload_time": "2023-05-11T18:18:23",
"upload_time_iso_8601": "2023-05-11T18:18:23.757967Z",
"url": "https://files.pythonhosted.org/packages/04/61/758735273595625c143a02f67fea4e33bd0500894fe5b0c2835de9fb2b93/django-async-orm-0.1.12.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-05-11 18:18:23",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "rednaks",
"github_project": "django-async-orm",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"tox": true,
"lcname": "django-async-orm"
}