def test_parse(self): """ Make sure the `QueryDict` works OK """ parser = FormParser() stream = StringIO(self.string) data = parser.parse(stream) self.assertEqual(Form(data).is_valid(), True)
def test_parse(self): """ Make sure the `QueryDict` works OK """ parser = FormParser() stream = io.StringIO(self.string) data = parser.parse(stream) assert Form(data).is_valid() is True
def post(self, request, *kwargs): parser = FormParser() query_dict = parser.parse(request) contact = Contact.objects.filter(number=query_dict["From"]).first() if not contact: contact = Contact(number=query_dict["From"]) contact.save() if contact.number != os.environ["TWILIO_NUMBER"]: sender = "them" else: sender = "you" text = Text(sender=sender, contact=contact, body=query_dict["Body"]) text.save() return HttpResponse()
def check_request_body_for_id(self, request): """ An Update (PUT/PATCH) request must contain the ID of the object to be updated. Later, we can allow Update of multiple objects, or the entire queryset. """ id = None try: data = request.data id = data[self.lookup_field] except (AttributeError, MultiValueDictKeyError): try: if "application/json" in request.META['CONTENT_TYPE']: str_data = request.body.decode('utf-8') # Make this into a properly-formatted JSON string. id = self.id_from_json(str_data) elif "multipart/form-data" in request.META['CONTENT_TYPE']: if self.lookup_field is 'id' or self.lookup_field is 'pk': lookup_field_string = "(?:id|pk)" else: lookup_field_string = self.lookup_field expression = re.compile('name="{lookup_field}"\r\n\r\n([^\r]+)\r\n'.format(lookup_field=lookup_field_string)) id_set = False iterator = expression.finditer(request.body.decode('utf-8')) for match in iterator: id = match.groups()[0] id_set = True if not id_set: id = self.id_from_json(request.body.decode('utf-8')) elif "application/x-www-form-urlencoded" in request.META['CONTENT_TYPE']: parser = FormParser() stream = StringIO(request.body.decode('utf-8')) data = parser.parse(stream) if self.lookup_field is 'id' or self.lookup_field is 'pk': if 'id' in data: id = data['id'] elif 'pk' in data: id = data['pk'] else: id = data[self.lookup_field] except AttributeError: return False except KeyError: logger.exception("Missing lookup field {} on view {} ".format(self.lookup_field, self)) raise CRUDException("Missing {lookup_field}".format(lookup_field=self.lookup_field), 400) except ValueError: logger.exception("CRUDFilters received improper json.") raise CRUDException("Improper json", 400) try: if id is None: logger.exception("Missing lookup field {} on view {} ".format(self.lookup_field, self)) raise CRUDException("Missing {lookup_field}".format(lookup_field=self.lookup_field), 400) self.obj_id = id return self.obj_id except KeyError: logger.exception("Update Operations must include {} in the request body.".format(self.lookup_field)) raise CRUDException("Update operations must include " + self.lookup_field + " in the request body.", status_code=400)
def check_request_body_for_id(self, request): """ An Update (PUT/PATCH) request must contain the ID of the object to be updated. Later, we can allow Update of multiple objects, or the entire queryset. """ id = None try: data = request.data id = data[self.lookup_field] except (AttributeError, MultiValueDictKeyError): try: if "application/json" in request.META['CONTENT_TYPE']: str_data = request.body.decode('utf-8') # Make this into a properly-formatted JSON string. id = self.id_from_json(str_data) elif "multipart/form-data" in request.META['CONTENT_TYPE']: if self.lookup_field is 'id' or self.lookup_field is 'pk': lookup_field_string = "(?:id|pk)" else: lookup_field_string = self.lookup_field expression = re.compile( 'name="{lookup_field}"\r\n\r\n([^\r]+)\r\n'.format( lookup_field=lookup_field_string)) id_set = False iterator = expression.finditer( request.body.decode('utf-8')) for match in iterator: id = match.groups()[0] id_set = True if not id_set: id = self.id_from_json(request.body.decode('utf-8')) elif "application/x-www-form-urlencoded" in request.META[ 'CONTENT_TYPE']: parser = FormParser() stream = StringIO(request.body.decode('utf-8')) data = parser.parse(stream) if self.lookup_field is 'id' or self.lookup_field is 'pk': if 'id' in data: id = data['id'] elif 'pk' in data: id = data['pk'] else: id = data[self.lookup_field] except AttributeError: return False except KeyError: logger.exception("Missing lookup field {} on view {} ".format( self.lookup_field, self)) raise CRUDException( "Missing {lookup_field}".format( lookup_field=self.lookup_field), 400) except ValueError: logger.exception("CRUDFilters received improper json.") raise CRUDException("Improper json", 400) try: if id is None: logger.exception("Missing lookup field {} on view {} ".format( self.lookup_field, self)) raise CRUDException( "Missing {lookup_field}".format( lookup_field=self.lookup_field), 400) self.obj_id = id return self.obj_id except KeyError: logger.exception( "Update Operations must include {} in the request body.". format(self.lookup_field)) raise CRUDException("Update operations must include " + self.lookup_field + " in the request body.", status_code=400)