flask-script
flask-script copied to clipboard
Shell autoreload
Hi,
Someone has added an auto-reloading functionality to the python REPL (http://benplesser.com/2013/01/10/beefing-up-the-python-shell-to-build-apps-faster-and-dryer/ thanks for his work) allowing an auto-reload of the import, and even to swap already existing objects. I've already ported it to be used with Flask-Script (https://github.com/Kazy/flask-script), but I would like to know if you're interested to integrate it. It has been set to be activated by default, unless watchdog is not available.
That looks very interesting. Let me play around with it, but I think it would be a great addition (I know I get frustrated having to reload the shell a lot, especially when playing with my models using SQLAlchemy).
I noticed one of your commits disabled model reloading, and you pass None to model_globals in listen_for_changes(). Does the current state of your branch not support reloading on model changes, and if not, have you found the cause why it's not supported?
It was needed with Django because it caches models, but with (Flask-)SQLAlchemy, since models are usual classes and get no special treatment (or at least none I'm aware of), it is reloaded the same way. I removed the argument, forgot to do it.
:+1:
Some feedback
- Please remove the additional
arghdependency. It's only being used for it's CommandError. Maybe raise InvalidCommand instead? Infact I'm not sure we should check for anything other then_request_ctx_stack.top.app.root_path. PROJECT_ROOT is a Django environment variable I believe, but not really common for Flask. I'm not sure watching the VIRTUAL_ENV is helpful either. Thoughts? - How about calling the
--no-auto-reloadflag--no-reloadto match the Server command? Be sure to update the various docs related to the command - The line
from watchdog.events import FileSystemEventHandlershould be inside the try block so not to throw an ImportError for users without watchdog.
Go ahead and send a pull request so we can comment on specific lines of code easier as well. Thanks.
I've committed those changes. About the first point, maybe we should add a way to specify a path, for more exotic configuration (like using a factory to create the app instance, I have no idea how Flask set the root_path variable).
@Kazy Now that Flask-SQLAlchemy has gone back into active development, could you take a look at this and see if its working (or report an issue on Flask-SQLAlchemy)?
@techniq I should be able to do so in a little more than one week !
Awesome, thanks.
The autoreload is not working yet?
@sibeliusseraphini it looks like they were trying to implement it in #52 but never finished.
We can have a Flask autoreload on shell using ipython
Just create the app inside ipython
$ ipython %autoreload 2 app = create_app()
Bump this - I have autoreload enabled like @sibeliusseraphini in my ipython profile but it gets ignored when using the flask-script shell. Any way I'm not seeing of doing it?