
On Wed, Jul 25, 2018 at 10:41 PM Chris Angelico <rosuav@gmail.com> wrote:
A bit problematic. But after (a) figuring out that your module is named "coalesce" even though I installed "coalescing" AND (b) going and separately installing wrapt, and finally (c) doing the import that you didn't mention, we still have this fundamental problem:
Yeah, yeah. I know it's alpha software I wrote two nights ago, and slightly patched 5 minutes before that post. You fixed those concerns; I'll happily take PRs on fixing them better.
from coalesce import NullCoalesce from types import SimpleNamespace spam, spam.eggs, spam.eggs.bacon = SimpleNamespace(), SimpleNamespace(), 42 NullCoalesce(spam).eggs.bacon <NullCoalesce proxy for 42>
That isn't 42. That's a thing that, forever afterwards, will be a proxy.
Yeah. That's a thing it does. It's less of an issue than you think since, e.g.:
from coalesce import NullCoalesce from types import SimpleNamespace spam, spam.eggs, spam.eggs.bacon = SimpleNamespace(), SimpleNamespace(), 42 NullCoalesce(spam).eggs.bacon + 1 43 NullCoalesce(spam).eggs.bacon * 1 42
Most things you actually do with the proxy wind up getting the value back once it is used. However, this seems to be a bug that I inherit from wrapt.ObjectProxy:
NullCoalesce(spam).eggs.bacon + 0 ValueError: wrapper has not been initialized
If you do an operation that combines the proxy value with "Falsey" values, it doesn't do the implicit unboxing. Same with e.g. `proxyval + ""` for strings, unfortunately. I'm not sure how to fix that.
spam.nil = None
print(NullCoalesce(spam).nil.nil) None print(NullCoalesce(spam).nil.nil.nil) Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'NoneType' object has no attribute 'nil'
Why is this wrong? This is EXACTLY the same behavior as the `?.` operator would have in the last case. Do you not recognize the behavior you are advocating in PEP 505? I recognize that the proxy value not always "auto-unboxing" is a limitation that I don't like. -- Keeping medicines from the bloodstreams of the sick; food from the bellies of the hungry; books from the hands of the uneducated; technology from the underdeveloped; and putting advocates of freedom in prisons. Intellectual property is to the 21st century what the slave trade was to the 16th.