- 🔥OAuth🔥 support with the new OAuth Bundle (many thanks to @chriamue!)
- 🔥GraphQL🔥 support with the new Graphene Bundle
- add support for specifying parameters to inject into classes as class attributes
- when using
unchained.inject()
on a class, or subclassing a class that supports automatic dependency injection, all non-dunderscore methods now support having dependencies injected - the
include
function used inroutes.py
now supports specifying the url prefix as the first argument - support distributing and loading database fixture files with/from bundles
- implement proper support for
ModelForm
(it now adds fields for columns by default)
- add a way for bundle configs to get access to the current app-under-construction
- make options in
app.config
accessible as attributes, egapp.config.SECRET_KEY
is now the same asapp.config['SECRET_KEY']
- apply any settings from the app bundle config not already present in
app.config
as defaults before loading bundles
- improve documentation of how Flask Unchained works
- update to py-meta-utils 0.7.4 and sqlalchemy-unchained 0.7.0
- update to marshmallow 2.16
- update to marshmallow-sqlalchemy 0.15
- move database fixture loading code into the
py_yaml_fixtures
package (which is now a bundle as of v0.4.0) - consolidate
unchained.get_extension_local_proxy
andunchained.get_service_local_proxy
into a single function,unchained.get_local_proxy
- rename
AppConfig
toAppBundleConfig
- rename the
SQLAlchemy
extension class toSQLAlchemyUnchained
- rename
flask_unchained.bundles.sqlalchemy.model_form
toflask_unchained.bundles.sqlalchemy.forms
- rename the Graphene Bundle's
QueryObjectType
toQueriesObjectType
andMutationObjectType
toMutationsObjectType
- rename the Security Bundle's
SecurityUtilsService.verify_and_update_password
method toverify_password
- (internal) descriptors, metaclasses, meta options, and meta option factories are now protected
- (internal) rename the
flask_unchained.app_config
module toflask_unchained.config
- (internal) remove the
Bundle.root_folder
descriptor as it made no sense (Bundle.folder
is the bundle package's root folder) - (internal) rename
ConfigPropertyMeta
toConfigPropertyMetaclass
- fix the
Api
extension so it only generates docs for model resources that are registered with the app - fix setting of
Route._controller_cls
when controllers extend another concrete controller with routes - fix
Bundle.static_url_path
descriptor - specify required minimum package versions in
setup.py
, and pin versions inrequirements.txt
- fix the
UnchainedModelRegistry.reset
method so it allows using factory_boy fromconftest.py
- fix the
flask celery
commands so that they gracefully terminate instead of leaving zombie processes running - fix
param_converter
to allowing converting models from optional query parameters - add support to graphene for working with SQLAlchemy BigInteger columns
- ship
_templates
folder with the distribution so that theflask new <tempate>
command works when Flask Unchained gets installed viapip
IMPORTANT: these releases are broken, use v0.6.6
- export
get_boolean_env
from coreflask_unchained
package - export
param_converter
from coreflask_unchained
package - fix discovery of user-app
tests._unchained_config
- improve the output of commands that display their information in a table
- improve the output of custom sqlalchemy types in generated migrations files
- improve the output of the Views column from the
flask urls
command - improve the
--order-by
option of theflask urls
command - rename command
flask db import_fixtures
toflask db import-fixtures
- add a
FlaskForm
base class extending :class:~flask_wtf.FlaskForm
that adds support for specifying the rendered field order - automatically set the
csrf_token
cookie on responses - override the
click
module to also support documenting arguments withhelp
- also make the default help options
-h
and--help
instead of just--help
- also make the default help options
- refactor the hook store to be a class attribute of the bundle the hook(s) belong to
- add an
env
attribute on theFlaskUnchained
app instance - make the
bundles
attribute on theUnchained
extension anAttrDict
- bundles are now instantiated instead of passing the classes around directly
- add default config options, making
DEBUG
andTESTING
unnecessary to set manually - add a
_name
attribute toFlaskForm
to automatically name forms when rendering them programmatically - add
get_extension_local_proxy
andget_service_local_proxy
methods to theUnchained
extension - add support for overriding static files from bundles
- minor refactor of the declarative routing for
Controller
andResource
classes- consolidate default route rule generation into the
Route
class - make it possible to override the
member_param
of aResource
with theresource
routes function
- consolidate default route rule generation into the
- add a
TEMPLATE_FILE_EXTENSION
option toAppConfig
that controllers will respect by default. Controllers can still set theirtemplate_file_extension
attribute to override the application-wide default. - implement missing
delete
routing function - preliminary support for customizing the generated unique member param
- fix setting of
Route._controller_cls
to automatically always happen - refactor the SQLAlchemy Bundle to split most of it out into its own package, so that it can be used on its own (without Flask).
- fix the resource url prefix descriptor to convert to kebab-case instead of snake-case
- rename
Controller.template_folder
toController.template_folder_name
- add
Controller.make_response
as an alias forflask.make_response
- convert attributes on
Controller
,Resource
, andModelResource
to beclass Meta
options - rename
_meta
toMeta
per py-meta-utils v0.3 - rename
ModelManager.find_all
toModelManager.all
andModelManager.find_by
toModelManager.filter_by
for consistency with theQuery
api - move instantiation of the
CSRFProtect
extension from the security bundle into the controller bundle, where it belongs, so that it always gets used - improve registration of request cycle functions meant to run only for a specific bundle blueprint
- update
BaseService
to use a MetaOptionsFactory - make the
ModelManager.model
class attribute a meta option - rename the
flask db drop --drop
option toflask db drop --force
to skip prompting - rename the
flask db reset --reset
option toflask db reset --force
to skip prompting - add
no_autoflush
toSessionManager
- include html templates in the distribution
- add bundles to the shell context
- export
FlaskUnchained
from the root package - export Flask's
current_app
from the root package - never register static assets routes with babel bundle
- integrate the admin bundle into the
flask_unchained
package - integrate the api bundle into the
flask_unchained
package - integrate the celery bundle into the
flask_unchained
package - integrate the mail bundle into the
flask_unchained
package - integrate the sqlalchemy bundle into the
flask_unchained
package - integrate the webpack bundle into the
flask_unchained
package
- fix tests when babel_bundle isn't loaded
- fix infinite recursion error when registering urls and blueprints with babel
- make
tests._unchained_config
optional ifunchained_config
exists - fix discovery of bundle views to include any bundle in the hierarchy with views
- subclass Flask to improve handling of adding blueprints and url rules in conjunction with the babel bundle
- rename
unchained.BUNDLES
tounchained.bundles
- fix naming of bundle static endpoints
- support loading bundles as the app bundle for development
- refactor the babel commands to work with both app and regular bundles
- fix discovery of tests._unchained_config module
- add
flask qtconsole
command - rename Bundle.iter_bundles to Bundle.iter_class_hierarchy
- add
cli_runner
pytest fixture for testing click commands - fix register commands hook to support overriding groups and commands
- support registering request hooks, template tags/filters/tests, and context processors via deferred decorators on the Unchained and Bundle classes
- ship the controller bundle, session bundle, and babel bundles as part of core
- the babel and controller bundles are now mandatory, and will be included automatically
- bugfix: Bundle.static_url_prefix renamed to Bundle.static_url_path
- bugfix: check for
FunctionType
inset_up_class_dependency_injection
- rename
BaseConfig
toConfig
- add utilities for dealing with optional dependencies:
OptionalClass
: generic base class that can also be used as a substitute for extensions that have base classes defined as attributes on themoptional_pytest_fixture
: allows to conditionally register test fixtures
- hooks now declare their dependencies by hook name, as opposed to using an integer priority
- early releases