A helper for abstracting boilerplate Flask initialization code
Project description
Busie Flask Helper
A package to help with common initialization code across Busie Flask projects
Helpful for use with the application factory pattern. Allows for modularization of initialization code, such that factories are not cluttered with boilerplate initialization
Installation
pip install busie-flask-helper
Usage
# in app.py, or wherever application initialization lives
from busie_flask import FlaskHelper
helper = FlaskHelper('abs/path/to/project/')
db = helper.db
auth = helper.auth
cache = helper.cache
# Other Initialization Code omitted
def create_app():
app = Flask(__name__)
# Other App Factory initialization omitted
# this invocation initializes all of the helper objects with the application
# this includes migration commands, models, views, auth, cache client, orm
helper.init_app(app, 'relative/path/to/models', '/relative/path/to/views')
return app
# in some module, maybe an API View
from flask import request, render_template
from src.app import auth, app
@app.route('/foo')
@auth.requires_web_auth
def foo():
return render_template('foo.html')
class SomeView(MethodView):
decorators = [auth.require_api_auth]
def get(self):
if auth.requires_permission('SomeView:bar'):
return 'ok', 200
raise AuthError({'code': 'some_error', 'description': 'something went wrong'}, 403)
API
FlaskHelper
Public Properties
db
<[SQLAlchemy] (https://flask-sqlalchemy.palletsprojects.com/en/2.x/)>auth
<[AuthHelper] (#authhelper)>cache
<[CacheClient] (#cacheclient)>
Public Methods
FlaskHelper(root_dir, app=None, models_dir=None, views_dir=None)
- param
root_dir
: The root directory of the project, best practice to pass an abspath here. if your application lives in src/app then your root dir should be src/ - See
init_app
method documentation for specifics on the other params
- param
init_app(self, app, models_dir, views_dir)
- param
app
: A Flask application instance - param
models_dir
: Relative path to the models directory, with respect to the root_dir that the helper was initialized with - param
views_dir
: same asmodels_dir
, but for views
- param
AuthHelper
This is an Auth0 Integration. It comes with helpful decorators for protecting both API and Web App views. It also automatically adds /login
, /callback
, and /logout
routes to your application for Auth0 Authorization Code Flow Authentication. Note that this feature cannot be disabled at this time, but this ability will be added in a future release. In web applications and API's, merely authenticating should never be enough to gain access to a protected resource.
Public Properties
None
Public Methods
AuthHelper(app=None)
: Constructorinit_app(self, app)
: Initialize the AuthHelper with a Flask application- param
app
: A Flask application instance. app.config must haveAUTH0_AUDIENCE
AUTH0_DOMAIN
andAUTH0_ALGORITHMS
- param
requires_api_auth(self, f)
: A decorator for views that require the auth code with pkce flow.requires_web_auth(self, f)
: A decorator for views that require the auth code flow (no pkce)get_rsa_key_from_unverified_token(self, token)
: Determines the RSA key to use from the token'skid
- param
token
: A json web token with appropriate headers - return:
rsa_key (dict)
orNone
- param
handle_rsa_decode(self, rsa_key, token)
: decodes the token using rsa- param
rsa_key
: dict representation of an RSA key - param
token
: a json web token with necessary claims
- param
requires_scope(self, required_scope)
: determine if the auth token has the provided required scope- param
required_scope
: string, the desired scope for the resource - return:
bool
- param
requires_permission(self, required_permission)
: determine if the auth token has the provided required permission- param
required_permission
: string, the desired permission for the resource - return:
bool
- param
static -> get_token_auth_header()
: gets the auth header from the request context and formats it properly- return:
str
- return:
CacheClient
Public Properties
redis
: The redis instance. Allows for direct interation with the python Redis API
Public Methods
CacheClient(app=None)
: Constructorinit_app(self, app)
: Initialize the redis client with application.- param
app
: A Flask application instance. app.config must haveREDIS_HOST
REDIS_PORT
andREDIS_DB
. NOTEREDIS_PASSWORD
is also used, but this method will not throw without it
- param
get
: Alias for redis.getset
: Alias for redis.set
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for busie_flask_helper-2.2.2-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ce36643d8d75abaad70194fc0133805174faaf5b18ec6659769e611668375da1 |
|
MD5 | ef6251cb786f514cb1b110caa17da6ca |
|
BLAKE2b-256 | 813003d44f1fe931fc9977fb6ec2158246f9cea0bd100469dbc4ef32e176decd |