2024-08-16 15:09:07 +01:00
<!DOCTYPE html>
< html lang = "en" >
< head >
< meta charset = "UTF-8" >
< title > Pass_function_check - Quart_imp.security | Quart-Imp< / title >
< link rel = "stylesheet" href = "static/water.css" >
< link rel = "stylesheet" href = "static/pygments.emacs-dull.css" >
< link rel = "apple-touch-icon" sizes = "180x180" href = "static/apple-touch-icon.png" >
< link rel = "icon" type = "image/png" sizes = "32x32" href = "static/favicon-32x32.png" >
< link rel = "icon" type = "image/png" sizes = "16x16" href = "static/favicon-16x16.png" >
< link rel = "manifest" href = "static/site.webmanifest" >
< link rel = "mask-icon" href = "static/safari-pinned-tab.svg" color = "#5bbad5" >
< meta name = "msapplication-TileColor" content = "#da532c" >
< meta name = "theme-color" content = "#ffffff" >
< / head >
< body >
< aside >
2024-08-16 15:36:56 +01:00
< img src = "static/quart-Imp-Medium.png" alt = "Quart-Imp Logo" style = "margin-top: 20px; width: 50%" >
2024-08-16 15:09:07 +01:00
< h1 > Quart-Imp< / h1 >
< div > < small > Version: 1.0.x< / small > < / div >
< div > < small > Last Updated:< / small > < / div >
< div > < small > Fri, 16 Aug 2024< / small > < / div >
< h2 > Menu< / h2 >
< ul >
< li > < a href = "index.html" > < strong > Index< / strong > < / a > < / li >
< / ul >
< ul >
< li > < strong > CLI Commands< / strong > < / li >
< ul >
< li > < a href = "cli_commands-quart-imp_init.html" > quart-imp init< / a > < / li >
< li > < a href = "cli_commands-quart-imp_blueprint.html" > quart-imp blueprint< / a > < / li >
< / ul >
< li > < strong > Imp< / strong > < / li >
< ul >
< li > < a href = "imp-introduction.html" > Introduction< / a > < / li >
< li > < a href = "imp-init_app-init.html" > init_app, __init__< / a > < / li >
< li > < a href = "imp-init_session.html" > init_session< / a > < / li >
< li > < a href = "imp-import_app_resources.html" > import_app_resources< / a > < / li >
< li > < a href = "imp-import_blueprint.html" > import_blueprint< / a > < / li >
< li > < a href = "imp-import_blueprints.html" > import_blueprints< / a > < / li >
< / ul >
< li > < strong > ImpBlueprint< / strong > < / li >
< ul >
< li > < a href = "impblueprint-introduction.html" > Introduction< / a > < / li >
< li > < a href = "impblueprint-init.html" > __init__< / a > < / li >
< li > < a href = "impblueprint-import_resources.html" > import_resources< / a > < / li >
< li > < a href = "impblueprint-import_nested_blueprint.html" > import_nested_blueprint< / a > < / li >
< li > < a href = "impblueprint-import_nested_blueprints.html" > import_nested_blueprints< / a > < / li >
< li > < a href = "impblueprint-tmpl.html" > tmpl< / a > < / li >
< / ul >
< li > < strong > quart_imp.config< / strong > < / li >
< ul >
< li > < a href = "quart_imp_config-quartconfig.html" > QuartConfig< / a > < / li >
< li > < a href = "quart_imp_config-impconfig.html" > ImpConfig< / a > < / li >
< li > < a href = "quart_imp_config-impblueprintconfig.html" > ImpBlueprintConfig< / a > < / li >
< / ul >
< li > < strong > quart_imp.security< / strong > < / li >
< ul >
< li > < a href = "quart_imp_security-login_check.html" > login_check< / a > < / li >
< li > < a href = "quart_imp_security-permission_check.html" > permission_check< / a > < / li >
< li > < a href = "quart_imp_security-pass_function_check.html" > pass_function_check< / a > < / li >
< li > < a href = "quart_imp_security-api_login_check.html" > api_login_check< / a > < / li >
< li > < a href = "quart_imp_security-include_csrf.html" > include_csrf< / a > < / li >
< / ul >
< li > < strong > quart_imp.auth< / strong > < / li >
< ul >
< li > < a href = "quart_imp_auth-encrypt_password.html" > encrypt_password< / a > < / li >
< li > < a href = "quart_imp_auth-authenticate_password.html" > authenticate_password< / a > < / li >
< li > < a href = "quart_imp_auth-generate_password.html" > generate_password< / a > < / li >
< li > < a href = "quart_imp_auth-generate_salt.html" > generate_salt< / a > < / li >
< li > < a href = "quart_imp_auth-generate_csrf_token.html" > generate_csrf_token< / a > < / li >
< li > < a href = "quart_imp_auth-generate_private_key.html" > generate_private_key< / a > < / li >
< li > < a href = "quart_imp_auth-generate_email_validator.html" > generate_email_validator< / a > < / li >
< li > < a href = "quart_imp_auth-generate_numeric_validator.html" > generate_numeric_validator< / a > < / li >
< li > < a href = "quart_imp_auth-generate_alphanumeric_validator.html" > generate_alphanumeric_validator< / a > < / li >
< li > < a href = "quart_imp_auth-is_email_address_valid.html" > is_email_address_valid< / a > < / li >
< li > < a href = "quart_imp_auth-is_username_valid.html" > is_username_valid< / a > < / li >
< / ul >
< / ul >
< div style = "padding-top: 5px; margin-bottom: 20px;" > < small > Hosted on GitHub Pages.< / small > < / div >
< / aside >
< section >
< h1 style = "font-size: 2.6rem; margin: 0;" > pass_function_check - quart_imp.security< / h1 >
< div class = "highlight" > < pre > < span > < / span > < span class = "kn" > from< / span > < span class = "nn" > quart_imp.security< / span > < span class = "kn" > import< / span > < span class = "n" > pass_function_check< / span >
< / pre > < / div >
< div class = "highlight" > < pre > < span > < / span > < span class = "k" > def< / span > < span class = "nf" > pass_function_check< / span > < span class = "p" > (< / span >
< span class = "n" > function< / span > < span class = "p" > :< / span > < span class = "n" > t< / span > < span class = "o" > .< / span > < span class = "n" > Callable< / span > < span class = "p" > ,< / span >
< span class = "n" > predefined_args< / span > < span class = "p" > :< / span > < span class = "n" > t< / span > < span class = "o" > .< / span > < span class = "n" > Optional< / span > < span class = "p" > [< / span > < span class = "n" > t< / span > < span class = "o" > .< / span > < span class = "n" > Dict< / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span >
< span class = "n" > fail_endpoint< / span > < span class = "p" > :< / span > < span class = "n" > t< / span > < span class = "o" > .< / span > < span class = "n" > Optional< / span > < span class = "p" > [< / span > < span class = "nb" > str< / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span >
< span class = "n" > pass_endpoint< / span > < span class = "p" > :< / span > < span class = "n" > t< / span > < span class = "o" > .< / span > < span class = "n" > Optional< / span > < span class = "p" > [< / span > < span class = "nb" > str< / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span >
< span class = "n" > endpoint_kwargs< / span > < span class = "p" > :< / span > < span class = "n" > t< / span > < span class = "o" > .< / span > < span class = "n" > Optional< / span > < span class = "p" > [< / span > < span class = "n" > t< / span > < span class = "o" > .< / span > < span class = "n" > Dict< / span > < span class = "p" > [< / span > < span class = "nb" > str< / span > < span class = "p" > ,< / span > < span class = "n" > t< / span > < span class = "o" > .< / span > < span class = "n" > Union< / span > < span class = "p" > [< / span > < span class = "nb" > str< / span > < span class = "p" > ,< / span > < span class = "nb" > int< / span > < span class = "p" > ]]]< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span >
< span class = "n" > message< / span > < span class = "p" > :< / span > < span class = "n" > t< / span > < span class = "o" > .< / span > < span class = "n" > Optional< / span > < span class = "p" > [< / span > < span class = "nb" > str< / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span >
< span class = "n" > message_category< / span > < span class = "p" > :< / span > < span class = "nb" > str< / span > < span class = "o" > =< / span > < span class = "s2" > " message" < / span > < span class = "p" > ,< / span >
< span class = "n" > fail_on_missing_kwargs< / span > < span class = "p" > :< / span > < span class = "nb" > bool< / span > < span class = "o" > =< / span > < span class = "kc" > False< / span > < span class = "p" > ,< / span >
< span class = "n" > with_app_context< / span > < span class = "p" > :< / span > < span class = "nb" > bool< / span > < span class = "o" > =< / span > < span class = "kc" > False< / span > < span class = "p" > ,< / span >
< span class = "p" > )< / span >
< / pre > < / div >
< p > < strong > NOTE: This was added mostly as an experimental feature, but ended up being useful in some cases.< / strong > < / p >
< p > A decorator that takes the result of a function and checks if it is True or False.< / p >
< p > URL variables from < code > @route< / code > will be read by this decorator.
To use URL variables in your passed in function,
make sure your functions argument(s) name(s) match the name(s) of the URL variable(s).< / p >
< p > < strong > Example:< / strong > < / p >
< div class = "highlight" > < pre > < span > < / span > < span class = "k" > def< / span > < span class = "nf" > check_if_number< / span > < span class = "p" > (< / span > < span class = "n" > value< / span > < span class = "p" > ):< / span >
< span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > value< / span > < span class = "p" > ,< / span > < span class = "nb" > int< / span > < span class = "p" > ):< / span >
< span class = "k" > return< / span > < span class = "kc" > True< / span >
< span class = "k" > return< / span > < span class = "kc" > False< / span >
< span class = "nd" > @bp< / span > < span class = "o" > .< / span > < span class = "n" > route< / span > < span class = "p" > (< / span > < span class = "s2" > " /admin-page/< int:value> " < / span > < span class = "p" > ,< / span > < span class = "n" > methods< / span > < span class = "o" > =< / span > < span class = "p" > [< / span > < span class = "s2" > " GET" < / span > < span class = "p" > ])< / span >
< span class = "nd" > @login_check< / span > < span class = "p" > (< / span > < span class = "s1" > ' logged_in' < / span > < span class = "p" > ,< / span > < span class = "kc" > True< / span > < span class = "p" > ,< / span > < span class = "s1" > ' blueprint.login_page' < / span > < span class = "p" > )< / span > < span class = "c1" > # can be mixed with login_check< / span >
< span class = "nd" > @pass_function_check< / span > < span class = "p" > (< / span >
< span class = "n" > check_if_number< / span > < span class = "p" > ,< / span >
< span class = "n" > predefined_args< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span >
< span class = "n" > fail_endpoint< / span > < span class = "o" > =< / span > < span class = "s1" > ' www.index' < / span > < span class = "p" > ,< / span >
< span class = "n" > message< / span > < span class = "o" > =< / span > < span class = "s2" > " Failed message" < / span >
< span class = "p" > )< / span >
< span class = "k" > async< / span > < span class = "k" > def< / span > < span class = "nf" > admin_page< / span > < span class = "p" > ():< / span >
< span class = "o" > ...< / span >
< span class = "nd" > @bp< / span > < span class = "o" > .< / span > < span class = "n" > route< / span > < span class = "p" > (< / span > < span class = "s2" > " /admin-page/< int:value> " < / span > < span class = "p" > ,< / span > < span class = "n" > methods< / span > < span class = "o" > =< / span > < span class = "p" > [< / span > < span class = "s2" > " GET" < / span > < span class = "p" > ])< / span >
< span class = "nd" > @login_check< / span > < span class = "p" > (< / span > < span class = "s1" > ' logged_in' < / span > < span class = "p" > ,< / span > < span class = "kc" > True< / span > < span class = "p" > ,< / span > < span class = "s1" > ' blueprint.login_page' < / span > < span class = "p" > )< / span > < span class = "c1" > # can be mixed with login_check< / span >
< span class = "nd" > @pass_function_check< / span > < span class = "p" > (< / span >
< span class = "n" > check_if_number< / span > < span class = "p" > ,< / span >
< span class = "n" > predefined_args< / span > < span class = "o" > =< / span > < span class = "p" > {< / span > < span class = "s1" > ' value' < / span > < span class = "p" > :< / span > < span class = "mi" > 10< / span > < span class = "p" > },< / span >
< span class = "n" > fail_endpoint< / span > < span class = "o" > =< / span > < span class = "s1" > ' www.index' < / span > < span class = "p" > ,< / span >
< span class = "n" > message< / span > < span class = "o" > =< / span > < span class = "s2" > " Failed message" < / span >
< span class = "p" > )< / span >
< span class = "k" > async< / span > < span class = "k" > def< / span > < span class = "nf" > admin_page_overwrite< / span > < span class = "p" > ():< / span >
< span class = "o" > ...< / span >
< / pre > < / div >
< p > < strong > Advanced use case:< / strong > < / p >
< p > Here's an example of accessing quart.session from within the passed in function. including the
< code > with_app_context< / code > parameter, the function will be called with < code > app_context()< / code > .< / p >
< div class = "highlight" > < pre > < span > < / span > < span class = "kn" > from< / span > < span class = "nn" > quart< / span > < span class = "kn" > import< / span > < span class = "n" > current_app< / span >
< span class = "kn" > from< / span > < span class = "nn" > quart< / span > < span class = "kn" > import< / span > < span class = "n" > session< / span >
< span class = "o" > ...< / span >
< span class = "k" > def< / span > < span class = "nf" > check_if_number< / span > < span class = "p" > (< / span > < span class = "n" > number< / span > < span class = "o" > =< / span > < span class = "mi" > 1< / span > < span class = "p" > ,< / span > < span class = "n" > session_< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ):< / span >
< span class = "k" > if< / span > < span class = "n" > session_< / span > < span class = "p" > :< / span >
< span class = "nb" > print< / span > < span class = "p" > (< / span > < span class = "n" > session_< / span > < span class = "p" > )< / span >
< span class = "k" > try< / span > < span class = "p" > :< / span >
< span class = "nb" > int< / span > < span class = "p" > (< / span > < span class = "n" > number< / span > < span class = "p" > )< / span >
< span class = "k" > return< / span > < span class = "kc" > True< / span >
< span class = "k" > except< / span > < span class = "ne" > ValueError< / span > < span class = "p" > :< / span >
< span class = "k" > return< / span > < span class = "kc" > False< / span >
< span class = "nd" > @bp< / span > < span class = "o" > .< / span > < span class = "n" > route< / span > < span class = "p" > (< / span > < span class = "s2" > " /pass-func-check-with-url-var/< number> " < / span > < span class = "p" > ,< / span > < span class = "n" > methods< / span > < span class = "o" > =< / span > < span class = "p" > [< / span > < span class = "s2" > " GET" < / span > < span class = "p" > ])< / span >
< span class = "nd" > @pass_function_check< / span > < span class = "p" > (< / span >
< span class = "n" > check_if_number< / span > < span class = "p" > ,< / span >
< span class = "n" > predefined_args< / span > < span class = "o" > =< / span > < span class = "p" > {< / span > < span class = "s1" > ' number' < / span > < span class = "p" > :< / span > < span class = "mi" > 10< / span > < span class = "p" > ,< / span > < span class = "s1" > ' session_' < / span > < span class = "p" > :< / span > < span class = "n" > session< / span > < span class = "p" > },< / span >
< span class = "n" > fail_endpoint< / span > < span class = "o" > =< / span > < span class = "s2" > " www.index" < / span > < span class = "p" > ,< / span >
< span class = "n" > with_app_context< / span > < span class = "o" > =< / span > < span class = "kc" > True< / span >
< span class = "p" > )< / span >
< span class = "k" > async< / span > < span class = "k" > def< / span > < span class = "nf" > admin_page_overwrite_with_session< / span > < span class = "p" > ():< / span >
< span class = "o" > ...< / span >
< / pre > < / div >
< p > If you pass in a predefined arg that has the same key name as a session variable that exists, the value
of that predefined arg will be replaced with the session variable value.< / p >
< div class = "highlight" > < pre > < span > < / span > < span class = "n" > session< / span > < span class = "p" > [< / span > < span class = "s1" > ' car' < / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "s1" > ' Toyota' < / span >
< span class = "o" > ...< / span >
< span class = "k" > def< / span > < span class = "nf" > check_function< / span > < span class = "p" > (< / span > < span class = "n" > car< / span > < span class = "p" > ):< / span >
< span class = "k" > if< / span > < span class = "n" > car< / span > < span class = "o" > ==< / span > < span class = "s1" > ' Toyota' < / span > < span class = "p" > :< / span >
< span class = "k" > return< / span > < span class = "kc" > True< / span >
< span class = "k" > return< / span > < span class = "kc" > False< / span >
< span class = "o" > ...< / span >
< span class = "nd" > @bp< / span > < span class = "o" > .< / span > < span class = "n" > route< / span > < span class = "p" > (< / span > < span class = "s2" > " /pass-func-check-with-url-var/< number> " < / span > < span class = "p" > ,< / span > < span class = "n" > methods< / span > < span class = "o" > =< / span > < span class = "p" > [< / span > < span class = "s2" > " GET" < / span > < span class = "p" > ])< / span >
< span class = "nd" > @pass_function_check< / span > < span class = "p" > (< / span >
< span class = "n" > check_function< / span > < span class = "p" > ,< / span >
< span class = "n" > predefined_args< / span > < span class = "o" > =< / span > < span class = "p" > {< / span > < span class = "s1" > ' car' < / span > < span class = "p" > :< / span > < span class = "n" > session< / span > < span class = "p" > },< / span >
< span class = "o" > ...< / span >
< / pre > < / div >
< p > This will pass, as pass_function_check will replace the value of the predefined arg 'car' with the value
of the session variable 'car'.< / p >
< / section >
< / body >
< / html >