Fix dataclass decorator other parameters

This commit is contained in:
Eric Masseran
2025-03-18 00:42:58 +01:00
parent 999332ef77
commit a3fd90d734
2 changed files with 36 additions and 5 deletions

View File

@@ -613,6 +613,9 @@ def _dataclass(value, arguments, callback):
# The decorator function from dataclass_transform acting as the # The decorator function from dataclass_transform acting as the
# dataclass decorator. # dataclass decorator.
and not isinstance(value, Decoratee) and not isinstance(value, Decoratee)
# The decorator function from dataclass_transform acting as the
# dataclass decorator with customized parameters
and not isinstance(value, DataclassDecorator)
) )
return ValueSet( return ValueSet(

View File

@@ -471,8 +471,7 @@ dataclass_transform_cases = [
t: int t: int
p = 5 p = 5
class X(ModelBase):'''), [], True], class X(ModelBase):'''), [], True],
# 3/ Init tweaks # 3/ Init custom init
# custom init
[dedent(''' [dedent('''
@dataclass_transform() @dataclass_transform()
class Y(): class Y():
@@ -482,21 +481,22 @@ dataclass_transform_cases = [
def __init__(self, toto: str): def __init__(self, toto: str):
pass pass
'''), ["toto"], False], '''), ["toto"], False],
# Class based init=false # 4/ init=false
# Class based
[dedent(''' [dedent('''
@dataclass_transform @dataclass_transform
class Y(): class Y():
y: int y: int
z = 5 z = 5
class X(Y, init=False):'''), [], False], class X(Y, init=False):'''), [], False],
# Decorator based init=false # Decorator based
[dedent(''' [dedent('''
@dataclass_transform @dataclass_transform
def create_model(): def create_model():
pass pass
@create_model(init=False) @create_model(init=False)
class X:'''), [], False], class X:'''), [], False],
# Metaclass based init=false # Metaclass based
[dedent(''' [dedent('''
@dataclass_transform @dataclass_transform
class ModelMeta(): class ModelMeta():
@@ -506,6 +506,31 @@ dataclass_transform_cases = [
t: int t: int
p = 5 p = 5
class X(ModelBase, init=False):'''), [], False], class X(ModelBase, init=False):'''), [], False],
# 4/ Other parameters
# Class based
[dedent('''
@dataclass_transform
class Y():
y: int
z = 5
class X(Y, eq=True):'''), [], True],
# Decorator based
[dedent('''
@dataclass_transform
def create_model():
pass
@create_model(eq=True)
class X:'''), [], True],
# Metaclass based
[dedent('''
@dataclass_transform
class ModelMeta():
y: int
z = 5
class ModelBase(metaclass=ModelMeta):
t: int
p = 5
class X(ModelBase, eq=True):'''), [], True],
] ]
ids = [ ids = [
@@ -520,6 +545,9 @@ ids = [
"base_transformed_init_false", "base_transformed_init_false",
"decorator_transformed_init_false", "decorator_transformed_init_false",
"metaclass_transformed_init_false", "metaclass_transformed_init_false",
"base_transformed_other_parameters",
"decorator_transformed_other_parameters",
"metaclass_transformed_other_parameters",
] ]