Skip to content
This repository

Shell autoreload #51

Open
Kazy opened this Issue January 15, 2013 · 8 comments

3 participants

Boullier Jocelyn Sean Lynch Kenneth Reitz
Boullier Jocelyn

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.

Sean Lynch
Collaborator

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?

Boullier Jocelyn

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.

Kenneth Reitz
Collaborator

:+1:

Sean Lynch
Collaborator

Some feedback

  • Please remove the additional argh dependency. 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-reload flag --no-reload to match the Server command? Be sure to update the various docs related to the command
  • The line from watchdog.events import FileSystemEventHandler should 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.

Boullier Jocelyn

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).

Sean Lynch
Collaborator

@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)?

Boullier Jocelyn
Kazy commented August 13, 2013

@techniq I should be able to do so in a little more than one week !

Sean Lynch
Collaborator

Awesome, thanks.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.