Update copyright notes for 2021
Refer to license as "Revised BSD" to clarify that it is not customized
The common name "Modified BSD License" for the 3-clause BSD license can
be misleading as it might suggest it is a BSD license customized by the
To avoid this, refer to the license under one of its other names
Move snippet blueprint into `site` subpackage
Update copyright notes for 2020
Generate and match snippet routes dynamically
The previous behavior is to register snippet routes on application
start. This has some performance advantages. But also disadvantages:
- Changes to mountpoints only come into effect after the application is
- These routes are global and do not allow multiple sites' routes to
exist without affecting each other.
This change introduces a catch-all route for snippets and matches the
URL path against the current site's mountpoints (retrieved from the
database for every request). URL generation now also requires
mountpoints to be loaded from the database, but only once per request.
- Independent site-specifc mountpoints. This paves the way to serving
multiple sites from a single application instance.
- Changes to snippet routes become active right away, without the need
to restart the application.
Move `url_for_snippet` implementation to `byceps.blueprints.snippet.templating`
This allows to use it in that module without depending on the view module.
Introduce global template function `url_for_snippet`
Use it to ease the transition to a multisite-capable snippet URL rule system.
Move blueprint view to export snippet as JSON to API, add tests
Format calls according to Black
Format imports according to Black
Look up mounted snippet via endpoint suffix (and site ID) instead of snippet name
Clarify names and docstrings
Move snippets from party scope to site scope
Pass scope instead of party ID to snippet service
Update copyright notes for 2019
Update copyright notes for 2018
Provide party ID on `g` thread-local
Don't raise exception if current snippet version isn't found for name
Add endpoint to return the current party's snippets as JSON to be included elsewhere
Only pass party ID instead of entity