- drop support for Python 3.8 and 3.9
- add support for Python 3.13
- add FixedTuple member to validate inhomogeneous tuple with fixed number of elements PR #211
- fix a memory when pickling atom objects PR #213
- allow unions in TypeVar bound PR #207
fix a an issue when using add_member to override an existing member PR #204
Once again a huge thanks to @frmdstryr for the report and fix
fix a memory leak caused by Dict, Defaultdict and Set members #202
A huge thanks to @frmdstryr for the report and fix
- add support for Python 3.12 PR #200
- AtomMeta: create the class only once all members have been customized PR #510
This allows to use
__init_subclass__
since previously the__atom_members__
was not set when__init_subclass__
was called - illustrate the use of
__init_subclass__
to customize pickling PR #510 - refactor the metaclass to make it easier to reason about PR #510
- add a
DefaultDict
member which enforce the value to be a dictionary and use a factory for missing keys. The factory is set at the member level and a normal dict can be provided as value. When possible the factory is deduced from the member used for validation. - infer the use of
DefaultDict
from acollections.defaultdict
annotation
- fix generation of Value member from union containing object/Any PR #198
- fix setdefault method of atomdict to return the actually stored item PR #197
fix the generation of Subclass from type annotations PR #193
move getstate and setstate implementation to C and allow to customize the condition under which a member value is pickled. PR #182 Customization is used to only pickle member value whose state can be restored (for example Constant is not pickled). Whether a member is pickled can be customized using a method prefixed with
_getstate_
on an Atom subclass.use the Typed member when a type annotation resolve to a single type whose metaclass does not implement a custom
__instancecheck__
PR #185generate Tuple member for tuple[] annotations. The content of the tuple is typed check only if it is a 1-tuple or variable-length tuple. PR #184
fix the resolution order of members in the presence of multiple inheritance with a common base class PR #165 #168
Due to the above changes, adding a member after the class definition requires more work than before. As a consequence a new helper function
add_member
has been added.
- fix handling of Union in annotation based class definition PR #177
- add support for Python 3.11 PR #166
This release introduced a new way to declare atom object based on type annotations.
emit warnings when a magic method points to an undefined member PR #139 #149
use isort, black and flake8 to ensure a consistent coding style PR #141
base the version number on the most recent git tag using setuptools-scm PR #141
make the setup compatible with PEP 517 and PEP 621 compliant PR #141 #162 Pip should be used for development install in place of directly calling setup.py
fix handling of _SpecialGenericAlias (typing.Sequence, ...) when used inside an Instance member PR #151
add a ChangeDict TypedDict to help annotate observers PR #133
add several keyword argument to the AtomMeta metaclass PR #133
- enable_weakrefs: allow to have weak references to an Atom object without having to add the slot by hand. False by default.
- use_annotations: generate members from type annotations. Str-like annotations are not supported but allowed when an actual member is provided as default value. True by default.
- type_containers: in conjunction with use_annotations determine to what depth to type the content of a container. The default is 1 meaning that list[int] will use List(Int()) but list[list[int]] will use List(List()).
allow specifying which change events are emitted when adding static observers PR #155
This release introduces several minor backward incompatibilities which are detailed below. Those are expected to impact only a small minority of users since they make behaviors more in line with users expectations in most cases or can be easily addressed.
- allow to use any subscribed type in Typed and Instance. Optional and Union are analyzed to extract the tuple of types to validate. The presence of NoneType in the tuple will make the member optional. For container types (list, dict, set, etc) the content types is not used beyond static type validation. PR #136 #140 Note however that this usage of Optional and Union breaks static analyzer currently, while things deriving from an actual type will work as expected (List[int], list[int], Iterable[int])
- make the factory argument of Typed, Instance and their forwarded version keyword only. PR #123
- add a keyword-only argument to Typed, Instance and their forwarded
version:
optional
. When set to False, this will cause those members to reject None as a valid value. The default value, None, will resolve to True if there is no provided way to build a default value. PR #123 # 131 This is backward incompatible since previously None was always a valid value. - the Instance and Typed variants of the Validate enum have been renamed to OptionalInstance, OptionalTyped and new Instance and Typed variant describing the validation behavior for the member with optional=False have been added. PR #123
- consistently use Instance to wrap types passed to containers. PR #123 For containers, Instance members used for validation are created with optional=False by default. This is backward incompatible since None was always a valid value previously.
- add strict argument to FloatRange. PR #124
- allow to specify the type of ReadOnly and Constant. PR #128 The validation is done using the Instance validator. The change for ReadOnly is backward incompatible since the type or tuple of type is the first argument in place of the default value. Specifying the default value by keyword is both forward and backward compatible.
- use python stdlib IntEnum instead of the custom one in atom PR #122
- remove the custom atom.IntEnum PR #122
- add and distribute type hints PR #122 #132 This allows static type checkers to resolve the values behind a member.
- drop official support for Python 3.6 and add support for Python 3.10
- remove deprecated members Long and Unicode PR #108
- add support for Python 3.9 PR #108
- make comparison used in C safe (fix bug introduced in 0.5.0) PR #107
- fix bug in using atomlist from C PR #102
- clarify Unicode deprecation warning PR #102
- drop Python 2 support PR #83
- use cppy to write the c++ extension PR #83
- add c++ implememtation of AtomDict PR #93
- add a Set member PR #93
- improve validation error messages for Instance and Subclass PR #91
- improve validation of validation mode for Instance and Subclass PR #91
- ensure cached_property are always read-only #84
- improve test coverage #84
- properly implement traverse and clear for atomlist #84 Closes #69
- allow to initialize sortedmap using a dict or an iterable of pairs #84
- fix sortedmap repr #84
- make sortedmap iterable #84
- fix a segfault in SetAttr.ObjectCall_ObjectNameValue #84
- make the clone method of members more homogeneous for container members #84
- add support for Python 3.7 which introduced FAST_CALL protocol for list methods #81
- proper size check when creating a list #79
- drop dependency of future that was taking a large time to import #78
- add a fall-back to type name/pointer comparison on Python 3. Otherwise sortedmap can fail for non homogeneously typed keys. #77
- Python 3 support. _c063e523dd9_
- Fix a bug in resolution of Forward* members. _92244cf1e75_
- Move tests out of main source tree.
- Move Property behaviors to C++.
- Various maintenance related changes.
- Add a Subclass member type. a1261b94251
- Fix a bug with in multiple member assignment. 65cb312e2d7
- Fix a subtle bug with multiple inheritance. 82aa3c99270
- Added FloatRange member. ef05758c50e
- Added 'strict' keyword to Str. 8bda51cfee9
- Added a 'tag' method to Member for setting metadata. 340adbbf5a9
- Allow unicode string as observer topics. 441ff55ba73
- Added a 'strict' keyword to Int. 2ca8b542e8b
- Added a slew of examples.
- Minor bug fixes and cleanup.
Special thanks to Steven Silvester (@blink1073) for all of his contributions to this release.
- Add more flexibility for unobserving an object. f4ac152ffdf
- Add support for static callable observers. bc630777965
- Add support for single dotted extended observers. f6a33ee4d57
- Make atomref a singleton per Atom instance. b793dec1336
- Use Atom instance methods as observers without requiring weakrefs. 31df89b7e8
- Bugfix for typed ContainerList. e4f96706ff
- Make atomlist subclass friendly. 21396e8d1e
- Add an integer enum class. d2e80e3231
- First version with release notes.
- Add the ability to monitor the lifetime of an Atom object without weakrefs. 7596aa1b48
- Move the implemenations for List and ContainerList into C++. 7596aa1b48
- Add support for pickling Atom objects. 7596aa1b48