{"record":{"id":"7294581747b9c27f","repo":"apache/beam","slug":"unrecognized-type-info-type-info-r-generate-yaml-docs","errorCode":null,"errorMessage":"Unrecognized type_info: {type_info!r}","messagePattern":"Unrecognized type_info: (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"sdks/python/apache_beam/yaml/generate_yaml_docs.py","lineNumber":89,"sourceCode":"    ]\n  elif type_info == \"map_type\":\n    if beam_type.map_type.key_type.atomic_type == schema_pb2.STRING:\n      return {\n          'a': _fake_value(name + '_value_a', beam_type.map_type.value_type),\n          'b': _fake_value(name + '_value_b', beam_type.map_type.value_type),\n          'c': '...',\n      }\n    else:\n      return {\n          _fake_value(name + '_key', beam_type.map_type.key_type): _fake_value(\n              name + '_value', beam_type.map_type.value_type)\n      }\n  elif type_info == \"row_type\":\n    return _fake_row(beam_type.row_type.schema)\n  elif type_info == \"logical_type\":\n    return name\n  else:\n    raise ValueError(f\"Unrecognized type_info: {type_info!r}\")\n\n\ndef _fake_row(schema):\n  if schema is None:\n    return '...'\n  return {f.name: _fake_value(f.name, f.type) for f in schema.fields}\n\n\ndef pretty_example(provider, t, base_t=None):\n  spec = {'type': base_t or t}\n  try:\n    requires_inputs = provider.requires_inputs(t, {})\n  except Exception:\n    requires_inputs = False\n  if requires_inputs:\n    spec['input'] = '...'\n  config_schema = provider.config_schema(t)\n  if config_schema is None or config_schema.fields:","sourceCodeStart":71,"sourceCodeEnd":107,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/python/apache_beam/yaml/generate_yaml_docs.py#L71-L107","documentation":"generate_yaml_docs.py's _fake_value builds example fake values for Beam schema types when generating YAML docs. When the Beam FieldType's WhichOneof('type_info') returns a string the function does not handle, it raises ValueError with the unrecognized type_info. This means the docs generator encountered a Beam schema type (e.g. a newly added proto type) it has no fake-value rendering for.","triggerScenarios":"Calling _fake_value (directly or via _fake_row while faking a row schema) with a Beam FieldType whose type_info discriminator is not one of the handled branches (atomic, array, iterable, map, row_type, logical_type, etc.), e.g. enum_type or duration/micros-int types added in newer Beam proto versions.","commonSituations":"Running the YAML docs generation over transforms whose inferred schemas use newer or unusual Beam types; Beam proto version drift where a new type_info kind appears before generate_yaml_docs.py was updated.","solutions":["Add an elif branch in _fake_value handling the missing type_info and returning an appropriate fake value","Check Beam schema proto docs for the type_info string and map it to a sensible placeholder","Pin/align the Beam version so the docs generator matches the schema proto version in use"],"exampleFix":"# before\n  elif type_info == \"logical_type\":\n    return name\n  else:\n    raise ValueError(f\"Unrecognized type_info: {type_info!r}\")\n# after\n  elif type_info == \"logical_type\":\n    return name\n  elif type_info == \"enum_type\":\n    return next(iter(beam_type.enum_type.enum_options), 'ENUM')\n  else:\n    raise ValueError(f\"Unrecognized type_info: {type_info!r}\")","handlingStrategy":"validation","validationCode":"HANDLED = {'atomic_type','array_type','iterable_type','map_type','row_type','logical_type'}\nunsupported = [t.WhichOneof('type_info') for t in all_field_types(beam_schema) if t.WhichOneof('type_info') not in HANDLED]\nif unsupported:\n    raise ValueError(f'Docs generator cannot render type_info: {unsupported}')","typeGuard":"def is_supported_for_docs(beam_type) -> bool:\n    return beam_type.WhichOneof('type_info') in {'atomic_type','array_type','iterable_type','map_type','row_type','logical_type'}","tryCatchPattern":"try:\n    fake = _fake_value(name, beam_type)\nexcept ValueError as e:\n    logging.warning('Skipping example for %s: %s', name, e)\n    fake = '...'","preventionTips":["Keep _fake_value branches in sync with schema_pb2.FieldType type_info kinds","Test docs generation against all transforms whenever the Beam proto version changes","Pin apache-beam versions used for docs generation"],"tags":["python","apache-beam","yaml","schema","type-system"],"backgroundTag":"invalid-enum-value","analyzedSha":"12126d8942aaf848030c478b4c6a28c6af861c66","analyzedAt":"2026-09-13T01:50:10.254Z","contentChangedAt":"2026-09-13T01:50:10.254Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}