Opened 12 years ago
Closed 12 years ago
#19642 closed Bug (wontfix)
django.utils.functional.lazy issues
Reported by: | Alexey Boriskin | Owned by: | Aymeric Augustin |
---|---|---|---|
Component: | Core (Other) | Version: | dev |
Severity: | Normal | Keywords: | lazy, functional |
Cc: | Triage Stage: | Unreviewed | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
I've found some issues meditating on the lazy()
function. I'm reporting them as one ticket; please tell if I should rather create one per issue.
- promise, returned by
lazy()
, has no attributes of original class:lazy()
thinks only about methods - promise, returned by
lazy()
, has weird behaviour if resultclass has__mod__
method – it overrides it completely - methods of promise, returned by
lazy()
, lack the__doc__
attribute – docstring is lost - if resultclass explicitly define itself as a not hashable with
__hash__ = None
, promises of that class may still be hashable.
Following diff, when applied, adds four failing tests illustrating that issues: https://gist.github.com/4582334
Change History (5)
comment:1 by , 12 years ago
Resolution: | → wontfix |
---|---|
Status: | new → closed |
comment:2 by , 12 years ago
Resolution: | wontfix |
---|---|
Status: | closed → new |
I'd like to take a look at the __mod__
issue.
comment:3 by , 12 years ago
Owner: | changed from | to
---|---|
Status: | new → assigned |
comment:4 by , 12 years ago
Patch, which can be used to solve issues in the ticket: https://gist.github.com/4605065
comment:5 by , 12 years ago
Resolution: | → wontfix |
---|---|
Status: | assigned → closed |
The second item was fixed in the patch for #19160. The three others are fairly minor and don't have actual consequences in the current code base.
The patch fixes a few things but it isn't quite production-ready (builtin_method_names = ['__hash__', '__str__']
- ouch)
For these reasons I don't think it's useful to keep this ticket open.
However, as discussed on IRC, it could be a good idea to re-implement lazy()
by overriding __getattribute__
rather than by copying methods around, both design-wise and performance-wise (to be benchmarked). Feel free to write a patch for this and open a new ticket!
My understanding is that lazy() will just defer the call of the given callable until it is accessed. The idea is to not work as a proxy for an object. So, for that reason marking as wontfix.
If some of the issues are seen as problems in "defer call to method" definition of lazy (the
__mod__
issue?), then reopen...