Metadata-Version: 2.1
Name: jsonsh
Version: 0.1.3
Summary: UNKNOWN
Home-page: https://github.com/Suryansh2002/jsonsh
Author: Suryansh Sharma
License: MIT
Platform: UNKNOWN
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Description-Content-Type: text/markdown
Requires-Dist: orjson
Requires-Dist: pydantic
Requires-Dist: ujson
Requires-Dist: uvloop

# jsonsh

Disclaimer : This is quite slow for bunch inserts, 
Taking upto 0.0077 second for 1 file insert when 10000 files were inserted one by one

Note: I did the test on my laptop , which has i5-3337u

Installing
----------

```sh
pip install -U jsonsh
```

What is this !
-----------
This is a silly package , that uses pydantic to store data in different json files.

Data Fetched is in pydantic Model , which can be converted to dict using dict().

All examples below have data returned as a Pydantic Model !

Usage
------

### Base Example 


```py
import asyncio
from jsonsh import Template,Instance

instance = Instance("Data") #this is your data folder

@instance.register
class Test(Template):
    id:int
    age:int
    name:str

async def main():
    idk = Test(id = 10,age = 13,name = "hello")
    await idk.save() #this saves the file in your current working directory

asyncio.run(main())
```

### Finding Data

There are no advanced queries yet but you can find by id or particular value


```py
import asyncio
from jsonsh import Template,Instance

instance = Instance("Data")

@instance.register
class Test(Template):
    id:int
    age:int
    name:str

async def main():
    data = await Test.find_one(id = 10)
    print(data) #prints the data

asyncio.run(main())
```

### Finding Multiple Data


```py
import asyncio
from jsonsh import Template,Instance

instance = Instance("Data")

@instance.register
class Test(Template):
    id:int
    age:int
    name:str

async def main():
    data = await Test.find_many(age = 10) #finding all dict with age as 10
    print(data) #prints the lists of multiple dicts

asyncio.run(main())
```

## Using Indexing 

```py
import asyncio
from jsonsh import Template,Instance

instance = Instance("Data")

@instance.register
class Test(Template):
    id:int
    age:int
    name:str

    class Meta:
        indexes = ["age","name"] 
    """
    this makes finding by age and name faster
    """

async def main():
    data = await Test.find_many(age = 10) #finding all dict with age as 10
    print(data) #prints the lists of multiple dicts

asyncio.run(main())
```

## Deleting files / entries

```py
import asyncio
from jsonsh import Template,Instance

instance = Instance("Data")

@instance.register
class Test(Template):
    id:int
    age:int
    name:str

    class Meta:
        indexes = ["age","name"] 
    """
    this makes finding by age and name faster
    """

async def main():
    data = await Test.delete_one(age = 10) #deleting a file entry with age as 10
    data = await Test.delete_one(id = 10) #deleting a file entry with id as 10
    print(data) #prints the lists of multiple dicts

asyncio.run(main())
```

#### Simple Caching 

```py

from jsonsh import Template,Instance

instance = Instance("Data",cache_state = True,capacity = 100) #this helps you to avoid reading files in finds

```


