On Wed, Jul 25, 2018 at 10:41 PM Chris Angelico <ros...@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.
_______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/