{"record":{"id":"207e130b4128a272","repo":"nodejs/node","slug":"invalid-or-unparsed-metadata","errorCode":null,"errorMessage":"invalid or unparsed metadata","messagePattern":"invalid or unparsed metadata","errorType":"exception","errorClass":"ExceptionGroup","httpStatus":null,"severity":"error","filePath":"tools/gyp/pylib/packaging/metadata.py","lineNumber":732,"sourceCode":"        \"\"\"\n        raw, unparsed = parse_email(data)\n\n        if validate:\n            exceptions: list[Exception] = []\n            for unparsed_key in unparsed:\n                if unparsed_key in _EMAIL_TO_RAW_MAPPING:\n                    message = f\"{unparsed_key!r} has invalid data\"\n                else:\n                    message = f\"unrecognized field: {unparsed_key!r}\"\n                exceptions.append(InvalidMetadata(unparsed_key, message))\n\n            if exceptions:\n                raise ExceptionGroup(\"unparsed\", exceptions)\n\n        try:\n            return cls.from_raw(raw, validate=validate)\n        except ExceptionGroup as exc_group:\n            raise ExceptionGroup(\n                \"invalid or unparsed metadata\", exc_group.exceptions\n            ) from None\n\n    metadata_version: _Validator[_MetadataVersion] = _Validator()\n    \"\"\":external:ref:`core-metadata-metadata-version`\n    (required; validated to be a valid metadata version)\"\"\"\n    name: _Validator[str] = _Validator()\n    \"\"\":external:ref:`core-metadata-name`\n    (required; validated using :func:`~packaging.utils.canonicalize_name` and its\n    *validate* parameter)\"\"\"\n    version: _Validator[version_module.Version] = _Validator()\n    \"\"\":external:ref:`core-metadata-version` (required)\"\"\"\n    dynamic: _Validator[Optional[List[str]]] = _Validator(\n        added=\"2.2\",\n    )\n    \"\"\":external:ref:`core-metadata-dynamic`\n    (validated against core metadata field names and lowercased)\"\"\"\n    platforms: _Validator[Optional[List[str]]] = _Validator()","sourceCodeStart":714,"sourceCodeEnd":750,"githubUrl":"https://github.com/nodejs/node/blob/1b2de5e052fc0fb95fd7fb6846dcec4ade598e9e/tools/gyp/pylib/packaging/metadata.py#L714-L750","documentation":"A re-wrapping ExceptionGroup raised by Metadata.from_email after it has already checked for unparsed headers: when the subsequent cls.from_raw(raw, validate=validate) itself raises an ExceptionGroup (the 'invalid metadata' group), it is caught and re-raised with the broader message 'invalid or unparsed metadata', discarding the original cause via 'from None'.","triggerScenarios":"Calling Metadata.from_email(data, validate=True) where headers parsed cleanly into raw fields but one or more of those fields then fails raw-level validation inside from_raw. The inner 'invalid metadata' group is rebranded and re-raised here.","commonSituations":"A well-formed email whose field values are invalid (e.g. a Version header that is not PEP 440 compliant, or a name that fails canonicalization). The from None hides the original traceback chain, so the developer sees only this top-level group.","solutions":["Catch ExceptionGroup and read .exceptions to identify the failing raw fields.","Correct the offending field values in the source METADATA/PKG-INFO.","Pass validate=False to from_email to skip raw validation entirely."],"exampleFix":"# before\nmeta = Metadata.from_email(data, validate=True)\n\n# after\ntry:\n    meta = Metadata.from_email(data, validate=True)\nexcept ExceptionGroup as eg:\n    for sub in eg.exceptions:\n        print(sub)\n    raise","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try:\n    meta = Metadata.from_email(data, validate=True)\nexcept ExceptionGroup as eg:\n    for sub in eg.exceptions:\n        # sub is InvalidMetadata with .field; fix source accordingly\n        pass","preventionTips":["Validate field values (versions, names) before they reach metadata emission.","Keep the packaging library version current with the core-metadata spec you target.","Use validate=False for read-only inspection when strictness is not required."],"tags":["packaging","metadata","validation","exceptiongroup"],"backgroundTag":null,"analyzedSha":"1b2de5e052fc0fb95fd7fb6846dcec4ade598e9e","analyzedAt":"2026-08-13T00:53:24.642Z","schemaVersion":2},"datasetVersion":"2026-08-13T04:17:16.726Z"}