A simple tool to easily make your API endpoint json queries more versatile.
Project description
jsonQM
A simple tool to easily make your API endpoint json queries more versatile.
pip install jsonQM
Quick Start
The example model explains how to set up a model and query that model.
tests/ExampleModel.py
from jsonQM import *
# Make the model.
# Declare a model serializer
ms = ModelSerializer() # Each model must have its own serializer
class MyModel(Model):
def __init__(self) -> None:
# define the structure of the query model:
self.model = {
# we have a single query scope/section called functions
"functions":{}
}
# sync/add the model attribute functions to the model
ms.sync(self)
# Define attributes of the model (argument 2) along with the scope/section they are found in (argument 1)
@ms.add(["functions"], "repeater") # This attribute key is "repeater" and can be found in the "functions" dict
def repeater(self, arg:int):
# when the attribute is queried it will run this code and return the value
return ["repeat" for _ in range(arg)]
# You can use anything as the attribute key that is a valid python dictionary key.
@ms.add(["functions"], 7)# Keep in mind that if used with json, you are limited to what is a valid json key.
def number_7(self):
return "abc"
@ms.token()# this marks this attribute as the model's token
@ms.add([], "token")
def token(self, tok:str):
#insert some logic to compare token to tokens in database
return tok == "token" # The token function must return true for the token to be valid.
@ms.requires_token()# this marks this attribute as requiring the token attribute to return true
@ms.add([], "secret")
def secret(self):
return "My super secret message" # if the token is false this will return 'errot:token:invalid' if the token is missing from the query this will return 'error:token:missing'
#LOGIC
if __name__ == "__main__":
# If you are experiencing bugs related to concurrency, you should reinstantiate your model per thread/concurrent task where it is being used.
# note that instantiation may require many itterations depending on the ammount of attributes you've added and the length of their parent path.
# (parent path is the first list argument in `ms.add(["some","dictionary","key","path"], "attribute name")`)
model_instance = MyModel()
# If you can avoid instantiating the model more than once for optimal performance.
#Example query 1
print(model_instance.get({
"functions":{
# programmed attribute values should be a list containing the function arguments.
"repeater":[5],
7:[]
}
}))
# prints:
# {'functions': {'repeater': ['repeat', 'repeat', 'repeat', 'repeat', 'repeat'], 7: 'abc'}}
#Example query 2
print(model_instance.get({
"functions":{
# The model will only run/return attributes which have been specified
"repeater":[5]
}
}))
# prints:
# {'functions': {'repeater': ['repeat', 'repeat', 'repeat', 'repeat', 'repeat']}}
#Example query 3
print(model_instance.get({
"token":["token"],
"secret":[]
}))
# prints:
# {'token': True, 'secret': 'My super secret message'}
#Example query 3
print(model_instance.get({
"token":["abc"],
"secret":[]
}))
# prints:
# {'token': False, 'secret': 'error:token:invalid'}
#Example query 3
print(model_instance.get({
"secret":[]
}))
# prints:
# {'secret': 'error:token:missing'}
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
jsonQM-0.3.3.tar.gz
(5.1 kB
view details)
Built Distribution
File details
Details for the file jsonQM-0.3.3.tar.gz
.
File metadata
- Download URL: jsonQM-0.3.3.tar.gz
- Upload date:
- Size: 5.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.10.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 43487cff906b008473322774ce15490a8aa661912215fed5d5804c611765e38f |
|
MD5 | 14fce932c0a3ace6cb9ded15238f2c19 |
|
BLAKE2b-256 | c3d07e869acfc24b59cc841dd6ac9f0cba45a7f263ef57f47559f1b360b11490 |
Provenance
File details
Details for the file jsonQM-0.3.3-py3-none-any.whl
.
File metadata
- Download URL: jsonQM-0.3.3-py3-none-any.whl
- Upload date:
- Size: 5.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.10.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0a38dd64f92b7e5d9f9d3d2a278b7c003fd473af40d77b860b32b104742c3b46 |
|
MD5 | d24c658774f020c2fd690fe6efa91b0f |
|
BLAKE2b-256 | ce1711f8db961ce8de8cf03a0959c553acf488d4d8892121801325a89d6b6d73 |