def put(self, request): req_data = json.loads(request.body) schema = (self.schema)() try: verse_updates = schema.load(req_data, partial=('verse', 'translation', 'purport')) except MarshmallowValidationError as e: raise api_exceptions.BadRequestData(errors=e.messages) remove = ['chapter_num', 'canto_num', 'verse_num'] for item in remove: if item in verse_updates.keys(): del verse_updates[item] verse_obj = Verse.objects.filter(verse_id=req_data["verse_id"]) if not verse_obj: raise api_exceptions.ValidationError(errors="Verse doesn't exist") try: verse_obj.update(**verse_updates) except (DjangoValidationError, IntegrityError) as e: raise api_exceptions.ValidationError(errors=e.message_dict) resp_data = make_response({}, message="Successfully updated verse", code=PUT_SUCCESS_CODE) return JsonResponse(resp_data)
def post(self, request): # TODO :- Need to handle validation of verse_id in POST and PUT updates req_data = json.loads(request.body) schema = (self.schema)() verse_details = req_data["verse_id"].split(".") req_data["canto_num"] = int(verse_details[0]) req_data["chapter_num"] = int(verse_details[1]) if '-' in verse_details[2]: start, end = verse_details[2].split("-") req_data["verse_num"] = int(start) req_data["verse_num_end"] = int(end) else: req_data["verse_num"] = int(verse_details[2]) try: new_verses_data = schema.load(req_data) except MarshmallowValidationError as e: raise api_exceptions.BadRequestData(errors=e.messages) try: new_verses = Verse.objects.create(**new_verses_data) except DjangoValidationError as e: raise api_exceptions.ValidationError(errors=e.message_dict) except IntegrityError as e: raise api_exceptions.ValidationError(errors="DB Integrity error") resp_data = schema.dump(new_verses) return JsonResponse(resp_data)
def post(self, request): req_data = json.loads(request.body) schema = (self.schema)() resp_data = [] verse_id = req_data['verse_id'] for req in req_data['purporttags']: try: req['verse_id'] = verse_id new_purport_section_tag = schema.load(req) except MarshmallowValidationError as e: raise api_exceptions.BadRequestData(errors=e.messages) try: new_purport_section_tag["tag"] = Tag3.objects.get( name=new_purport_section_tag["tag"]) purport_section_tags = PurportSectionTag.objects.create( **new_purport_section_tag) except DjangoValidationError as e: raise api_exceptions.ValidationError(errors=e.message_dict) except IntegrityError as e: raise api_exceptions.ValidationError( errors="DB Integrity error") resp_data.append(schema.dump(purport_section_tags)) return JsonResponse( make_response(resp_data, "Successfully added purport tags", POST_SUCCESS_CODE))
def delete(self, request, id, format=None): tag = self.schema.model.objects.filter(id=id) if not tag: raise api_exceptions.ValidationError(errors="Not a valid tag_id") tag[0].delete() return JsonResponse( make_response({}, "Successfully deleted purport tag", DELETE_SUCCESS_CODE))
def put(self, request, id, format=None): tag = self.schema.model.objects.filter(id=id) if request.user.user_type != 3: raise api_exceptions.PermissionDenied( errors="Only reviewers are allowed to update") if not tag: raise api_exceptions.ValidationError(errors="Not a valid tag_id") tag[0].reviewer = request.user tag[0].save() return JsonResponse( make_response({}, "Successfully reviewed purport tag", PUT_SUCCESS_CODE))
def post(self, request): req_data = json.loads(request.body) schema = (self.schema)() resp_data = [] verse_id = req_data["verse_id"] for req in req_data["translationtags"]: try: req['verse_id'] = verse_id new_translation_tag = schema.load(req) print(new_translation_tag) except MarshmallowValidationError as e: raise api_exceptions.BadRequestData(errors=e.messages) new_translation_tag["verse"] = Verse.objects.get( verse_id=new_translation_tag["verse_id"]) new_translation_tag["tag"] = Tag3.objects.get( name=new_translation_tag["tag"]) new_translation_tag["tagger"] = request.user try: translation_tags = self.schema.model.objects.create( **new_translation_tag) except DjangoValidationError as e: raise api_exceptions.ValidationError(errors=e.message_dict) except IntegrityError as e: if new_translation_tag.get("tagger_remark"): t_tag = self.schema.model.objects.filter( verse_id=new_translation_tag["verse_id"], tag=new_translation_tag["tag"]) t_tag.update( tagger_remark=new_translation_tag["tagger_remark"]) t_tag[0].save() resp_data.append(schema.dump(t_tag[0])) continue else: raise api_exceptions.ValidationError( errors="DB Integrity error") resp_data.append(schema.dump(translation_tags)) return JsonResponse( make_response(resp_data, "Successfully added translation tags", POST_SUCCESS_CODE))
def post(self, request): # TODO :- Need to handle validation of verse_id in POST and PUT updates req_data = json.loads(request.body) schema = (self.schema)() try: additional_details = schema.load(req_data) except MarshmallowValidationError as e: raise api_exceptions.BadRequestData(errors=e.messages) verse_id = additional_details.pop("verse_id") try: Verse.objects.filter(verse_id=verse_id).update( **additional_details) except (DjangoValidationError, IntegrityError) as e: raise api_exceptions.ValidationError(errors=e.message_dict) resp_data = make_response( {}, message="Successfully added verse context and title", code=POST_SUCCESS_CODE) return JsonResponse(resp_data)