{"record":{"id":"8b7f5baa1cb8b6b8","repo":"nodejs/node","slug":"unparsed","errorCode":null,"errorMessage":"unparsed","messagePattern":"unparsed","errorType":"exception","errorClass":"ExceptionGroup","httpStatus":null,"severity":"error","filePath":"tools/gyp/pylib/packaging/metadata.py","lineNumber":727,"sourceCode":"    ) -> \"Metadata\":\n        \"\"\"Parse metadata from email headers.\n\n        If *validate* is true, the metadata will be validated. All exceptions\n        related to validation will be gathered and raised as an :class:`ExceptionGroup`.\n        \"\"\"\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(","sourceCodeStart":709,"sourceCodeEnd":745,"githubUrl":"https://github.com/nodejs/node/blob/1b2de5e052fc0fb95fd7fb6846dcec4ade598e9e/tools/gyp/pylib/packaging/metadata.py#L709-L745","documentation":"An ExceptionGroup raised by Metadata.from_email when the parsed email contains header keys that parse_email could not map to a known raw metadata field. Each unrecognized or invalid header becomes an InvalidMetadata entry, and the whole group is raised under the message 'unparsed'.","triggerScenarios":"Calling Metadata.from_email(data, validate=True) where data contains email headers not in _EMAIL_TO_RAW_MAPPING (truly unknown fields) or known fields whose data failed to parse into raw form. The for-loop over 'unparsed' builds an InvalidMetadata per key.","commonSituations":"A METADATA file with custom/typo headers (e.g. 'X-Something' or a misspelled 'Classifier'), or headers produced by a newer core-metadata revision than this vendored packaging knows about.","solutions":["Inspect the ExceptionGroup's sub-exceptions to list the offending header keys.","Remove or correct the unrecognized headers in the source metadata.","Pass validate=False to from_email to accept unparsed fields silently.","Upgrade the packaging library if the header is valid in a newer core-metadata spec."],"exampleFix":"# before\nmeta = Metadata.from_email(data)\n\n# after\nmeta = Metadata.from_email(data, validate=False)","handlingStrategy":"validation","validationCode":"from packaging.metadata import _EMAIL_TO_RAW_MAPPING\ndef known_headers(msg):\n    return [k for k in msg if k not in _EMAIL_TO_RAW_MAPPING]  # empty => safe","typeGuard":null,"tryCatchPattern":"try:\n    meta = Metadata.from_email(data, validate=True)\nexcept ExceptionGroup as eg:\n    unknown = [e.field for e in eg.exceptions]\n    # strip unknown headers from source, or pass validate=False","preventionTips":["Use only core-metadata field names in METADATA files.","Run a metadata linter (e.g. twine check) before release.","Pass validate=False when ingesting untrusted third-party metadata."],"tags":["packaging","metadata","validation","headers","exceptiongroup"],"backgroundTag":null,"analyzedSha":"1b2de5e052fc0fb95fd7fb6846dcec4ade598e9e","analyzedAt":"2026-08-13T00:53:24.642Z","schemaVersion":2},"datasetVersion":"2026-08-13T04:17:16.726Z"}