Flask, SQLAlchemy and Celery integration tool.
Project description
Under development. Visit https://github.com/mtth/flasker for the latest version.
A Flask webapp project manager with built in ORM’ed database using SQLAlchemy and Celery backend support.
What Flasker is!
A transparent integration of Flask, SQLAlchemy and Celery which lets you configure these individually according to your project needs via a single .cfg file (cf. Sample config file).
A very simple pattern to organize your project via the current_project proxy. No more complicated import schemes!
A command line tool from where you can create new projects, launch the Flask buit in Werkzeug server, start Celery workers and the Flower tool, and run a shell in the current project context (inspired by Flask-Script).
OAuth (via Google OAuth 2) and a bunch of utilities via the util module (for convenient logging, efficient API responses, property caching, and more).
What Flasker isn’t?
A simplified version of Flask, SQLAlchemy and Celery. Flasker handles the setup but purposefully leaves you free to interact with the raw Flask, Celery and database objects. Some knowledge of these frameworks is therefore required.
Quickstart
Installation:
$ pip install flasker
To create a new project:
$ flasker new basic
This will create a project configuration file default.cfg in the current directory (cf Config file API for more info on the available configurations through the new command) and a basic bootstrap themed app in an app folder (this can be turned off with the -a flag). You should already be able to run your app by running flasker server.
Editing your project:
The flasker module exposes a current_project proxy which grants you access to the Flask app, the Celery application and the SQLAlchemy database object respectively through its attributes app, celery, db. Inside each project module (defined in the MODULES option of the configuration file) you can then do, for example:
from flasker import current_project app = current_project.app # do stuff
Next steps:
$ flasker -h
This will list all available commands for that project:
Running the app server
Starting a worker for the Celery backend
Running the flower worker management app
Starting a shell in the current project context (useful for debugging)
Extra help is available for each command by typing:
$ flasker <insert_command> -h
Sample config file
Here is a minimalistic project configuration file:
[PROJECT] NAME: My Project MODULES: app.views,app.tasks DB_URL: sqlite:///db/db.sqlite [APP] DEBUG: True TESTING: True [CELERY] BROKER_URL: redis:// CELERYD_CONCURRENCY: 2
Config file API
The following keys are valid in the PROJECT section:
NAME, name of the project
MODULES, modules to import on project load (comma separated list)
DB_URL, URL of database (defaults to the in memory sqlite://)
APP_STATIC_FOLDER, path to folder where the Flask static files lie (defaults to app/static)
APP_TEMPLATE_FOLDER, path to folder where the Flask template files lie (defaults to app/templates)
STATIC_URL, optional URL to serve static files
OAUTH_CLIENT, cf. Using OAuth
AUTHORIZED_EMAILS, df. Using OAuth
Note that all paths are relative to the configuration file.
The following pregenerated configurations are available through the flasker new command:
basic, minimal configuration
celery_dq, sets up celery direct queueing
Using OAuth
To restrict access to your webapp to some users, you will need to enter your Google Client ID (from the Google API console) in the OAUTH_CLIENT configuration option and also enter authorized emails in the AUTHORIZED_EMAILS option. Then, use the login_required decorator from Flask-Login to protect your views (cf. the docs for examples and a tutorial). The callback URL you should authorize is http://your.domain:port/oauth2callback.
Utilities
TODO
Other stuff
Setting up Redis:
$ curl -O http://download.redis.io/redis-stable.tar.gz $ tar xvzf redis-stable.tar.gz $ cd redis-stable $ make $ make test $ sudo cp redis-server /usr/local/bin/ $ sudo cp redis-cli /usr/local/bin/
To daemonize redis on a mac:
Create a plist file:
$ sudo vim /Library/LaunchDaemons/io.redis.redis-server.plist
Copy the following contents:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>io.redis.redis-server</string> <key>ProgramArguments</key> <array> <string>/usr/local/bin/redis-server</string> </array> <key>RunAtLoad</key> <true/> </dict> </plist>
Running the server on Apache:
Create a file called run.wsgi in the main directory with the following contents:
# Virtualenv activation from os.path import abspath, dirname, join activate_this = abspath(join(dirname(__file__), 'venv/bin/activate_this.py')) execfile(activate_this, dict(__file__=activate_this)) # Since the application isn't on the path import sys sys.path.insert(0, abspath(join(dirname(__file__))) # App factory from app import make_app application = make_app()
Then add a virtualhost in your Apache virtual host configuration file (often found at /etc/apache2/extra/httpd-vhosts.conf) with the following configuration:
<VirtualHost *:80> ServerName [server_name] WSGIDaemonProcess [process_name] user=[process_user] threads=5 WSGIScriptAlias / [path_to_wsgi_file] <Directory [path_to_root_directory]> WSGIProcessGroup [process_name] WSGIApplicationGroup %{GLOBAL} Order deny,allow Allow from all </Directory> ErrorLog "[path_to_error_log]" CustomLog "[path_to_access_log]" combined </VirtualHost>
Sources
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.