- Avoid setting confusing context on AttributeError exceptions (from when not finding __missing__)
- Split c implementation to separate FastStruct. The native python implementation is now always the Struct
- Override __copy__ for Frozen. This is an optimization that was found in big uses of tri.token.
- Problems with pypi, this is the same as 3.0.1
- Renamed module from tri.struct to tri_struct. This is a breaking change.
- Dropped python2 support
- Fixed performance issue with Frozen/FrozenStruct: the hash was recalculated on each use instead of cached.
- Fixed release functionality
- Fixed segfault in repr when running under Python 3
- Added DefaultStruct in the spirit of the standard library defaultdict. Also added a to_default_struct for recursively converting dicts recursively.
- Fix use-after-free when repring a Struct that contains itself more than once.
- Fix make and tox targets for build and release.
- Fix lint issues.
- Bugfix: Fix compilation of the _cstruct module.
- Build changes.
- 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.
- 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.
- 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
- Add keyword arguments to merged function.
- 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.
- slim down interface to again match dict
- add tri.struct.merged function to join structs
- add optional C implementation to speed up instantiation
- Struct with attribute & dict interface
- __add__ and __or__ to combine structs