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":{}
        }
        # 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)

Uploaded Source

Built Distribution

jsonQM-0.3.3-py3-none-any.whl (5.0 kB view details)

Uploaded Python 3

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

Hashes for jsonQM-0.3.3.tar.gz
Algorithm Hash digest
SHA256 43487cff906b008473322774ce15490a8aa661912215fed5d5804c611765e38f
MD5 14fce932c0a3ace6cb9ded15238f2c19
BLAKE2b-256 c3d07e869acfc24b59cc841dd6ac9f0cba45a7f263ef57f47559f1b360b11490

See more details on using hashes here.

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

Hashes for jsonQM-0.3.3-py3-none-any.whl
Algorithm Hash digest
SHA256 0a38dd64f92b7e5d9f9d3d2a278b7c003fd473af40d77b860b32b104742c3b46
MD5 d24c658774f020c2fd690fe6efa91b0f
BLAKE2b-256 ce1711f8db961ce8de8cf03a0959c553acf488d4d8892121801325a89d6b6d73

See more details on using hashes here.

Provenance

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