From a843539af2f557e9bdc71b9b5ef66eabe0e39e3c Mon Sep 17 00:00:00 2001 From: Claude Paroz Date: Sat, 5 Jan 2013 18:01:16 +0100 Subject: [PATCH] Fixed #12914 -- Use yaml faster C implementation when available Thanks Beuc for the report and the initial patch. --- django/core/serializers/pyyaml.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/django/core/serializers/pyyaml.py b/django/core/serializers/pyyaml.py index 4c11626badb..27239e04457 100644 --- a/django/core/serializers/pyyaml.py +++ b/django/core/serializers/pyyaml.py @@ -14,8 +14,15 @@ from django.core.serializers.python import Serializer as PythonSerializer from django.core.serializers.python import Deserializer as PythonDeserializer 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): return self.represent_scalar('tag:yaml.org,2002:str', str(data)) @@ -58,7 +65,7 @@ def Deserializer(stream_or_string, **options): else: stream = stream_or_string try: - for obj in PythonDeserializer(yaml.safe_load(stream), **options): + for obj in PythonDeserializer(yaml.load(stream, Loader=SafeLoader), **options): yield obj except GeneratorExit: raise