On Wed, Apr 15, 2020 at 7:37 AM Victor Stinner <vstin...@python.org> wrote:
> Le mer. 15 avr. 2020 à 05:02, Raymond Hettinger > <raymond.hettin...@gmail.com> a écrit : > > I would like to make that functionality available to the JSON module (or > just about anything else that accepts a custom dict) by adding the magic > methods for mappings so that this works: > > > > catalog = json.load(f, object_hook=SimpleNamespace) > > > print(catalog['clothing']['mens']['shoes']['extra_wide']['quantity']) > # currently possible with dict() > > print(catalog.clothing.mens.shoes.extra_wide.quantity]) > # proposed with SimpleNamespace() > > print(catalog.clothing.boys['3t'].tops.quantity > # would also be supported > > It seems like there are many projects on PyPI which provide such > features. A few examples: > > * https://pypi.org/project/attrdict/ "mapping objects that allow their > elements to be accessed both as keys and as attributes" > * https://pypi.org/project/dictlib/ "Dictionary keys as object attributes" > * https://pypi.org/project/objdict/ "An ObjDict supports all normal > dict operations, but adds support for accessing and setting entries as > attributes" > * https://pypi.org/project/mydict/ "dict subclass which tries to act > like JavaScript objects, so you can use the dot notation (d.foo) to > access members of the object" > * https://pypi.org/project/dpath/ "accessing and searching > dictionaries via /slashed/paths ala xpath". Example: > dpath.util.search(x, "a/b/[cd]") > * etc. > > There are many variants: > > * Support nested dictionaries or not > * "Path" as a string ala XPath using "/" or "." separator -versus- > don't give a direct access into nested dictionaries > * Optional default value when a key/attribute is missing > * etc. > > Is there a project on PyPI which already already been battle-tested > and gained enough popularity to consider that it's now mature enough > to enter the stdlib? +1 that was my first reaction as well. We don't need this battery. If you wanted to make it a more general thing, introduce a special operator for it instead of overloading ".". Ex: copy Perl and adopt -> as the "lookup the name in a dictionary without typing quotes around the constant value" operator. (please don't!) by the time we're saying "JSON should decode into a structured format" we can also say very true things like "JSON data should be validated against a schema" at which point we're ultimately going to wind up reinventing https://googleapis.dev/python/protobuf/latest/google/protobuf/json_format.html and equivalent other things. -gps The problem is that so far, I see no clear "winner" of a "standard" > API. So maybe leaving such feature on PyPI is better for now. It seems > like these projects are opinionated about what should be the "right" > behavior :-) > > And yeah, there are even more advanced tools like > https://glom.readthedocs.io/ > > As I wrote in the issue, I would prefer to leave SimpleNamespace > unchanged. If such feature lands into the stdlib, I would prefer it to > be a new class. > > Victor > -- > Night gathers, and now my watch begins. It shall not end until my death. > _______________________________________________ > Python-Dev mailing list -- python-dev@python.org > To unsubscribe send an email to python-dev-le...@python.org > https://mail.python.org/mailman3/lists/python-dev.python.org/ > Message archived at > https://mail.python.org/archives/list/python-dev@python.org/message/XDFTMWK5727ETLVNEANWYN6A3HQN6STT/ > Code of Conduct: http://python.org/psf/codeofconduct/ >
_______________________________________________ Python-Dev mailing list -- python-dev@python.org To unsubscribe send an email to python-dev-le...@python.org https://mail.python.org/mailman3/lists/python-dev.python.org/ Message archived at https://mail.python.org/archives/list/python-dev@python.org/message/C5AVB5Z3SQ2LLUYKU65YLSVTLCL2XFOM/ Code of Conduct: http://python.org/psf/codeofconduct/