jsend2


Namejsend2 JSON
Version 0.0.8 PyPI version JSON
download
home_page
Summary
upload_time2024-03-03 05:35:30
maintainer
docs_urlNone
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"
}
        
Elapsed time: 0.21533s