monkey patching with @classmethod
gentlestone
tibor.beck at hotmail.com
Wed Mar 3 07:11:30 EST 2010
On 3. Mar., 12:57 h., gentlestone <tibor.b... at hotmail.com> wrote:
> Hi, is there some well-known problems with class method monkey
> patching?
>
> I've got this error message:
>
> unbound method get_pocet_neocislovanych() must be called with Pozemok
> instance as first argument (got Subjekt instance instead)
>
> The method is declared as:
> @classmethod
> @monkeypatch(Dokument)
> def get_pocet_neocislovanych(cls, subjekt):
> return cls.objects.filter(subjekt = subjekt, cislo__isnull =
> True).count() # or pass, this line is not important
>
> and the monkey patch decorator is declared as:
> def monkeypatch(cls):
> def decorator(func):
> setattr(cls, func.__name__, func)
> return func
> return decorator
>
> If I move the method to class declaration (whitout monkey patching),
> everything is ok, but only if I've restarted the server.
for complexity, there is a code I call the method:
def _application_menu(request, subjekt, aplikacia_url_name):
return render_to_response('subjekty/aplikacia.html', {
'subjekt' : subjekt,
'aplikacia_url_name' : aplikacia_url_name,
'aplikacia_dictionary' :
aplikacia_dictionary(aplikacia_url_name),
'listy' : [
(dokument_url_name, dict(
get_verbose_name_plural =
dokument.get_verbose_name_plural(),
get_pocet_neocislovanych =
dokument.get_pocet_neocislovanych(subjekt),
get_pocet_celkom = dokument.get_pocet_celkom(subjekt),
)) for dokument_url_name, dokument in
aplikacia_dictionary(aplikacia_url_name)['listy']
],
}, context_instance = RequestContext(request))
unfortunately, sometimes it works, sometimes not, I cannot imagine the
reason, why and when it works and not - even whitout monkey patching
seems like some black magic
More information about the Python-list
mailing list