Metadata-Version: 2.1
Name: apjson
Version: 0.0.2
Summary: A simple asynchronus json prettifier.
Home-page: UNKNOWN
Author: nect
License: MIT License
Keywords: prettifier json async decorator light
Platform: UNKNOWN
Classifier: Development Status :: 3 - Alpha
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Operating System :: OS Independent
Classifier: Topic :: Software Development :: Libraries
Classifier: Natural Language :: English
Classifier: Intended Audience :: Developers
Requires-Python: >=3.5, <4
Description-Content-Type: text/markdown
Provides-Extra: dev
Requires-Dist: check-manifest ; extra == 'dev'

# apjson

`apjson` is an asynchonus prettifier for json-like objects and a simple implementation of the `json` module and decorators. 

## Installation
Install via pip:
```
pip install apjson
```

## Example
```python
from apjson import prettify, to_bytesio, jbytesio, jpretty
import asyncio


@jbytesio(sort_keys=True, check_circular=True)
def sync_json():

    return '{"in": "this", "example": "the", "json": "function", "is": "sync"}'


@jpretty(silent=True)
async def async_json():

    return "{\"instead\": \"here\", \"is\": \"async\"}"


async def main():

    print((await to_bytesio('{"this": "is", "an": "example", "here": 123}')).read())

    print(await prettify('{"this": "is", "another": "example", "here": True}'))

    print(await prettify(b"{\"X\": 123}"))

    print(await prettify(bytearray("{\"X\": 123}", encoding='utf-8')))

    #every decorated function should be awaited (even sync)
    print((await sync_json()).read())
    print(await async_json())

loop = asyncio.get_event_loop()
loop.run_until_complete(main())
```

## Prettifier
`prettify`: Prettifies and dumps the input (`str`, `bytes`, `bytearray`, `dict`) to json. Accepts every kwarg of `json.dumps`.
```python
await prettify('{"this": "is", "an_": "example", "here": 123, "even": 1.02, "but": False}')

await prettify(b"{\"X\": 123}")

await prettify(bytearray("{\"X\": 123}", encoding='utf-8'))

#or use the decorator

@jpretty(silent=True)
async def async_json():

    #return a json-like str, bytes, bytearray, dict and the decorator will convert it
    return "{\"instead\": \"here\", \"is\": \"async\"}"
```

## Other Utilities

`to_bytes`: converts input (`str`, `bytes`, `bytearray`, `dict`) to `io.BytesIO`
```python
await to_bytesio('{"this": "is", "an_": "example", "here": 123, "even": 1.02, "but": False}')

#or use the decorator

@jbytesio()
async def json_to_bytesio():

    #return a json-like str, bytes, bytearray, dict and the decorator will convert it
    return '{"in": "this", "example": "the", "json": "function", "is": "sync"}'
```

## Notes

You can use the boolean kwarg `silent` for skipping encoding exceptions.

For custom encoder use the kwarg `encoder` instead of `cls` in the function that uses the custom encoder.

You can decorate both sync and async functions but always return async function that needs to be awaited.

