You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When declaring a dataclass with @dataclass_json(letter_case=SNAKE), it appears that name conversion is creating extraneous underscores for the output name like so: test_123 maps to test__1_2_3
Specifically, it seems to be double-underscoring between alphabetic and numeric characters separated by a single underscore, and adding an underscore between each numeric character.
I haven't been able to reproduce this behavior for other casings.
Code snippet that reproduces the issue
from dataclasses import (
dataclass,
asdict
)
from dataclasses_json import (
dataclass_json,
LetterCase
)
@dataclass_json(letter_case=LetterCase.SNAKE)
@dataclass
class Foo:
test_123: str
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass
class Bar:
test_123: str
@dataclass_json()
@dataclass
class Baz:
test_123: str
f = Foo(test_123=1)
asdict(f)
# '{"test_123": 1}'
f.to_dict()
# '{"test__1_2_3": 1}' <--- issue present here
b = Bar(test_123=1)
asdict(b)
# '{"test_123": 1}'
b.to_dict()
# '{"test123": 1}'
z = Baz(test_123=1)
asdict(z)
# '{"test_123": 1}'
z.to_dict()
# '{"test_123": 1}'
Describe the results you expected
# I expect `test_123` to map to `test_123` like so:
from dataclasses import (
dataclass,
asdict
)
from dataclasses_json import (
dataclass_json,
LetterCase
)
@dataclass_json(letter_case=LetterCase.SNAKE)
@dataclass
class Foo:
test_123: str
f = Foo(test_123=1)
asdict(f)
# '{"test_123": 1}'
f.to_dict()
# '{"test_123": 1}' <--- not what actually prints
Description
When declaring a dataclass with
@dataclass_json(letter_case=SNAKE)
, it appears that name conversion is creating extraneous underscores for the output name like so:test_123
maps totest__1_2_3
Specifically, it seems to be double-underscoring between alphabetic and numeric characters separated by a single underscore, and adding an underscore between each numeric character.
I haven't been able to reproduce this behavior for other casings.
Code snippet that reproduces the issue
Describe the results you expected
Python version you are using
Python 3.10.8
Environment description
dataclasses-json==0.6.4
marshmallow==3.20.2
mypy-extensions==1.0.0
packaging==23.2
typing-inspect==0.9.0
typing_extensions==4.9.0
The text was updated successfully, but these errors were encountered: