Skip to main content

Coaster for Flask

Project description

Build status Coverage status

Coaster contains functions and db models for recurring patterns in Flask apps. Documentation at

### Run tests

Create a test Coaster DB:

$ createuser whoami $ createdb -O whoami coaster_test

Testing requires additional dependencies. Install them with:

$ pip install -r test_requirements.txt

To run a single test:

$ nosetests tests.<test_filename> # Example: nosetests test.test_render_with

To run all tests in one go:

$ nosetests


  • Base(Scoped)?(Id)?NameMixin now disallows blank names by default. Bumped version number since this is a non-breaking incompatible change.

  • JsonDict now uses JSONB on PostgreSQL 9.4.

  • New CoordinatesMixin adds latitude and longitude columns.

  • Rudimentary NLP methods.

  • LabeledEnum now has keys() and values() methods as well.

  • Move the query class to IdMixin and TimestampMixin as they are used independently of BaseMixin.

  • LabeledEnum now takes an __order__ specification.

  • New word_count util returns word count for HTML documents.

  • New for_tsquery formats text queries to PostgreSQL to_tsquery parameters.

  • New get and upsert methods in Base(Scoped)NameMixin.

  • render_with no longer enables JSON handler by default; now gracefully handles / requests.

  •’s shell now allows additional context to be made available in locals().

  • coaster.db now provides a custom SQLAlchemy session with additional helper methods, starting with one: add_and_commit, which rolls back if the commit fails.

  • Removed one_or_none in favor of SQLAlchemy’s implementation of the same in 1.0.9

  • New is_url_for decorator in UrlForMixin.


  • Initial work on Fluentd logging.

  • New util: base_domain_matches compares if two domains have the same base domain.

  • utils.make_name now returns ASCII slugs instead of Unicode slugs.

  • New: domain_namespace_match function.

  • coaster.gfm.markdown now supports optional HTML markup.

  • Deprecated sqlalchemy.timestamp_columns, introducing make_timestamp_columns.

  • sorted_timezones now includes both country name and timezone name.

  • Base query now has a notempty() method that is more efficient than bool(count()).

  • New util: deobfuscate_email deobfuscates common email obfuscation patterns.


  • NameTitle namedtuple and support in LabeledEnum for (value, name, title).

  • Provide UglifyJS minifier to webassets via the UglipyJS wrapper.

  • BaseScopedNameMixin’s make_title now uses short_title as source.


  • views.get_next_url now considers subdomains as non-external.

  • sqlalchemy.BaseMixin now provides a new query class with one_or_none

  • Coaster now requires all dependencies used by submodules. They are no longer optional.

  • LabeledEnums now have a .get method to emulate dictionaries.


  • Moved utility functions into coaster.utils.

  • Bugfix: make get_email_domain somewhat more reliable.

  • Switched to using coaster.db in tests.

  • New: MarkdownColumn composite column for Markdown content.

  • Changed: JsonDict column will use PostgreSQL’s native JSON type if the server is PostgreSQL >= 9.2.

  • TimestampMixin now uses datetime.utcnow instead of because the now() function in PostgreSQL returns local time with timezone, not UTC time, and discards the timezone component if the column doesn’t store them. This made timestamps local, not in UTC.

  • Database tests are now run against both SQLite3 and PostgreSQL.

  • Bugfix: PermissionMixin was mutating inherited permissions.

  • Bugfix: render_with no longer attempts to render pre-rendered responses.

  • utils.make_name now takes caller-specified counter numbers.

  • sqlalchemy.BaseNameMixin and BaseScopedNameMixin.make_name now take a reserved names list.

  • New: utils.nullint, nullstr and nullunicode for returning int(v), str(v) and unicode(v) if v isn’t false.


  • short_title method in BaseScopedNameMixin.

  • assets.require now raises AssetNotFound on missing assets.

  • New: coaster.db.db is an instance of Flask-SQLAlchemy.


  • Bugfix: Support single-char usernames.

  • New feature: Labeled enumerations.

  • Enhancement: load_models allows choice of permissions and takes additional permissions.

  • Rewrote requestargs view decorator for efficiency and ease of use.

  • New render_with view decorator.

  • New gfm module for GitHub Flavoured Markdown.

  • load_models now supports “redirect” models.

  • Logging now looks for MAIL_DEFAULT_SENDER before DEFAULT_MAIL_SENDER.

  • Compatibility with Flask 0.10 for SandboxedFlask.


  • Bugfix: PermissionMixin.permissions() now checks if parent is not None.


  • New sorted_timezones function.


  • New module for asset management, with testcases and documentation.

  • coaster.logging.configure is now init_app in keeping with convention.


  • Updated documentation.

  • New SQLAlchemy column types and helpers.

  • Use SQL expressions to set url_id in scoped id classes.


  • Don’t use declared_attr for the id, created_at and updated_at columns.

  • Rename newid to buid but retain old name for compatibility.

  • New requestargs view wrapper to make working with request.args easier.


  • New SandboxedFlask in that uses Jinja’s SandboxedEnvironment.


  • load_models now caches data to flask.g

  • SQLAlchemy models now use declared_attr for all columns to work around a column duplication bug with joined table inheritance in SQLAlchemy < 0.8.

  • Misc fixes.


  • get_next_url now takes a default parameter. Pass default=None to return None if no suitable next URL can be found

  • get_next_url no longer looks in the session by default. Pass session=True to look in the session. This was added since popping next from session modifies the session.

  • load_models accepts ‘g.<name>’ notation for parameters to indicate that the parameter should be available as g.<name>. The view function will get called with just <name> as usual.

  • If the view requires permissions, load_models caches available permissions as g.permissions.


  • coaster.views.get_next_url now looks in the session for the next URL.


  • New function moves away from passing configuration status in environment variables.


  • SQLAlchemy models now have a permissions method that load_models looks up.


  • Added logging module


  • First version

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

coaster-0.5.0.tar.gz (833.1 kB view hashes)

Uploaded Source

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