MCPcopy Index your code
hub / github.com/encode/django-rest-framework / APIRequestFactory

Class APIRequestFactory

rest_framework/test.py:122–227  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

120
121
122class APIRequestFactory(DjangoRequestFactory):
123 renderer_classes_list = api_settings.TEST_REQUEST_RENDERER_CLASSES
124 default_format = api_settings.TEST_REQUEST_DEFAULT_FORMAT
125
126 def __init__(self, enforce_csrf_checks=False, **defaults):
127 self.enforce_csrf_checks = enforce_csrf_checks
128 self.renderer_classes = {}
129 for cls in self.renderer_classes_list:
130 self.renderer_classes[cls.format] = cls
131 super().__init__(**defaults)
132
133 def _encode_data(self, data, format=None, content_type=None):
134 """
135 Encode the data returning a two tuple of (bytes, content_type)
136 """
137 if data is None:
138 return (b'', content_type)
139
140 assert format is None or content_type is None, (
141 'You may not set both `format` and `content_type`.'
142 )
143
144 if content_type:
145 try:
146 data = self._encode_json(data, content_type)
147 except AttributeError:
148 pass
149
150 # Content type specified explicitly, treat data as a raw bytestring
151 ret = force_bytes(data, settings.DEFAULT_CHARSET)
152
153 else:
154 format = format or self.default_format
155
156 assert format in self.renderer_classes, (
157 "Invalid format '{}'. Available formats are {}. "
158 "Set TEST_REQUEST_RENDERER_CLASSES to enable "
159 "extra request formats.".format(
160 format,
161 ', '.join(["'" + fmt + "'" for fmt in self.renderer_classes])
162 )
163 )
164
165 # Use format and render the data into a bytestring
166 renderer = self.renderer_classes[format]()
167 ret = renderer.render(data)
168
169 # Determine the content-type header from the renderer
170 content_type = renderer.media_type
171 if renderer.charset:
172 content_type = "{}; charset={}".format(
173 content_type, renderer.charset
174 )
175
176 # Coerce text to bytes if required.
177 if isinstance(ret, str):
178 ret = ret.encode(renderer.charset)
179

Calls

no outgoing calls