flask-script icon indicating copy to clipboard operation
flask-script copied to clipboard

Shell autoreload

Open Kazy opened this issue 12 years ago • 12 comments

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.

Kazy avatar Jan 15 '13 19:01 Kazy

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?

techniq avatar Jan 15 '13 19:01 techniq

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.

Kazy avatar Jan 15 '13 19:01 Kazy

:+1:

kennethreitz avatar Jan 16 '13 08:01 kennethreitz

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.

techniq avatar Jan 17 '13 03:01 techniq

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 avatar Jan 17 '13 12:01 Kazy

@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 avatar Aug 12 '13 03:08 techniq

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

Kazy avatar Aug 13 '13 11:08 Kazy

Awesome, thanks.

techniq avatar Aug 13 '13 11:08 techniq

The autoreload is not working yet?

sibelius avatar Aug 11 '15 19:08 sibelius

@sibeliusseraphini it looks like they were trying to implement it in #52 but never finished.

davidism avatar Aug 11 '15 23:08 davidism

We can have a Flask autoreload on shell using ipython

Just create the app inside ipython

$ ipython %autoreload 2 app = create_app()

sibelius avatar Oct 23 '15 14:10 sibelius

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?

takosuke avatar Mar 04 '16 16:03 takosuke