Skip to main content

Validate request arguments, Including Cross Field, Cross Struct

Project description

https://raw.githubusercontent.com/Eastwu5788/pre-request/master/docs/static/logo.jpg https://github.com/Eastwu5788/pre-request/actions/workflows/intergration.yml/badge.svg https://codecov.io/gh/Eastwu5788/pre-request/branch/master/graph/badge.svg?token=KAB3VL6B7J PyPI - License Documentation Status PyPI Im

This framework is designed to validate params for Restful api request.

We can validate complex struct and field, including Cross Field, Cross Struct

Install

you can simply install it by:

pip install pre-request

Document

Pre-request manual could be found at: https://pre-request.readthedocs.io/en/master/index.html

A Simple Example

This is very easy to use pre-request in your project

from flask import Flask

from pre_request import pre, Rule

app = Flask(__name__)

args = {
   "userId": Rule(type=int, required=True)
}

@app.route("/")
@pre.catch(args)
def hello_world(params):
   from flask import g
   return str(params == g.params)

what happened in this code ?

  1. Use pre-request library to import a global object pre

  2. Define request params rule, userId must be type of int and required

  3. Use @pre.catch(req_params) to filter input value

  4. Use ~flask.g or def hello_world(params) to get formatted input value。

Complex Example

We use a very complex example to show the powerful of this framework

from flask import Flask
from pre_request import pre, Rule

args = {
    "userFirst": {
        "userId": Rule(type=int, required=False),
        "socialInfo": {
            "gender": Rule(type=int, enum=[1, 2], default=1),
            "age": Rule(type=int, gte=18, lt=80),
            "country": Rule(required=True, deep=False)
        }
    },
    "userSecond": {
        "userId": Rule(type=int, required=False, neq_key="userFirst.userId"),
        "socialInfo": {
            "gender": Rule(type=int, enum=[1, 2], default=1, neq_key="userFirst.socialInfo.gender"),
            "age": Rule(type=int, gte=18, lt=80, required_with="userFirst.socialInfo.age"),
            "country": Rule(required=True, deep=False)
        }
    }
}


app = Flask(__name__)
app.config["TESTING"] = True
client = app.test_client()

@app.route("/structure", methods=["GET", "POST"])
@pre.catch(args)
def structure_handler(params):
    return str(params)


if __name__ == "__main__":
    resp = app.test_client().post("/structure", json={
        "userFirst": {
            "userId": "13",
            "socialInfo": {
                "age": 20,
            }
        },
        "userSecond": {
            "userId": 14,
            "socialInfo": {
                "age": 21
            }
        },
        "country": "CN",
        "userFirst.socialInfo.gender": 1,
        "userSecond.socialInfo.gender": 2,
    })

    print(resp.get_data(as_text=True))

Use parse

We can use function pre.parse instead of decorator @pre.catch()

args = {
    "params": Rule(email=True)
}

@app.errorhandler(ParamsValueError)
def params_value_error(e):
    return pre.fmt_resp(e)


@app.route("/index")
def example_handler():
    rst = pre.parse(args)
    return str(rst)

Contributing

How to make a contribution to Pre-request, see the contributing.

Coffee

Please give me a cup of coffee, thank you!

BTC: 1657DRJUyfMyz41pdJfpeoNpz23ghMLVM3

ETH: 0xb098600a9a4572a4894dce31471c46f1f290b087

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

pre_request-2.1.5.tar.gz (18.5 kB view details)

Uploaded Source

Built Distribution

pre_request-2.1.5-py3-none-any.whl (29.2 kB view details)

Uploaded Python 3

File details

Details for the file pre_request-2.1.5.tar.gz.

File metadata

  • Download URL: pre_request-2.1.5.tar.gz
  • Upload date:
  • Size: 18.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.1 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.10

File hashes

Hashes for pre_request-2.1.5.tar.gz
Algorithm Hash digest
SHA256 c0b5840042eab0b6784a74325a3d0a539d01b03291eb94225abdfe84a526632d
MD5 9acf9f4cc9b32e494a14baac50fffc56
BLAKE2b-256 7983386f922e92ac489361c89989f0c584f0adacd025b44c4eda1ddde8fd1b12

See more details on using hashes here.

File details

Details for the file pre_request-2.1.5-py3-none-any.whl.

File metadata

  • Download URL: pre_request-2.1.5-py3-none-any.whl
  • Upload date:
  • Size: 29.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.1 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.10

File hashes

Hashes for pre_request-2.1.5-py3-none-any.whl
Algorithm Hash digest
SHA256 f4b0bb09ef378101107db5ba4211325b8fc490edbc46a990919ba20eb3a91b0c
MD5 5f87795ed5c35e7e88cf9b67cf08435e
BLAKE2b-256 556b9b7d088abb176bdc8181fad69c00099b74a76854bdecd984cea81100d6eb

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