google / etils

Collection of eclectic utils for python.
https://etils.readthedocs.io
Apache License 2.0
195 stars 20 forks source link

Freezing unfrozen dataclasses requires unfreezing them beforehand. #406

Open SobhanMP opened 1 year ago

SobhanMP commented 1 year ago
import dataclasses
from etils import edc
@edc.dataclass(allow_unfrozen=True)
@dataclasses.dataclass(eq=True, kw_only=True)
class Conf:
    x: int = 3

a = Conf()
a.x = 2 # verify that a is not frozen
a.frozen() # complains that .frozen() can only be called after .unfrozen()

As the code above shows, allow_unfrozen seems to assume that the dataclass is frozen by default. I think that it should verify the assumption.

Conchylicultor commented 1 year ago

Yes, this makes sense! Thank you for the feedback. Sending a fix now

SobhanMP commented 1 year ago

Would have been nice to be able to freeze not frozen data classes too.