Fixed #12914 -- Use yaml faster C implementation when available
Thanks Beuc for the report and the initial patch.
This commit is contained in:
parent
c8eff0dbcb
commit
a843539af2
|
@ -14,8 +14,15 @@ from django.core.serializers.python import Serializer as PythonSerializer
|
||||||
from django.core.serializers.python import Deserializer as PythonDeserializer
|
from django.core.serializers.python import Deserializer as PythonDeserializer
|
||||||
from django.utils import six
|
from django.utils import six
|
||||||
|
|
||||||
|
# Use the C (faster) implementation if possible
|
||||||
|
try:
|
||||||
|
from yaml import CSafeLoader as SafeLoader
|
||||||
|
from yaml import CSafeDumper as SafeDumper
|
||||||
|
except ImportError:
|
||||||
|
from yaml import SafeLoader, SafeDumper
|
||||||
|
|
||||||
class DjangoSafeDumper(yaml.SafeDumper):
|
|
||||||
|
class DjangoSafeDumper(SafeDumper):
|
||||||
def represent_decimal(self, data):
|
def represent_decimal(self, data):
|
||||||
return self.represent_scalar('tag:yaml.org,2002:str', str(data))
|
return self.represent_scalar('tag:yaml.org,2002:str', str(data))
|
||||||
|
|
||||||
|
@ -58,7 +65,7 @@ def Deserializer(stream_or_string, **options):
|
||||||
else:
|
else:
|
||||||
stream = stream_or_string
|
stream = stream_or_string
|
||||||
try:
|
try:
|
||||||
for obj in PythonDeserializer(yaml.safe_load(stream), **options):
|
for obj in PythonDeserializer(yaml.load(stream, Loader=SafeLoader), **options):
|
||||||
yield obj
|
yield obj
|
||||||
except GeneratorExit:
|
except GeneratorExit:
|
||||||
raise
|
raise
|
||||||
|
|
Loading…
Reference in New Issue