tri.struct supplies classes that can be used like dictionaries and as objects with attribute access at the same time
Project description
.. image:: https://travis-ci.org/TriOptima/tri.struct.svg?branch=master
:target: https://travis-ci.org/TriOptima/tri.struct
.. image:: http://codecov.io/github/TriOptima/tri.struct/coverage.svg?branch=master
:target: http://codecov.io/github/TriOptima/tri.struct?branch=master
tri.struct
==========
tri.struct supplies classes that can be used like dictionaries and as objects with attribute access at the same time. There are two versions:
- Struct: mutable struct
- FrozenStruct: immutable struct
Some niceties include:
- Predictable repr() so it's easy to write tests
- `merged` function call to merge different types of dicts into a new: `merged(Struct(a=1), FrozenStruct(b=1), c=1) == Struct(a=1, b=1, c=1)`)
- Accelerated implementation in c for improved speed. (With python-only fallback reference implementation)
Example
-------
.. code:: python
>>> foo = Struct()
>>> foo.a = 1
>>> foo['a']
1
>>> foo['a'] = 2
>>> foo.a
2
Running tests
-------------
You need tox installed then just `make test`.
License
-------
BSD
Documentation
-------------
http://tristruct.readthedocs.org.
Changelog
=========
2.5.1 - 2015-12-15
~~~~~~~~~~~~~~~~~~
* Bugfix: Fix compilation of the _cstruct module.
2.5.0 - (never released)
~~~~~~~~~~~~~~~~~~~~~~~~
* Build changes.
2.4.0 - 2015-12-08
~~~~~~~~~~~~~~~~~~
* Improvement: If a Struct subclass implements the `__missing__` method,
it will not be called before GetAttr on attribute access, but will be
called before GetAttr on dict access.
2.3.1 - 2015-12-07
~~~~~~~~~~~~~~~~~~
* Bugfix: Clear KeyError in CStruct getattr before trying GetAttr,
otherwise the KeyError may "leak out". Also, only clear the error
and attempt GetAttr if the original error was a KeyError.
2.3.0 - 2015-12-02
~~~~~~~~~~~~~~~~~~
* Add mixin class `Frozen`to make read-only versions of a dict-derived
class (typically a Struct or a subclass there of.)
* Use the `Frozen` mixin to implement `FrozenStruct`
2.2.0 - 2015-11-12
~~~~~~~~~~~~~~~~~~
* Add keyword arguments to `merged` function.
2.1.2 - 2015-11-11
~~~~~~~~~~~~~~~~~~
* Redo the C implementation to be a "heaptype", and remove the hack of
setting `__dict__` = `self`. Instead, `object` will control the type
storage, letting us "insert" attributes into the object without
polluting the `dict`.
2.0 - (never released)
~~~~~~~~~~~~~~~~~~~~~~
* slim down interface to again match dict
* add tri.struct.merged function to join structs
* add optional C implementation to speed up instantiation
1.0 - 2015-09-29
~~~~~~~~~~~~~~~~
* Struct with attribute & dict interface
* __add__ and __or__ to combine structs
:target: https://travis-ci.org/TriOptima/tri.struct
.. image:: http://codecov.io/github/TriOptima/tri.struct/coverage.svg?branch=master
:target: http://codecov.io/github/TriOptima/tri.struct?branch=master
tri.struct
==========
tri.struct supplies classes that can be used like dictionaries and as objects with attribute access at the same time. There are two versions:
- Struct: mutable struct
- FrozenStruct: immutable struct
Some niceties include:
- Predictable repr() so it's easy to write tests
- `merged` function call to merge different types of dicts into a new: `merged(Struct(a=1), FrozenStruct(b=1), c=1) == Struct(a=1, b=1, c=1)`)
- Accelerated implementation in c for improved speed. (With python-only fallback reference implementation)
Example
-------
.. code:: python
>>> foo = Struct()
>>> foo.a = 1
>>> foo['a']
1
>>> foo['a'] = 2
>>> foo.a
2
Running tests
-------------
You need tox installed then just `make test`.
License
-------
BSD
Documentation
-------------
http://tristruct.readthedocs.org.
Changelog
=========
2.5.1 - 2015-12-15
~~~~~~~~~~~~~~~~~~
* Bugfix: Fix compilation of the _cstruct module.
2.5.0 - (never released)
~~~~~~~~~~~~~~~~~~~~~~~~
* Build changes.
2.4.0 - 2015-12-08
~~~~~~~~~~~~~~~~~~
* Improvement: If a Struct subclass implements the `__missing__` method,
it will not be called before GetAttr on attribute access, but will be
called before GetAttr on dict access.
2.3.1 - 2015-12-07
~~~~~~~~~~~~~~~~~~
* Bugfix: Clear KeyError in CStruct getattr before trying GetAttr,
otherwise the KeyError may "leak out". Also, only clear the error
and attempt GetAttr if the original error was a KeyError.
2.3.0 - 2015-12-02
~~~~~~~~~~~~~~~~~~
* Add mixin class `Frozen`to make read-only versions of a dict-derived
class (typically a Struct or a subclass there of.)
* Use the `Frozen` mixin to implement `FrozenStruct`
2.2.0 - 2015-11-12
~~~~~~~~~~~~~~~~~~
* Add keyword arguments to `merged` function.
2.1.2 - 2015-11-11
~~~~~~~~~~~~~~~~~~
* Redo the C implementation to be a "heaptype", and remove the hack of
setting `__dict__` = `self`. Instead, `object` will control the type
storage, letting us "insert" attributes into the object without
polluting the `dict`.
2.0 - (never released)
~~~~~~~~~~~~~~~~~~~~~~
* slim down interface to again match dict
* add tri.struct.merged function to join structs
* add optional C implementation to speed up instantiation
1.0 - 2015-09-29
~~~~~~~~~~~~~~~~
* Struct with attribute & dict interface
* __add__ and __or__ to combine structs
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
tri.struct-2.5.1.tar.gz
(16.4 kB
view hashes)
Built Distribution
Close
Hashes for tri.struct-2.5.1-py2.7-macosx-10.10-x86_64.egg
Algorithm | Hash digest | |
---|---|---|
SHA256 | c78463436d55abad8c006a874fbba8c16432ab1e2cd725bbfdc4ee67c4b51ef6 |
|
MD5 | 348dd3261175cade1d852d4fba74523a |
|
BLAKE2b-256 | 7344f51439e3942c07a5d3fccbcd97b9ceb7991ce3cea96b87cf102dd05b5e1b |