{"record":{"id":"08c43b11d08fca08","repo":"OpenAPITools/openapi-generator","slug":"property-s-in-model-s-uses-generated-python-memb","errorCode":null,"errorMessage":"property %s in model %s uses generated Python member name %s","messagePattern":"property (.+?) in model (.+?) uses generated Python member name (.+?)","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PythonClientCodegen.java","lineNumber":827,"sourceCode":"                    CodegenConstants.X_PY_PUBLIC_NAME, property.name);\n            boolean explicitPublicName = property.vendorExtensions.containsKey(\n                    CodegenConstants.X_PY_EXPLICIT_PUBLIC_NAME);\n            boolean legacyMetadataCollision = compatibleWithPythonLegacy\n                    && (LEGACY_MODEL_METADATA_MEMBER_NAMES.contains(publicName)\n                    || LEGACY_MODEL_METADATA_MEMBER_NAMES.contains(property.name));\n            boolean publicNameCollision = generatedMembers.contains(publicName)\n                    && (explicitPublicName\n                    || legacyMetadataCollision\n                    || nameMappingGeneratedMembers.contains(publicName));\n            boolean storageNameCollision = generatedMembers.contains(property.name)\n                    && (explicitPublicName\n                    || legacyMetadataCollision\n                    || nameMappingGeneratedMembers.contains(property.name));\n            if (publicNameCollision || storageNameCollision) {\n                String generatedMemberName = publicNameCollision\n                        ? publicName\n                        : property.name;\n                throw new IllegalArgumentException(String.format(Locale.ROOT,\n                        \"property %s in model %s uses generated Python member name %s\",\n                        property.baseName, model.name, generatedMemberName));\n            }\n            if (explicitPublicName\n                    && (!publicName.matches(\"[A-Za-z_][A-Za-z0-9_]*\")\n                    || PYTHON_KEYWORDS.contains(publicName)\n                    || publicName.startsWith(\"__\"))) {\n                throw new IllegalArgumentException(String.format(Locale.ROOT,\n                        \"property %s in model %s cannot use %s as its public Python name\",\n                        property.baseName, model.name, publicName));\n            }\n            if (explicitPublicName\n                    && (!property.name.matches(\"[A-Za-z][A-Za-z0-9_]*\")\n                    || PYTHON_KEYWORDS.contains(property.name)\n                    || MODEL_FIELD_NAME_COLLISIONS.contains(property.name)\n                    || MODEL_CLASS_BODY_NAMES.contains(property.name)\n                    || PYDANTIC_PRIVATE_MEMBER_NAMES.contains(property.name))) {\n                throw new IllegalArgumentException(String.format(Locale.ROOT,","sourceCodeStart":809,"sourceCodeEnd":845,"githubUrl":"https://github.com/OpenAPITools/openapi-generator/blob/fcec517be3cf5b7964296bcba25fbc97541484e7/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PythonClientCodegen.java#L809-L845","documentation":"When the python generator runs with --compatible-with-python-legacy or with a --name-mapping entry, it validates every property's public name and storage name against the set of members the generated model class itself defines (model class body names, model metadata, pydantic private members, legacy metadata names). If a mapped public name or the storage name equals one of those reserved generated members, generation aborts with this IllegalArgumentException.","triggerScenarios":"-g python --name-mapping foo=schema (public name collides with pydantic BaseModel.schema), or --name-mapping foo=json / foo=copy / foo=fields, or any property whose generated storage name hits a class-body name while --compatible-with-python-legacy is on.","commonSituations":"Teams adopting --name-mapping to rename snake_case wire properties to friendlier Python names accidentally map onto BaseModel/model-class members (schema, json, copy, validate, fields, dict). Legacy-mode users hit it when a spec property naturally sanitizes to one of the legacy metadata member names.","solutions":["Pick a different target name in --name-mapping, e.g. foo=schema_ or foo=schema_name instead of foo=schema","Rename the source property in the OpenAPI spec so its generated name no longer collides","Drop --compatible-with-python-legacy if you do not need 5.x-style model behavior; without it, non-mapped properties skip this strict check","List the reserved members (MODEL_CLASS_BODY_NAMES, MODEL_FIELD_NAME_COLLISIONS, pydantic private names) from PythonClientCodegen and treat them as blocked names in your mapping review"],"exampleFix":"# before\nopenapi-generator-cli generate -i api.yaml -g python --name-mapping json_payload=json\n# after\nopenapi-generator-cli generate -i api.yaml -g python --name-mapping json_payload=json_payload","handlingStrategy":"validation","validationCode":"# Reject mappings onto names the generated model class owns (Python):\nBLOCKED = {'schema', 'json', 'copy', 'dict', 'validate', 'construct', 'fields',\n           'model_fields', 'model_dump', 'from_orm', 'parse_obj'}  # extend from PythonClientCodegen lists\nfor target in mapping_targets:\n    assert target not in BLOCKED, f'{target} collides with a generated model member'","typeGuard":null,"tryCatchPattern":"try {\n    new DefaultGenerator().opts(input).generate();\n} catch (IllegalArgumentException e) {\n    // message: 'property X in model Y uses generated Python member name Z'\n    // fix the --name-mapping entry for X (or rename the property), then regenerate\n}","preventionTips":["Review --name-mapping targets against pydantic BaseModel/model-class member names before adopting them","Prefer renaming the property in the spec over ad-hoc mappings when possible","Only enable --compatible-with-python-legacy when the legacy metadata members are actually required"],"tags":["python","codegen","naming","name-collision","openapi-generator"],"backgroundTag":"property-name-collision","analyzedSha":"fcec517be3cf5b7964296bcba25fbc97541484e7","analyzedAt":"2026-08-22T11:13:11.613Z","schemaVersion":2},"datasetVersion":"2026-08-22T14:17:55.899Z"}