Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/wbolster/attribute-mapping
minimalistic python library to allow attribute lookups in dictionaries and mappings
https://github.com/wbolster/attribute-mapping
Last synced: about 2 months ago
JSON representation
minimalistic python library to allow attribute lookups in dictionaries and mappings
- Host: GitHub
- URL: https://github.com/wbolster/attribute-mapping
- Owner: wbolster
- License: other
- Created: 2019-03-08T21:19:38.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2021-11-11T19:10:25.000Z (about 3 years ago)
- Last Synced: 2024-09-14T23:43:27.463Z (3 months ago)
- Language: Python
- Size: 14.6 KB
- Stars: 2
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.rst
- License: LICENSE.rst
Awesome Lists containing this project
README
=================
attribute-mapping
=================.. image:: https://travis-ci.org/wbolster/attribute-mapping.svg?branch=master
:target: https://travis-ci.org/wbolster/attribute-mapping``attribute-mapping`` is a minimalistic Python library for
attribute-based access to dictionaries and other mappings.Compared to many other implementations of the same idea, going by
names such as ``AttrDict`` and various others, this library is
extremely minimal and free of cruft:- Almost no API
- ``AttributeMapping`` instances do not pretend to be a ``dict``
- Can be used with ``dict`` as well as other objects implementing the
``collections.abc.Mapping`` abstract base class- No restrictions on key/attribute names
- No unpleasant surprises in behaviour or weird corner cases
- Modern code; Python 3.4+ only
- 100% test coverage
Installation
============::
python -m pip install attribute-mapping
Usage
=====Make an ``AttributeMapping`` instance by passing a dictionary or
another mapping::from attribute_mapping import AttributeMapping
d = {"a": 1, "b": {"c": 2, "d": 3}}
x = AttributeMapping(d)Now you can access the contents using attribute lookups::
x.a # gives 1
x.b.c # gives 2x.foo = 123
hasattr(x, "foo") # True
del x.fooIn addition to attribute access, subscription (``__getitem__`` and
friends) and containment checks (``in``) also work::x["a"] # gives 1
x["b"]["c"] # gives 2
x["foo"] = 123
"foo" in x # True
del x["foo"]However, there are *no* other dict-like methods or reserved names, so
you can happily use attributes like ``keys`` and ``items``::x.items = [1, 2, 3]
Iteration yields ``(key, value)`` tuples, just like ``.items()`` on
normal mappings would do::for key, value in x:
...Finally, to obtain the original object that was used for the
``AttributeMapping``, use the built-in ``vars()`` function::d = {"a": 1}
x = AttributeMapping(d)
vars(x) is d # TrueCaveats
=======The attribute names ``__class__`` and ``__dict__`` are reserved in
Python. If you really must use these names, use ``x["__class__"]`` and
``x["__dict__"]`` instead.Credits
=======This library is written by wouter bolsterlee (wbolster).
There are a gazillion similar implementations, so the author thanks
the whole Python community for the inspiration to make yet another
implementation of this idea.Version history
===============* 1.3.0 (2019-03-13)
* Add support for ``len()``
* 1.2.0 (2019-03-12)
* Add support for (in)equality tests
* 1.1.0 (2019-03-09)
* Add support for custom mappings
* 1.0.0 (2019-03-08)
* Initial release
License
=======BSD; see LICENSE file for details.