First, the springs.cli.Flag dataclass. This change was addressed by implementing a __hash__ method.
Second, in the configs in tests/fixtures/configs. Here, the PR makes dataclasses hashable by passing unsafe_hash=True to the dataclass wrapper function.
using default_factory instead of directly instantiating the. This led to an error within omegaconf: Dict[Any, Any] cannot be assigned type Field. (or something like that)
using the sp.fobj method to wrap the . This led to an omegaconf error cannot pickle 'mappingproxy' object (might be related to deepcopying a dataclass)
explicitly defining __hash__ methods on all of the configs in tests/fixtures/configs. This seemed like too much work compared to just using unsafe_hash=True.
Thank you @bnewm0609! I hadn't researched options myself, so this was very helpful. I decided to go with the default_factory= option as it is (a) in line with what omegaconf library recommends, and (b) safer.
This PR addresses an update to the
dataclasses
module in python 3.11, which prevents adding mutable fields to dataclasses by default. There were a few places where this appears.First, the
springs.cli.Flag
dataclass. This change was addressed by implementing a__hash__
method.Second, in the configs in
tests/fixtures/configs
. Here, the PR makes dataclasses hashable by passingunsafe_hash=True
to thedataclass
wrapper function.There are other approaches to this outlined here:
default_factory
instead of directly instantiating the. This led to an error within omegaconf:Dict[Any, Any] cannot be assigned type Field
. (or something like that)sp.fobj
method to wrap the . This led to an omegaconf errorcannot pickle 'mappingproxy' object
(might be related to deepcopying a dataclass)__hash__
methods on all of the configs intests/fixtures/configs
. This seemed like too much work compared to just usingunsafe_hash=True
.