[HN Gopher] DotDict: A simple Python library to make chained att... ___________________________________________________________________ DotDict: A simple Python library to make chained attributes possible Author : astrea Score : 28 points Date : 2023-08-02 21:16 UTC (1 hours ago) (HTM) web link (github.com) (TXT) w3m dump (github.com) | i13e wrote: | Good video on this subject: | https://www.youtube.com/watch?v=nDd2WVb_Enw | sidmitra wrote: | In case anyone is looking for mature alternatives that are used | in production | | https://pypi.org/project/python-box/ | | https://pypi.org/project/munch/ | Halvedat wrote: | Neither of these appear to have the chained attribute feature, | from my surface level parse. | nmalaguti wrote: | Box can do it with | | https://github.com/cdgriffith/Box/wiki/Types-of- | Boxes#defaul... | kshay wrote: | So basically Perl autovivification for Python? | hk1337 wrote: | edict() is an interesting name for a dictionary function. | astrea wrote: | It's a class instantiation with no arguments | astrea wrote: | This is more of a political statement than a proper library. More | to demonstrate the flexibility of Python given I was able to so | easily do this. | nicwolff wrote: | Could have been even easier: `argparse.Namespace` already has | `__contains__()` tsu | | That said, https://pypi.org/project/addict/ has been around a | long time... | astrea wrote: | That contains doesn't permit the behavior, though. It would | give you an AttributeError if you attempted this. | | Yes, addict seems to be exactly what I was going for. | Waterluvian wrote: | I enjoy how much complete control Python enables. It's fun to | turn it into what resembles a different language. | | I want to make a library where you never ever call functions | with fn() notation. But just utilize accessors and absolutely | bastardize dicts. | richbell wrote: | My favorite example of this: https://old.reddit.com/r/learnpr | ogramming/comments/kegalv/my... | Waterluvian wrote: | This is horrifying and yet I can't look away. | nathants wrote: | this is cool! | | i use a lot of defaultdict trees[1], and convert nested dicts | to/from flat dicts with dots in their keys[2]. | | never underestimate the mighty dict. | | 1. https://github.com/nathants/py- | util/blob/6844917fb51e9d24de1... | | 2. https://github.com/nathants/py- | util/blob/6844917fb51e9d24de1... | gorgoiler wrote: | Does it lazy-create leaf dicts on access? It would be preferable | if they were only created on assignment, and failed if it's just | a get. | | For example, if I call config.usors.adminn.naem I'd like it to | fail loud and fast to point out the typos. | Izkata wrote: | Code looks like it's on access, but I didn't test it. | kzrdude wrote: | I don't think it's possible in Python to detect the difference | between access or write (when it's nested attributes). | heisenzombie wrote: | Yeah it does. If you do: x = dd() | print(x.tyypo.a.b) | | you'll get "DotDict()" | | The problem is that an object can't know whether you're getting | a node that you're later going to assign a leaf to... or | whether you're getting the node because you want to get the | node. x = dd() x.a.b.c = "Foo" | | is equivalent to: x = dd() y = x.a.b | y.c = "Foo" | | So "x.a.b" can't raise an exception. | | Now, it's python, so you can do unholy things to make pretty | much anything work. But I think it would be ugly. | samwillis wrote: | They could add a __bool__ method to the class the returns | false when that level of the namespace is empty. That would | allow: if a.b.c: print("c:", | a.b.c) | rozab wrote: | The __contains__ method should be used (and indeed is). | What if a.b.c = False? | nmalaguti wrote: | This seems similar to the functionality exposed by Box. | | https://github.com/cdgriffith/Box/wiki/Types-of-Boxes#defaul... | bbstats wrote: | I...do not prefer this syntax. | dancenow wrote: | This is the way. And that pip command is just clean. | Toxygene wrote: | Have I lost my marbles? It doesn't work? | (temp5) ~/temp5 pip install . ERROR: | Directory '.' is not installable. Neither 'setup.py' nor | 'pyproject.toml' found. | Izkata wrote: | Run it from a clone of the repo to install it to the system / | your user. | | I don't see a name to install this from pypi (I see several | dotdict libraries on there but they don't link here, so don't | know if this is there somewhere). | astrea wrote: | As per this comment, I added it to pypi. You can now just | do 'pip install attr-dot-dict'. ___________________________________________________________________ (page generated 2023-08-02 23:00 UTC)