Name | jsend2 JSON |
Version |
0.0.8
JSON |
| download |
home_page | |
Summary | |
upload_time | 2024-03-03 05:35:30 |
maintainer | |
docs_url | None |
author | |
requires_python | >=3.9 |
license | |
keywords |
fastapi
django
jsend
|
VCS |
|
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# jsend-python
This is a package to response jsend-like format
## requirements
```bash
pip install django djangorestframework
```
## Installation
<!-- ```bash
pip install jsend2
``` -->
```bash
pip install git+https://github.com/Visapick-Team/jsend-python.git
```
# Response
### Django
settings.py
```python
INSTALLED_APPS = [
...
"jsend2",
]
```
```python
REST_FRAMEWORK = {
# jsend2 limit/offset pagination
"DEFAULT_PAGINATION_CLASS": "jsend2.django.utils.JSendLimitOffsetPagination",
# jsend2 response
"DEFAULT_RENDERER_CLASSES": [
"jsend2.django.utils.JSendRenderer",
],
}
```
## output
```json
{
"status": "faild",
"message": "Any message",
"data": {
...
},
"code": "-100",
"total": 100,
"offset": 12
}
```
`status: str`
+ required
+ API status as a string, standard values are `success`, `fail` and `error`.
`message: str`
+ optional
+ Default is None and **not** included in response.
`data: Any`
+ required
+ The original result of API response.
`code: int`
+ optional
+ Default is None and **not** included in response.
`total: int`
+ optional
+ Total objects retrieved if the result is paginated.
`count: int`
+ optional
+ Object's count in the data if the result is paginated.
`offset: int`
+ optional
+ Object's offset if the result is paginated.
``
### FastAPI
main.py
```python
from fastapi import FastAPI
from fastapi_pagination import add_pagination
from router import router
app = FastAPI()
app.include_router(router)
add_pagination(app)
```
router.py
```python
from fastapi import APIRouter
from fastapi import Query
from pagination import Pagination
from response import Response
router = APIRouter()
```
#### single Object
```python
@router.get(
"/user",
response_model=Response[UserOut],
response_model_exclude_none=True
)
async def get_user(user_id: int = Query(ge=0)):
user: UserOut = find_user(user_id)
return Response(
data=user,
status="success" # default 'success'
)
```
#### Paginated
```python
@router.get(
"/users",
response_model=Pagination[UserOut],
response_model_exclude_none=True
)
async def get_users():
response = paginate(users)
response.status = "success" # default 'success'
return response
```
# Exception Handling
### Django
settings.py
```python
REST_FRAMEWORK = {
# jsend2 exception handler
"EXCEPTION_HANDLER": "jsend2.django.exception.jsend_exception_handler",
}
```
urls.py (Project urls)
```python
from jsend2.django.exception import myhandler400, myhandler403, myhandler404, myhandler500
handler500 = myhandler500
handler404 = myhandler404
handler400 = myhandler400
handler403 = myhandler403
```
### FastAPI
main.py
```python
from fastapi import FastAPI, HTTPException
from api import router
from src.jsend2.jfast.exception import ExceptionMiddleware
app = FastAPI()
app.include_router(router)
ExceptionMiddleware(app)
```
Raw data
{
"_id": null,
"home_page": "",
"name": "jsend2",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": "",
"keywords": "fastapi,django,jsend",
"author": "",
"author_email": "Mohammadreza ZOLGHADRI <zolghadri1999@email.com>, Amirreza Taherkhani <amirrezataherkhaani@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/8f/9c/3f810de613a8f6abcdbb61e56712e5a240beafc4fa864508dc0e89f872bf/jsend2-0.0.8.tar.gz",
"platform": null,
"description": "# jsend-python\nThis is a package to response jsend-like format\n\n\n## requirements\n```bash\npip install django djangorestframework\n```\n\n\n## Installation\n\n<!-- ```bash\npip install jsend2\n``` -->\n\n```bash\npip install git+https://github.com/Visapick-Team/jsend-python.git\n```\n\n\n# Response\n\n\n### Django\n\nsettings.py\n```python\nINSTALLED_APPS = [\n ...\n \"jsend2\",\n]\n```\n\n```python\nREST_FRAMEWORK = {\n # jsend2 limit/offset pagination \n \"DEFAULT_PAGINATION_CLASS\": \"jsend2.django.utils.JSendLimitOffsetPagination\",\n \n # jsend2 response\n \"DEFAULT_RENDERER_CLASSES\": [\n \"jsend2.django.utils.JSendRenderer\",\n ],\n}\n\n```\n\n\n\n## output\n\n```json\n{\n \"status\": \"faild\",\n \"message\": \"Any message\",\n \"data\": {\n ...\n },\n \"code\": \"-100\",\n \"total\": 100,\n \"offset\": 12\n\n}\n```\n`status: str`\n+ required\n+ API status as a string, standard values are `success`, `fail` and `error`.\n\n\n`message: str`\n+ optional\n+ Default is None and **not** included in response. \n\n`data: Any`\n+ required\n+ The original result of API response. \n\n`code: int`\n+ optional\n+ Default is None and **not** included in response. \n\n\n`total: int`\n+ optional\n+ Total objects retrieved if the result is paginated.\n\n`count: int`\n+ optional\n+ Object's count in the data if the result is paginated. \n\n\n`offset: int`\n+ optional\n+ Object's offset if the result is paginated. \n\n``\n\n\n### FastAPI\nmain.py\n```python\nfrom fastapi import FastAPI\nfrom fastapi_pagination import add_pagination\nfrom router import router\n\napp = FastAPI()\n\napp.include_router(router)\n\nadd_pagination(app)\n\n```\n\nrouter.py\n```python\nfrom fastapi import APIRouter\nfrom fastapi import Query\nfrom pagination import Pagination\nfrom response import Response\n\nrouter = APIRouter()\n```\n\n#### single Object\n```python\n@router.get(\n \"/user\",\n response_model=Response[UserOut],\n response_model_exclude_none=True\n )\nasync def get_user(user_id: int = Query(ge=0)):\n user: UserOut = find_user(user_id)\n return Response(\n data=user,\n status=\"success\" # default 'success'\n )\n```\n\n\n#### Paginated \n```python\n@router.get(\n \"/users\",\n response_model=Pagination[UserOut],\n response_model_exclude_none=True\n )\nasync def get_users():\n response = paginate(users)\n response.status = \"success\" # default 'success'\n return response\n```\n\n\n\n\n\n# Exception Handling\n\n\n### Django\n\nsettings.py\n```python\nREST_FRAMEWORK = {\n # jsend2 exception handler\n \"EXCEPTION_HANDLER\": \"jsend2.django.exception.jsend_exception_handler\",\n \n}\n\n```\nurls.py (Project urls)\n```python\nfrom jsend2.django.exception import myhandler400, myhandler403, myhandler404, myhandler500\n\nhandler500 = myhandler500\nhandler404 = myhandler404\nhandler400 = myhandler400\nhandler403 = myhandler403\n```\n\n\n### FastAPI\nmain.py\n\n```python\nfrom fastapi import FastAPI, HTTPException\nfrom api import router\nfrom src.jsend2.jfast.exception import ExceptionMiddleware\n\napp = FastAPI()\n\napp.include_router(router)\n\nExceptionMiddleware(app)\n```\n",
"bugtrack_url": null,
"license": "",
"summary": "",
"version": "0.0.8",
"project_urls": null,
"split_keywords": [
"fastapi",
"django",
"jsend"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "023bdd9142b248beb0c71f54effc7455e93556c14b6f8ecb59765cd7df30ceff",
"md5": "fa457cd25394a853db389d5c2911a09b",
"sha256": "438fb1c5d64fd552da431c5e2ba223e8e25370d9c36e3ef6e8bc4c114d27e04b"
},
"downloads": -1,
"filename": "jsend2-0.0.8-py3-none-any.whl",
"has_sig": false,
"md5_digest": "fa457cd25394a853db389d5c2911a09b",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9",
"size": 7051,
"upload_time": "2024-03-03T05:35:29",
"upload_time_iso_8601": "2024-03-03T05:35:29.120818Z",
"url": "https://files.pythonhosted.org/packages/02/3b/dd9142b248beb0c71f54effc7455e93556c14b6f8ecb59765cd7df30ceff/jsend2-0.0.8-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "8f9c3f810de613a8f6abcdbb61e56712e5a240beafc4fa864508dc0e89f872bf",
"md5": "a6ce3b2beeb711810a73b78d7c2fd46e",
"sha256": "cd192b3120c8987ea9ceaf3f1026670873fdeadb349239d8e968d73d4f9fb5ea"
},
"downloads": -1,
"filename": "jsend2-0.0.8.tar.gz",
"has_sig": false,
"md5_digest": "a6ce3b2beeb711810a73b78d7c2fd46e",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 6458,
"upload_time": "2024-03-03T05:35:30",
"upload_time_iso_8601": "2024-03-03T05:35:30.376997Z",
"url": "https://files.pythonhosted.org/packages/8f/9c/3f810de613a8f6abcdbb61e56712e5a240beafc4fa864508dc0e89f872bf/jsend2-0.0.8.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-03-03 05:35:30",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "jsend2"
}