mirror of
				https://github.com/encode/django-rest-framework.git
				synced 2025-10-31 16:07:38 +03:00 
			
		
		
		
	Thanks to Jon Dufresne (@jdufresne) for review. Co-authored-by: Asif Saif Uddin <auvipy@gmail.com> Co-authored-by: Rizwan Mansuri <Rizwan@webbyfox.com>
		
			
				
	
	
		
			38 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			38 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| """
 | |
| Wrapper for the builtin json module that ensures compliance with the JSON spec.
 | |
| 
 | |
| REST framework should always import this wrapper module in order to maintain
 | |
| spec-compliant encoding/decoding. Support for non-standard features should be
 | |
| handled by users at the renderer and parser layer.
 | |
| """
 | |
| import functools
 | |
| import json  # noqa
 | |
| 
 | |
| 
 | |
| def strict_constant(o):
 | |
|     raise ValueError('Out of range float values are not JSON compliant: ' + repr(o))
 | |
| 
 | |
| 
 | |
| @functools.wraps(json.dump)
 | |
| def dump(*args, **kwargs):
 | |
|     kwargs.setdefault('allow_nan', False)
 | |
|     return json.dump(*args, **kwargs)
 | |
| 
 | |
| 
 | |
| @functools.wraps(json.dumps)
 | |
| def dumps(*args, **kwargs):
 | |
|     kwargs.setdefault('allow_nan', False)
 | |
|     return json.dumps(*args, **kwargs)
 | |
| 
 | |
| 
 | |
| @functools.wraps(json.load)
 | |
| def load(*args, **kwargs):
 | |
|     kwargs.setdefault('parse_constant', strict_constant)
 | |
|     return json.load(*args, **kwargs)
 | |
| 
 | |
| 
 | |
| @functools.wraps(json.loads)
 | |
| def loads(*args, **kwargs):
 | |
|     kwargs.setdefault('parse_constant', strict_constant)
 | |
|     return json.loads(*args, **kwargs)
 |