Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion lib/yaml/representer.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,11 @@
from .error import *
from .nodes import *

import datetime, copyreg, types, base64, collections
import datetime, copyreg, types, base64, collections, sys

if sys.version_info >= (3, 11):
from enum import IntEnum, StrEnum


class RepresenterError(YAMLError):
pass
Expand Down Expand Up @@ -33,6 +37,9 @@ def represent(self, data):
def represent_data(self, data):
if self.ignore_aliases(data):
self.alias_key = None
if sys.version_info >= (3, 11):
if isinstance(data, (IntEnum, StrEnum)):
data = data.value
else:
self.alias_key = id(data)
if self.alias_key is not None:
Expand Down
12 changes: 12 additions & 0 deletions tests/test_dump_load.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import sys

import pytest
import yaml

Expand All @@ -13,3 +15,13 @@ def test_load_no_loader():

def test_load_safeloader():
assert yaml.load("- foo\n", Loader=yaml.SafeLoader)


@pytest.mark.skipif(sys.version_info < (3, 11), reason="Requires Python 3.11 or higher")
def test_dump_str_enum():
from enum import StrEnum

class ContentType(StrEnum):
YAML = "YAML"

assert yaml.safe_load(yaml.safe_dump(ContentType.YAML)) == ContentType.YAML