Skip to main content

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":{},
            "msg":"test" # non functional attributes also need to be included in the json query if you wish for them to be present in the response (see Example query 3 below)
        }
        # 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'}

    #Example query 3
    print(model_instance.get({
        "msg":1
    }))

    # prints:
    # {'msg': 'test'}

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.4.tar.gz (5.2 kB view details)

Uploaded Source

Built Distribution

jsonQM-0.3.4-py3-none-any.whl (5.2 kB view details)

Uploaded Python 3

File details

Details for the file jsonQM-0.3.4.tar.gz.

File metadata

  • Download URL: jsonQM-0.3.4.tar.gz
  • Upload date:
  • Size: 5.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.2

File hashes

Hashes for jsonQM-0.3.4.tar.gz
Algorithm Hash digest
SHA256 48b4703bc85059a20bf3edda4ef966e53f605ec61fd92435cbca36c0820c3d57
MD5 254598a613849843d01c49d2de8179b7
BLAKE2b-256 2f95e6b256be876a9ad380711221a8381593a65d74424789d59dc943be82b79c

See more details on using hashes here.

File details

Details for the file jsonQM-0.3.4-py3-none-any.whl.

File metadata

  • Download URL: jsonQM-0.3.4-py3-none-any.whl
  • Upload date:
  • Size: 5.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.2

File hashes

Hashes for jsonQM-0.3.4-py3-none-any.whl
Algorithm Hash digest
SHA256 53bff3f25bb2b306d9f31c86c04920570b1fcd5e33109d1d5b61ea6545940ddb
MD5 904290d616dc89f71084125a80f45967
BLAKE2b-256 853e3e6ff571efa0edb1028c7c7714f5cd48c8ef36551e33bc2ab1a93687704d

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page