Duncan Booth wrote: > Ilias Lazaridis wrote: > >>> #patch_service.py >>> from toto import service >>> >>> def my_impl(self, *args) : >>> old_result = self._old_method(*args) >>> # ... >>> return new_result >>> >>> if not hasattr(service, '_old_method') : >>> service._old_method = service.method >>> service.method = my_impl >>> >>> once this file is imported, all future calls to "method" of service >>> instances will use my_impl. >> Ok, just a small problem when a _function_ is to be hooked. >> >> Looking a the code in the debugger shows that the function "syncdb" is >> correctly overridden. But when the code returns, "syncdb" has again >> it's original value. >> >> Can I import "syncdb" by reference instead by value, thus the change >> 'survives'? > > The difference is that Maric imported the module. To make the change affect > the original model you have to access the function as an attribute of its > module, not by importing the function from the module.
ok, I understand. the code below works, but has the limitation that I cannot import the syncdb_hook within "django.core.management". There is no way to import/get "syncdb" but mutable? >> #syncdb_hook.py >> >> from django.rework.evolve import evolvedb >> from django.core.management import syncdb > from django.core import management > >> def syncdb_new(*args) : >> evolvedb() >> syncdb_result = syncdb_old(*args) >> return syncdb_result >> >> if syncdb != syncdb_new: >> syncdb_old = syncdb >> syncdb = syncdb_new >> > if management.syncdb != syncdb_new: > syncdb_old = management.syncdb > management.syncdb = syncdb_new works fine. . -- http://lazaridis.com -- http://mail.python.org/mailman/listinfo/python-list