Monday, August 18, 2008

refresh.txt now is plone.reload

Note: they are not the same thing, It's just the title of my post.

About 3 years ago, when I started to develope with plone/zope there was a nasty trick for speeding up development that consisted on putting an empty file named exactly "refresh.txt" in the root of your product. That way, each time you modified the code of your product, you were not pushed to restart your zope instance: you had to navigate thru an intricated path until you reach your product, and from there clicking on a magic refresh button saved us, reloading our code.

Sometimes, the code in your product was importing another modules, and then refresh were not able to reload things entirely, and there were some other oddities that I don't remember right now.

Anyway, that process worked fine for a while. But later things started to be more and more complex, until at some point the refresh thing ended been completely obsolete and non useful at all.

With the advent of Five and zcml configuration files, and probably many other new pieces on zope, refresh was wounded death.

Mourning and grief... I wored black clothes for a couple of weeks, but, slowly, I started back my normal life.

There I was when last week Anthony, who abandoned Plone development for a couple of years, asked me about our old friend refresh.txt... I started to carefully choose the words, trying to not hurt him with the terrible news, when I though "Hey, there must be some replacement out there".

I was doing a fruitless search when Matthew Wilkes introduced me the newest kid on the block: plone.reload. It simply works, and there is no need to explicitly tell it what to reload, and it is also able to reload zcml configurations!. What a joy.

Unfortunately, there are some issues on the product yet, but it's actively developed, and regardless those things, it's very useful.

- What issues did you find?

- Only this one: Does not work if you touch code in a class method that calls super. The thing is simple: the module is reloaded, so, when calling super, an internal isinstance call fail.

No comments: