Fixed #12914 -- Use yaml faster C implementation when available

Thanks Beuc for the report and the initial patch.
This commit is contained in:
Claude Paroz 2013-01-05 18:01:16 +01:00
parent c8eff0dbcb
commit a843539af2
1 changed files with 9 additions and 2 deletions

View File

@ -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