Example #1
0
    def __init__(self, request):
        super().__init__(request.environ)
        self._request = request
        self.headers = {
            header_key: header_value
            for header_key, header_value in self._request.META.items()
            if "HTTP_" in header_key
        }
        self.url_parameters = self._request.GET.dict()
        self.body_parameters = {}
        self.body_files = {}
        if self._request.method == BaseRequest.NonSimpleMethod.POST.value or self._request.method == BaseRequest.NonSimpleMethod.PUT.value:
            if self._request.content_type == BaseRequest.ContentType.MULTIPART.value:
                parameters, files = MultiPartParser(
                    self._request.META, self._request,
                    self._request.upload_handlers).parse()
                self.body_parameters = {
                    key: value.replace("\r\n--", "")
                    for key, value in parameters.items()
                }
                self.body_files = files.dict()
                popable_items = []
                for file_name, file in self.body_files.items():
                    if file.content_type == BaseRequest.ContentType.JSON.value:
                        file_content = file.read().decode("utf-8")
                        dict_from_content = json.loads(file_content)
                        self.body_parameters[file_name] = dict_from_content
                        popable_items.append(file_name)
                for item in popable_items:
                    del self.body_files[item]

            elif self._request.content_type == BaseRequest.ContentType.TEXTPLAIN.value:
                file = ContentFile(request.body)
                self.body_files = {"empty": file}
            elif self._request.content_type == BaseRequest.ContentType.URLENCODED.value:
                self.body_parameters = QueryDict(request.body).dict()
            elif self._request.content_type == BaseRequest.ContentType.JSON.value:
                self.body_parameters = json.loads(request.body)