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://www.travis-ci.org/Eastwu5788/pre-request.svg?branch=master https://coveralls.io/repos/github/Eastwu5788/pre-request/badge.svg?branch=master 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.

Files for pre-request, version 2.1.3
Filename, size File type Python version Upload date Hashes
Filename, size pre_request-2.1.3.tar.gz (16.3 kB) File type Source Python version None Upload date Hashes View

Supported by

Pingdom Pingdom Monitoring Google Google Object Storage and Download Analytics Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page