On Monday 11 April 2016 20:13:02 Florian Apolloner wrote:
> On Monday, April 11, 2016 at 6:57:46 PM UTC+2, Tim Graham wrote:
> > I cannot think of much we could do besides monkey-patching the
> > custom-user model.
> 
> I would not call checking and rewriting the class in __new__
> monkey-patching, but…

I think this is what we must do in order to keep backwards-compatibility while 
resolving the issue.

If we don't resolve the issue, people will just keep using the method as if it 
were a property, opening themselves up in various ways;

If we just make it a property in the builtin classes, custom user classes will 
re-introduce the issue.

We can handle it in two ways, as far as I can see:

A) What Florian alluded to above -- give AbstractBaseUser a metaclass which 
replaces the methods with Aymeric's "CallableBool"s

B) Implement in AbstractBaseUser a __getattribute__ which, essentially, does 
the same thing when asked for the methods.

When idea which I discarded was to "force" the attributes to be used as 
methods -- to use a callable which raises an exception when evaluated as 
boolean. But this replacement suffers exactly the same problems as the 
CallableBool replacement, unless also supported by "monkey patching" 
techniques, and a CallableBool is much more user-friendly.

Have fun,
        Shai.

Reply via email to