diff --git a/tests/formats/dataclass/test_filters.py b/tests/formats/dataclass/test_filters.py index 7fd222b50..aa095d301 100644 --- a/tests/formats/dataclass/test_filters.py +++ b/tests/formats/dataclass/test_filters.py @@ -111,6 +111,12 @@ def test_constant_value(self): attr = AttrFactory.create(types=[AttrTypeFactory.create(alias="alias")]) self.assertEqual("Alias", self.filters.constant_value(attr)) + def test_apply_substitutions_with_regexes(self): + self.filters.substitutions[ObjectType.CLASS]["(.*)Class"] = "\\1Type" + + actual = self.filters.apply_substitutions("FooClass", ObjectType.CLASS) + self.assertEqual("FooType", actual) + @mock.patch.object(Filters, "field_default_value") def test_field_definition(self, mock_field_default_value): mock_field_default_value.side_effect = [1, False] diff --git a/tests/models/test_config.py b/tests/models/test_config.py index e046e4447..cbf737a81 100644 --- a/tests/models/test_config.py +++ b/tests/models/test_config.py @@ -58,7 +58,7 @@ def test_create(self): ' \n' ' \n' ' \n' - ' \n' + ' \n' " \n" "\n" ) diff --git a/xsdata/formats/dataclass/filters.py b/xsdata/formats/dataclass/filters.py index cb19f6ce8..c5c6fed77 100644 --- a/xsdata/formats/dataclass/filters.py +++ b/xsdata/formats/dataclass/filters.py @@ -147,7 +147,7 @@ def class_name(self, name: str) -> str: def apply_substitutions(self, name: str, obj_type: ObjectType) -> str: for search, replace in self.substitutions[obj_type].items(): - name = re.sub(search, replace, name) + name = re.sub(rf"{search}", rf"{replace}", name) return name diff --git a/xsdata/models/config.py b/xsdata/models/config.py index bf085abed..9777f1132 100644 --- a/xsdata/models/config.py +++ b/xsdata/models/config.py @@ -443,7 +443,9 @@ def create(cls) -> "GeneratorConfig": ) obj.substitutions.substitution.append( - GeneratorSubstitution(type=ObjectType.CLASS, search="Class", replace="Type") + GeneratorSubstitution( + type=ObjectType.CLASS, search="(.*)Class$", replace="\\1Type" + ) ) return obj