Skip to main content

A web framework built on Flask & SQLAlchemy. Somewhere North of Flask but South of Django.

Project description

https://coveralls.io/repos/level12/keg/badge.svg?branch=master https://codecov.io/github/level12/keg/coverage.svg?branch=master https://img.shields.io/pypi/dm/Keg.svg https://img.shields.io/pypi/v/Keg.svg https://img.shields.io/pypi/l/keg.svg https://img.shields.io/pypi/pyversions/keg.svg https://img.shields.io/pypi/status/Keg.svg

Keg is an opinionated but flexible web framework built on Flask and SQLAlchemy.

Keg’s Goal

The goal for this project is to encapsulate Flask best practices and libraries so devs can avoid boilerplate and work on the important stuff.

We will lean towards being opinionated on the big things (like SQLAlchemy as our ORM) while supporting hooks and customizations as much as possible.

Think North of Flask but South of Django.

Features

Coming (maybe not so) soon. :)

Installation

  • pip install keg

App Configuration

CLI Command

The command <myapp> develop config will give detailed information about the files and objects being used to configure an application.

Profile Prority

All configuration classes with the name DefaultProfile will be applied to the app’s config first.

Then, the configuration classes that match the “selected” profile will be applied on top of the app’s existing configuration. This makes the settings from the “selected” profile override any settings from the DefaultProfile.

Practically speaking, any configuration that applies to the entire app regardless of what context it is being used in will generally go in myapp.config in the DefaultProfile class.

Selecting a Configuration Profile

The “selected” profile is the name of the objects that the Keg configuration handling code will look for. It should be a string.

A Keg app considers the “selected” profile as follows:

  • If config_profile was passed into myapp.init() as an argument, use it as the selected profile. The --profile cli option uses this method to set the selected profile and therefore has the highest priority.

  • Look in the app’s environment namespace for “CONFIG_PROFILE”. If found, use it.

  • If running tests, use “TestProfile”. Whether or not the app is operating in this mode is controlled by the use of:

    • myapp.init(use_test_profile=True) which is used by MyApp.testing_prep()

    • looking in the app’s environment namespace for “USE_TEST_PROFILE” which is used by keg.testing.invoke_command()

  • Look in the app’s main config file (app.config) and all it’s other config files for the variable DEFAULT_PROFILE. If found, use the value from the file with highest priority.

Keg Development

To develop on keg, begin by running our tests:

git clone https://github.com/level12/keg keg-src
cd keg-src
cp cp keg_apps/db/user-config-tpl.py ~/.config/keg_apps.db/keg_apps.db-config.py
# edit the DB connection info in this file (you don't have to use vim):
vim ~/.config/keg_apps.db/keg_apps.db-config.py
tox

You can then examine tox.ini for insights into our development process. In particular, we:

  • use py.test for testing (and coverage analysis)

  • use flake8 for linting

  • store pip requirements files in requirements/

  • cache wheels in requirements/wheelhouse for faster & more reliable CI builds

Dependency Management

Adding a dependency involves:

  1. Adding the dependency to one of the requirements files in requirements/.

  2. Running wheelhouse build

Preview Readme

When updating the readme, use restview --long-description to preview changes.

Issues & Discussion

Please direct questions, comments, bugs, feature requests, etc. to: https://github.com/level12/keg/issues

Current Status

Very Alpha, expect changes.

Changelog

0.3.1 released 2013-03-17

  • Fixed 0.3.0 build where readme wouldn’t install correctly

  • Cleaned up repo which had a coverage report commited

  • Added a new build environment

0.3.0 released 2015-09-16

  • better pypi classifiers

  • use Wheelhouse for dependency management

  • Add tests for BaseView auto-assign feature.

  • Add an asset manager.

    • Templates can now use the assets_include tag in Jinja templates to automatically include the content of a file with the same base name but a ‘css’ or ‘js’ suffix. See keg_apps/templating/templates/assets_in_template.html for example.

    • Templates can now use the assets_content tag to include content with a specific suffix. See keg_apps/templating/templates/assets_content.html for example.

  • Adjust DB clearing so that prep_empty() is called after during db_clear() and not only db_init_with_clear().

  • Fix selection of configuration profile so that the ordering is consitent for app instances created by testing_prep() and invoke_command().

Backwards incompatibility notes:

  • In the unlikely event you were relying on keg.db:DatabaseManager.prep_empty() in a non-default way, you may have some adjustments to make.

  • myapp.config_profile has been removed. Use myapp.config.profile instead.

  • the signature of MyApp() and myapp.init() has changed.

development version: 2015-05-25

  • Remove Keg.testing_cleanup(): wasn’t really needed

  • Fix db init when SQLALCHEMY_BINDS config option not present but DB feature enabled

  • Adjust the way Jinja filters and globals are handled. Keg will now process .template_filters and .template_globals (both should be dicts) if defined on an app.

  • add signals and commands for database init and clearing

  • new Keg.visit_modules attribute & related functionality to have Keg load Python modules after the app has been setup.

BC changes required:

  • if you were using Keg.testing_cleanup() explicitly, remove it.

  • If using .jinja_filters on your app, rename to .template_filters

development version: 2015-05-23

Making changes to the way database interactions are handled.

  • Move keg.sqlalchemy to keg.db

  • keg.Keg’s sqlalchemy_* properties have been renamed, see db_* variables instead.

  • All database management is being delegated to an application specific instance of keg.db.DatabaseManager. The class used to manage the db is selected by keg.Keg.db_manager_cls so custom db management functionality for an app can be easily implemented by overriding that method on an app and specifying a different DB manager.

  • keg.db.DatabaseManager is multi-connection aware using the “bind” functionality adopted by Flask-SQLAlchemy.

  • Added keg_apps.db application and related tests.

  • Added keg.db.dialect_ops to manager RDBMS specific database interactions.

  • Move clear_db() functionality into keg.db.dialect_ops

  • Add concept of dialect options to Keg config handling (KEG_DB_DIALECT_OPTIONS). The PostgreSQL dialect handles the option postgresql.schemas to facilitate the testing setup of multiple schemas in a PostgreSQL database. See keg_apps.db.config for example usage.

BC changes required:

  • On your app, if you have sqlalchemy_enabled set, change it to db_enabled

  • If importing from keg.sqlalchemy change to keg.db.

Project details


Download files

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

Source Distribution

Keg-0.3.1.tar.gz (45.6 kB view details)

Uploaded Source

Built Distribution

Keg-0.3.1-py2.py3-none-any.whl (58.9 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file Keg-0.3.1.tar.gz.

File metadata

  • Download URL: Keg-0.3.1.tar.gz
  • Upload date:
  • Size: 45.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for Keg-0.3.1.tar.gz
Algorithm Hash digest
SHA256 7ec5214966c7170fa15d442965cdaa3104ab8313a32de94677c9af314be008c1
MD5 5b3e99152db3034c5a3940ccaed9d1ff
BLAKE2b-256 7391e4b834b6f39e34d833bc8260daa3237b3ced22b8deaa01fe4acbaa7a762e

See more details on using hashes here.

File details

Details for the file Keg-0.3.1-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for Keg-0.3.1-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 f8020f9df8b177ee0250cd29fffd07bc8935c78690ddf03173695de7d88a5ea5
MD5 68c74ad29af9fd41aab5097a4e00855f
BLAKE2b-256 79924189a0bafc22b0b5f394df475e541c49304f7ebafd4a5fb404072101c49b

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page