On Thu, Jul 26, 2018 at 12:30 PM, David Mertz
Btw. Here's a way of spelling the proposed syntax that gets the semantics right:
# pip install coalescing NullCoalesce(spam).eggs.bacon
Let's try it. rosuav@sikorsky:~$ sudo python3 -m pip install coalescing Collecting coalescing Downloading https://files.pythonhosted.org/packages/f3/f4/120f04cc59f9fa8c55c711b67f1c9c... Installing collected packages: coalescing Running setup.py install for coalescing ... done Successfully installed coalescing-0.1.1 rosuav@sikorsky:~$ python3 Python 3.8.0a0 (heads/literal_eval-exception:ddcb2eb331, Feb 21 2018, 04:32:23) [GCC 6.3.0 20170516] on linux Type "help", "copyright", "credits" or "license" for more information.
from coalescing import NullCoalesce Traceback (most recent call last): File "<stdin>", line 1, in <module> ModuleNotFoundError: No module named 'coalescing' from coalesce import NullCoalesce Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/local/lib/python3.8/site-packages/coalesce.py", line 56, in <module> import wrapt ModuleNotFoundError: No module named 'wrapt'
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: rosuav@sikorsky:~$ python3 Python 3.8.0a0 (heads/literal_eval-exception:ddcb2eb331, Feb 21 2018, 04:32:23) [GCC 6.3.0 20170516] on linux Type "help", "copyright", "credits" or "license" for more information.
from coalesce import NullCoalesce from types import SimpleNamespace spam, spam.eggs, spam.eggs.bacon = SimpleNamespace(), SimpleNamespace(), 42 NullCoalesce(spam).eggs.bacon
That isn't 42. That's a thing that, forever afterwards, will be a proxy. And look at this:
spam.nil = None print(NullCoalesce(spam).nil) <NullCoalesce proxy for 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'
Whoooooops. So, no, this is most definitely NOT equivalent to the proposed semantics. ChrisA