Skip to main content

Flasker

Project description

Under development.

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!
    • OAuth (via Google OAuth 2) and a bunch of utilities via the util module (for convenient logging, efficient API responses, property caching, and more).
    • 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).
  • 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 -a dev
    

    This will create a default project configuration file project.cfg in the current directory (the -a flag triggers the creation of a basic boostrap app).

  • 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 with the app
    
  • 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:

[DEFAULT]
NAME: My Project
SHORTNAME: my_project
CONFIG_TYPE: dev
[PROJECT]
MODULES: app.views,app.tasks
DB_URL: sqlite:///db/db.sqlite
[APP]
DEBUG: True
TESTING: True
[CELERY]
BROKER_URL: redis://localhost:6379/0
CELERYD_CONCURRENCY: 2

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>
    

Project details


Release history Release notifications

History Node

0.1.45

History Node

0.1.44

History Node

0.1.43

History Node

0.1.42

History Node

0.1.41

History Node

0.1.40

History Node

0.1.39

History Node

0.1.38

History Node

0.1.37

History Node

0.1.36

History Node

0.1.35

History Node

0.1.34

History Node

0.1.33

History Node

0.1.32

History Node

0.1.31

History Node

0.1.30

History Node

0.1.29

History Node

0.1.28

History Node

0.1.27

History Node

0.1.26

History Node

0.1.25

History Node

0.1.24

History Node

0.1.23

History Node

0.1.22

History Node

0.1.21

History Node

0.1.20

History Node

0.1.19

History Node

0.1.18

History Node

0.1.17

History Node

0.1.16

History Node

0.1.15

History Node

0.1.14

This version
History Node

0.1.13

History Node

0.1.12

History Node

0.1.11

History Node

0.1.10

History Node

0.1.9

History Node

0.1.8

History Node

0.1.7

History Node

0.1.5

History Node

0.1.4

History Node

0.1.3

History Node

0.1.2

History Node

0.1.1

History Node

0.1.-

History Node

0.1.0

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Filename, size & hash SHA256 hash help File type Python version Upload date
flasker-0.1.13.tar.gz (21.8 kB) Copy SHA256 hash SHA256 Source None Jan 26, 2013

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging CloudAMQP CloudAMQP RabbitMQ AWS AWS Cloud computing Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page