def test_cron_validate_answers(request): requestProcessor = HttpRequestProcessor(request) user = request.user field_validation_cycle_util = FieldValidationCycleUtil() field_validation_cycle_util.cron_validate_answers() data = {} return requestProcessor.render_to_response(request,'website/test/test_cron_validate_answers.html', data, '')
def get_updates(self, jurisdictions, num, type="days"): if type == "days": obj3monthsbefore = self.objDateTimeNow - timedelta(days = num) else: obj3monthsbefore = self.objDateTimeNow - timedelta(seconds = num) print str(obj3monthsbefore.replace(tzinfo=utc)) updates = [] jurisdiction_list = [] for jurisdiction in jurisdictions: jurisdiction_list.append(jurisdiction.id) jups = jurisdiction.getLatestUpdates() jups = jups.filter(modify_datetime__gt = obj3monthsbefore.replace(tzinfo=utc)) jups = jups.filter(Q(approval_status = 'P')| Q(approval_status = 'A')) aaa = [] old_jurisdiction_id = 0 for up in jups: update_map = {} if old_jurisdiction_id != up.jurisdiction.id: update_map['title_flag'] = True old_jurisdiction_id = up.jurisdiction.id else: update_map['title_flag'] = False if up.approval_status == 'P': time_obj = TimeShow(up.create_datetime) creator= up.creator.get_profile().get_display_name() else: time_obj = TimeShow(up.status_datetime) creator = '' update_map['time'] = time_obj.get_show_time() update_map['creator'] = creator update_map['question'] = up.question.question validation_util_obj = FieldValidationCycleUtil() answer = validation_util_obj.get_formatted_value(up.value, up.question) update_map['answer'] = answer update_map['question_type'] = up.question.form_type update_map['jurisdiction'] = up.jurisdiction update_map['jurisdiction_name'] = up.jurisdiction.show_jurisdiction('short') if up.question.form_type == 'CF': if up.approval_status == 'P': update_map['type'] = 'Custom field suggested by ' + creator + ' '+ update_map['time'] else: update_map['type'] = 'Custom field suggested verified '+ update_map['time'] else: if up.approval_status == 'P': update_map['type'] = 'New suggestion for ' + up.question.question + ' by '+ creator + ' '+ update_map['time'] else: update_map['type'] = up.question.question +' verified '+ update_map['time'] updates.append(update_map) #updates[jurisdiction.id] = aaa #updates[jurisdiction.id] = jurisdiction.getLatestUpdates().filter(modify_datetime__lt = obj3monthsbefore) return updates, jurisdiction_list
def handle(self, *args, **options): print 'correct fee summation started.' fieldValidationCycleUtil_obj = FieldValidationCycleUtil() question_obj = Question.objects.get(id=16) if question_obj != None: AnswerReference_objs = AnswerReference.objects.filter( question=question_obj) if len(AnswerReference_objs) > 0: print str(len(AnswerReference_objs)) + " to be processed." for AnswerReference_obj in AnswerReference_objs: answer = fieldValidationCycleUtil_obj.process_answer( question_obj, AnswerReference_obj.value) encoded_txt = answer.encode('utf-8') AnswerReference_obj.value = encoded_txt AnswerReference_obj.save() print 'correct fee summation completed.'
def handle(self, *args, **options): print 'correct fee summation started.' fieldValidationCycleUtil_obj = FieldValidationCycleUtil() question_obj = Question.objects.get(id=16) if question_obj != None: AnswerReference_objs = AnswerReference.objects.filter(question = question_obj) if len(AnswerReference_objs) > 0: print str(len(AnswerReference_objs)) + " to be processed." for AnswerReference_obj in AnswerReference_objs: answer = fieldValidationCycleUtil_obj.process_answer(question_obj, AnswerReference_obj.value) encoded_txt = answer.encode('utf-8') AnswerReference_obj.value = encoded_txt AnswerReference_obj.save() print 'correct fee summation completed.'
def get_updates(self, jurisdictions, num, type="days"): if type == "days": obj3monthsbefore = self.objDateTimeNow - timedelta(days=num) else: obj3monthsbefore = self.objDateTimeNow - timedelta(seconds=num) print str(obj3monthsbefore.replace(tzinfo=utc)) updates = [] jurisdiction_list = [] for jurisdiction in jurisdictions: jurisdiction_list.append(jurisdiction.id) jups = jurisdiction.getLatestUpdates() jups = jups.filter(modify_datetime__gt=obj3monthsbefore.replace( tzinfo=utc)) jups = jups.filter(Q(approval_status='P') | Q(approval_status='A')) aaa = [] old_jurisdiction_id = 0 for up in jups: update_map = {} if old_jurisdiction_id != up.jurisdiction.id: update_map['title_flag'] = True old_jurisdiction_id = up.jurisdiction.id else: update_map['title_flag'] = False if up.approval_status == 'P': time_obj = TimeShow(up.create_datetime) creator = up.creator.get_profile().get_display_name() else: time_obj = TimeShow(up.status_datetime) creator = '' update_map['time'] = time_obj.get_show_time() update_map['creator'] = creator update_map['question'] = up.question.question validation_util_obj = FieldValidationCycleUtil() answer = validation_util_obj.get_formatted_value( up.value, up.question) update_map['answer'] = answer update_map['question_type'] = up.question.form_type update_map['jurisdiction'] = up.jurisdiction update_map[ 'jurisdiction_name'] = up.jurisdiction.show_jurisdiction( 'short') if up.question.form_type == 'CF': if up.approval_status == 'P': update_map[ 'type'] = 'Custom field suggested by ' + creator + ' ' + update_map[ 'time'] else: update_map[ 'type'] = 'Custom field suggested verified ' + update_map[ 'time'] else: if up.approval_status == 'P': update_map[ 'type'] = 'New suggestion for ' + up.question.question + ' by ' + creator + ' ' + update_map[ 'time'] else: update_map[ 'type'] = up.question.question + ' verified ' + update_map[ 'time'] updates.append(update_map) #updates[jurisdiction.id] = aaa #updates[jurisdiction.id] = jurisdiction.getLatestUpdates().filter(modify_datetime__lt = obj3monthsbefore) return updates, jurisdiction_list
def custom_field(request): data = {} requestProcessor = HttpRequestProcessor(request) dajax = Dajax() ajax = requestProcessor.getParameter('ajax') if (ajax != None): if (ajax == 'create_custom_field'): data['form_id'] = 'create_custom_field' data['field_title'] = requestProcessor.getParameter('field_title') data['field_value'] = requestProcessor.getParameter('field_value') data['jurisdiction_id'] = requestProcessor.getParameter('jurisdiction_id') data['category_id'] = requestProcessor.getParameter('category_id') data['current_category'] = requestProcessor.getParameter('current_category') data['current_questions'] = requestProcessor.getParameter('current_questions') if data['field_title'] == None: data['field_title'] = '' if data['field_value'] == None: data['field_value'] = '' data['jurisdiction'] = Jurisdiction.objects.get(id=data['jurisdiction_id']) body = requestProcessor.decode_jinga_template(request,'website/blocks/create_custom_field.html', data, '') dajax.assign('#fancyboxformDiv','innerHTML', body) script = requestProcessor.decode_jinga_template(request, 'website/blocks/create_custom_field.js', data, '') dajax.script(script) dajax.script('controller.showModalDialog("#fancyboxformDiv");') return HttpResponse(dajax.json()) if (ajax == 'create_custom_field_submit'): data = {} data['form_id'] = 'create_custom_field' data['field_title'] = requestProcessor.getParameter('field_title') data['field_value'] = requestProcessor.getParameter('field_value') data['jurisdiction_id'] = requestProcessor.getParameter('jurisdiction_id') data['category_id'] = requestProcessor.getParameter('category_id') current_category = requestProcessor.getParameter('current_category') current_questions = requestProcessor.getParameter('current_questions') error_message = {} error_message = validate_create_custom_field_form_data(data, data['form_id']) if len(error_message) == 0: msg_key = data['form_id']+ '_fail_reason' try: jurisdiction = Jurisdiction.objects.get(id=data['jurisdiction_id']) # look up template CF for this jurisdiction templates = Template.objects.filter(jurisdiction=jurisdiction, template_type__iexact='CF') if len(templates) > 0: template = templates[0] else: template = Template() template.template_type = 'CF' template.name = 'Jurisdiction Custom Field Template' template.jurisdiction_id = data['jurisdiction_id'] #template.create_datetime = datetime.datetime.now() template.save() # create the question category_obj = QuestionCategory.objects.get(id=data['category_id']) ''' questions = Question.objects.filter(category=category_obj, accepted=1).order_by('-display_order') last_question = questions[0] if last_question.display_order == None or last_question.display_order == '': display_order = 0 else: display_order = last_question.display_order ''' highest_display_order_obj = Question.objects.filter(category=category_obj, accepted=1).aggregate(Max('display_order')) #print highest_display_order_obj if highest_display_order_obj == None: highest_display_order = 0 else: highest_display_order = highest_display_order_obj['display_order__max'] question_obj = Question(); question_obj.category_id = data['category_id'] question_obj.question = data['field_title'] question_obj.label = data['field_title'] question_obj.form_type = 'CF' question_obj.qtemplate_id = template.id question_obj.accepted = 1 question_obj.display_order = int(highest_display_order) + 5 #question_obj.create_datetime = datetime.datetime.now() question_obj.creator_id = request.user.id question_obj.save() template_question = TemplateQuestion() template_question.template_id = template.id template_question.question_id = question_obj.id #template_question.create_datetime = datetime.datetime.now() template_question.save() # save the answer data_answer = {} data_answer['value'] = data['field_value'] answer = json.dumps(data_answer) # to convert to json is_callout=0 answer_reference_class_obj = AnswerReference() #action_category_objs = ActionCategory.objects.filter(name__iexact='AddRequirement') #action_category_obj = action_category_objs[0] validation_util_obj = FieldValidationCycleUtil() arcf = validation_util_obj.save_answer(question_obj, answer, jurisdiction, 'AddRequirement', request.user, is_callout) except Exception, e: data[msg_key] = e.message print e.message #else: if len(error_message) > 0: for msg_key in error_message.keys(): data[msg_key] = error_message.get(msg_key) body = requestProcessor.decode_jinga_template(request,'website/blocks/create_custom_fields.html', data, '') dajax.assign('#fancyboxformDiv','innerHTML', body) script = requestProcessor.decode_jinga_template(request, 'website/blocks/create_custom_fields.js', data, '') dajax.script(script) else: data_cf = {} jurisdiction = Jurisdiction.objects.get(id=data['jurisdiction_id']) data_cf['jurisdiction'] = jurisdiction ''' question_category_obj = QuestionCategory.objects.get(id=data['category_id']) data['question_categories'] = QuestionCategory.objects.filter(id=data['category_id']) question_class_obj = Question() custom_questions = question_class_obj.get_custom_fields_by_jurisdiction_by_category(jurisdiction, data['category_id']) print custom_questions validation_util_obj = FieldValidationCycleUtil() data['action'] = 'refresh_ahj_qa' if custom_questions != None and len(custom_questions) > 0: for question in custom_questions: data['question_content'][question_category_obj.id][question.id] = validation_util_obj.get_AHJ_question_data(request, jurisdiction, question, data) ''' ''' validation_util_obj = FieldValidationCycleUtil() data_cf['this_question'] = question_obj question_content = validation_util_obj.get_AHJ_question_data(request, jurisdiction, question_obj, data_cf) for key in question_content.keys(): data_cf[key] = question_content.get(key) body = requestProcessor.decode_jinga_template(request,'website/jurisdictions/AHJ_question_content_authenticated.html', data_cf, '') dajax.assign('#div_custom_question_content_'+str(category_obj.id),'innerHTML', body) script = requestProcessor.decode_jinga_template(request,'website/jurisdictions/AHJ_question_content.js', data, '') dajax.script(script) ''' template_obj = Template() jurisdiction_templates = template_obj.get_jurisdiction_question_templates(jurisdiction) data_cf['action'] = '/jurisdiction_id/'+str(jurisdiction.id)+'/'+current_category+'/' current_questions = current_questions.split(',') data_cf['custom_questions'] = Question.objects.filter(category=category_obj, accepted=1, qtemplate__in=jurisdiction_templates).exclude(id__in=(current_questions)) body = requestProcessor.decode_jinga_template(request,'website/jurisdictions/AHJ_question_content_ajax_call.html', data_cf, '') dajax.assign('#div_custom_question_content_'+str(category_obj.id),'innerHTML', body) script = requestProcessor.decode_jinga_template(request, 'website/jurisdictions/AHJ_question_content_ajax_call.js', data_cf, '') dajax.script(script) ###################################################### #data['custom_questions'] = custom_questions #data['custom_questions'] = {} #data['custom_questions'][question_category_obj.id] = custom_questions #body = requestProcessor.decode_jinga_template(request,'website/blocks/custom_fields.html', data, '') #dajax.assign('#custom_fields_'+str(question_category_obj.id),'innerHTML', body) dajax.script('jQuery.fancybox.close();') dajax.script("controller.showMessage('Custom field created.', 'success')") dajax.script('controller.updateUrlAnchor("#create_custom_field");') if current_category == 'all_info': question_categories = QuestionCategory.objects.filter(accepted=1) data['category'] = 'All categories' else: question_categories = QuestionCategory.objects.filter(name__iexact=category_obj.name) data['category'] = category_obj.name #data['category'] = question_obj.category.name data['jurisdiction'] = jurisdiction validation_util_obj = FieldValidationCycleUtil() data['top_contributors'] = validation_util_obj.get_top_contributors(jurisdiction, question_categories) body = requestProcessor.decode_jinga_template(request,'website/blocks/top_contributors.html', data, '') dajax.assign('#top_contributors','innerHTML', body) return HttpResponse(dajax.json())
def custom_field(request): data = {} requestProcessor = HttpRequestProcessor(request) dajax = Dajax() ajax = requestProcessor.getParameter('ajax') if (ajax != None): if (ajax == 'create_custom_field'): data['form_id'] = 'create_custom_field' data['field_title'] = requestProcessor.getParameter('field_title') data['field_value'] = requestProcessor.getParameter('field_value') data['jurisdiction_id'] = requestProcessor.getParameter('jurisdiction_id') data['category_id'] = requestProcessor.getParameter('category_id') data['current_category'] = requestProcessor.getParameter('current_category') if data['field_title'] == None: data['field_title'] = '' if data['field_value'] == None: data['field_value'] = '' data['jurisdiction'] = Jurisdiction.objects.get(id=data['jurisdiction_id']) body = requestProcessor.decode_jinga_template(request,'website/blocks/create_custom_field.html', data, '') dajax.assign('#fancyboxformDiv','innerHTML', body) script = requestProcessor.decode_jinga_template(request, 'website/blocks/create_custom_field.js', data, '') dajax.script(script) dajax.script('controller.showModalDialog("#fancyboxformDiv");') return HttpResponse(dajax.json()) if (ajax == 'create_custom_field_submit'): data = {} data['form_id'] = 'create_custom_field' data['field_title'] = requestProcessor.getParameter('field_title') data['field_value'] = requestProcessor.getParameter('field_value') data['jurisdiction_id'] = requestProcessor.getParameter('jurisdiction_id') data['category_id'] = requestProcessor.getParameter('category_id') current_category = requestProcessor.getParameter('current_category') current_questions = requestProcessor.getParameter('current_questions') error_message = {} error_message = validate_create_custom_field_form_data(data, data['form_id']) if len(error_message) == 0: msg_key = data['form_id']+ '_fail_reason' try: jurisdiction = Jurisdiction.objects.get(id=data['jurisdiction_id']) # look up template CF for this jurisdiction templates = Template.objects.filter(jurisdiction=jurisdiction, template_type__iexact='CF', accepted = 1) if len(templates) > 0: template = templates[0] else: template = Template() template.template_type = 'CF' template.name = 'Jurisdiction Custom Field Template' template.jurisdiction_id = data['jurisdiction_id'] #template.create_datetime = datetime.datetime.now() template.accepted = 1 template.save() # create the question category_obj = QuestionCategory.objects.get(id=data['category_id']) ''' questions = Question.objects.filter(category=category_obj, accepted=1).order_by('-display_order') last_question = questions[0] if last_question.display_order == None or last_question.display_order == '': display_order = 0 else: display_order = last_question.display_order ''' highest_display_order_obj = Question.objects.filter(category=category_obj, accepted=1).aggregate(Max('display_order')) if highest_display_order_obj == None: highest_display_order = 0 else: highest_display_order = highest_display_order_obj['display_order__max'] question_obj = Question(); question_obj.category_id = data['category_id'] question_obj.question = data['field_title'] question_obj.label = data['field_title'] question_obj.form_type = 'CF' question_obj.qtemplate_id = template.id question_obj.accepted = 1 question_obj.display_order = int(highest_display_order) + 5 #question_obj.create_datetime = datetime.datetime.now() question_obj.creator_id = request.user.id question_obj.save() template_question = TemplateQuestion() template_question.template_id = template.id template_question.question_id = question_obj.id #template_question.create_datetime = datetime.datetime.now() template_question.save() # save the answer data_answer = {} data_answer['value'] = data['field_value'] answer = json.dumps(data_answer) # to convert to json is_callout=0 answer_reference_class_obj = AnswerReference() #action_category_objs = ActionCategory.objects.filter(name__iexact='AddRequirement') #action_category_obj = action_category_objs[0] validation_util_obj = FieldValidationCycleUtil() arcf = validation_util_obj.save_answer(question_obj, answer, jurisdiction, 'AddRequirement', request.user, is_callout) except Exception, e: data[msg_key] = e.message #else: if len(error_message) > 0: for msg_key in error_message.keys(): data[msg_key] = error_message.get(msg_key) body = requestProcessor.decode_jinga_template(request,'website/blocks/create_custom_field.html', data, '') dajax.assign('#fancyboxformDiv','innerHTML', body) script = requestProcessor.decode_jinga_template(request, 'website/blocks/create_custom_field.js', data, '') dajax.script(script) else: data_cf = {} jurisdiction = Jurisdiction.objects.get(id=data['jurisdiction_id']) data_cf['jurisdiction'] = jurisdiction template_obj = Template() jurisdiction_templates = template_obj.get_jurisdiction_question_templates(jurisdiction) data_cf['action'] = '/jurisdiction_id/'+str(jurisdiction.id)+'/'+current_category+'/' data_cf = get_question_data(request, jurisdiction, question_obj, data) body = requestProcessor.decode_jinga_template(request,'website/jurisdictions/AHJ_cqa_qa.html', data_cf, '') script = requestProcessor.decode_jinga_template(request,'website/jurisdictions/AHJ_cqa_qa.js' , data, '') dajax.script(script) dajax.assign('#div_custom_question_content_'+str(data['category_id']),'innerHTML', body) ###################################################### #data['custom_questions'] = custom_questions #data['custom_questions'] = {} #data['custom_questions'][question_category_obj.id] = custom_questions #body = requestProcessor.decode_jinga_template(request,'website/blocks/custom_fields.html', data, '') #dajax.assign('#custom_fields_'+str(question_category_obj.id),'innerHTML', body) dajax.script('jQuery.fancybox.close();') dajax.script("controller.showMessage('Custom field created.', 'success')") dajax.script('controller.updateUrlAnchor("#create_custom_field");') data = {} if current_category == 'all_info': question_categories = QuestionCategory.objects.filter(accepted=1) data['category'] = 'All categories' else: question_categories = QuestionCategory.objects.filter(name__iexact=category_obj.name) data['category'] = category_obj.name #data['category'] = question_obj.category.name data['jurisdiction'] = jurisdiction data['top_contributors'] = get_ahj_top_contributors(jurisdiction, current_category) body = requestProcessor.decode_jinga_template(request,'website/jurisdictions/AHJ_top_contributors.html', data, '') dajax.assign('#top-contributor','innerHTML', body) return HttpResponse(dajax.json())
def runValidateAnswersCron(objCronHelper): objCronHelper.WriteHTML('Validate Answers<br/>') aaa = FieldValidationCycleUtil() aaa.cron_validate_answers() objCronHelper.WriteHTML('<br/>Validate Answers Done!<br/>')
def runValidateAnswersCron(objCronHelper): objCronHelper.WriteHTML("Validate Answers<br/>") aaa = FieldValidationCycleUtil() aaa.cron_validate_answers() objCronHelper.WriteHTML("<br/>Validate Answers Done!<br/>")
def handle(self, *args, **options): fvcu = FieldValidationCycleUtil() fvcu.cron_validate_answers()
def submit_suggestion(request): validation_util_obj = FieldValidationCycleUtil() from website.models.questionAnswer import Question from website.models import Jurisdiction data = {} errors = [] # convert POST to a string for parsing xml post_string = request.raw_post_data # strip extra whitespace while post_string != re.sub("\s<", "<", post_string): post_string = re.sub("\s<", "<", post_string) while post_string != re.sub("\s>", ">", post_string): post_string = re.sub("\s>", ">", post_string) while post_string != re.sub(">\s", ">", post_string): post_string = re.sub(">\s", ">", post_string) while post_string != re.sub("<\s", "<", post_string): post_string = re.sub("<\s", "<", post_string) try: xmlDoc = minidom.parseString(post_string) except Exception: errors.append("Could not Parse XML") del post_string if len(errors) > 0: output = '<errors>\n' for this_error in errors: output += "\t<error>" + this_error + "</error>\n" output += '</errors>' else: # define directives directives = dict() directive_names = [ 'api_username', 'api_key', 'question_id', 'jurisdiction_id', 'answer_value', ] try: temp = xmlDoc.getElementsByTagName('request')[0] except Exception: errors.append( "Could not find 'request' node - please see documentation at https://github.com/solarpermit/solarpermit/wiki" ) else: temp = None for node in xmlDoc.getElementsByTagName('request')[0].childNodes: if node.nodeType == 1: #element type if node.localName in directive_names and node.firstChild is not None: directives[ node.localName] = node.firstChild.data.strip() else: if node.firstChild is None: errors.append( node.localName + ' is empty. Please declare a value for ' + node.localName + '.') else: errors.append(' is an unknown directive') # error testing if int(len(directives)) != 5: errors.append( 'Incorrect number of Directive values - either something is empty, or something is missing (' + str(len(directives)) + ' != 5).') if 'api_username' not in directives: errors.append('Your api_username must be provided in the request.') if 'api_key' not in directives: errors.append('Your api_key must be provided in the request.') if 'question_id' not in directives: errors.append('You must declare a question_id.') if 'question_id' in directives and ( not is_numeric(directives['question_id']) or int(directives['question_id']) < 1): errors.append( 'QuestinID must be a positive integer greater than zero.') if 'jurisdiction_id' not in directives: errors.append('You must declare a jurisdiction_id') if 'jurisdiction_id' in directives and ( not is_numeric(directives['jurisdiction_id']) or int(directives['jurisdiction_id']) < 1): errors.append( 'jurisdiction_id must be a positive integer greater than zero.' ) if 'answer_value' not in directives: errors.append( 'You can not suggest an answer without the data for that answer declared as an answer_value.' ) # user validation pre-work try: # get the user id of this user thisUserId = int( User.objects.get(username=directives['api_username']).pk) # get the api key for this user apiKeys = API_Keys.objects.filter(user_id=thisUserId) for row in apiKeys: thisApiKey = row.key except Exception: errors.append('Failed to look up your username.') if len(errors) > 0: output = '<errors>\n' for this_error in errors: output += '\t<error>' + this_error + '</error>\n' output += '</errors>' else: # validate user if directives['api_key'] != thisApiKey: output = '<errors>\n\t<error>User validation failure - check api_key for accuracy</error>\n</errors>' else: ## validate jurisdiction_id try: jurisdiction = Jurisdiction.objects.get( id=directives['jurisdiction_id']) except Exception: errors.append( 'The jurisdiction_id you have declared does not exist, or is invalid.' ) if len(errors) > 0: output = '<errors>\n' for this_error in errors: output += '\t<error>' + this_error + '</error>\n' output += '</errors>' else: ### validate question_id try: question = Question.objects.get( id=directives['question_id']) except Exception: errors.append( 'The question_id you have declared does not exist, or is invalid.' ) if len(errors) > 0: output = '<errors>\n' for this_error in errors: output += '\t<error>' + this_error + '</error>\n' output += '</errors>' else: #### validate answer format can be parsed as json if question.default_value is None or len( question.default_value) < 1: default_format = json.loads('{"value":""}') else: default_format = json.loads(question.default_value) try: this_format = json.loads( directives['answer_value']) except Exception: errors.append('Cannot parse answer_value as JSON') if len(errors) > 0: output = '<errors>\n' for this_error in errors: output += '\t<error>' + this_error + '</error>\n' output += '</errors>' else: output = '' #### validate answer format has matching keys if not ((all(key in this_format for key in default_format)) and (all(key in default_format for key in this_format))): if int(directives['question_id']) != 16: errors.append( 'answer_value (JSON) does not match format of default_value for this question.' ) else: # for pricing formula # check to make sure each key is a direct, or regex match to an incremented key name. suspect_keys = [] valid_keys = [ 'percentage_of_total_system_cost_cap_amt', 'percentage_of_total_system_cost', 'flat_rate_amt', ] for key in this_format: # strip trailing underscores and digits new_item = re.sub( '[_]\d*[_]\d*$', '', key) if new_item not in suspect_keys: suspect_keys.append(new_item) for key in default_format: # strip trailing underscores and digits new_item = re.sub( '[_]\d*[_]\d*$', '', key) if new_item not in valid_keys: valid_keys.append(new_item) if not ((all(item in suspect_keys for item in valid_keys)) and (all(item in valid_keys for item in suspect_keys))): error_string = 'answer_value (JSON) has unrecognized keys for this question.' error_string += ' ... invalid keys (does not include incremented portion key names): ' for item in suspect_keys: if item not in valid_keys: error_string += ' ' + item + ', ' error_string += ' ... missingkeys (does not include incremented portion of key names): ' for item in valid_keys: if item not in suspect_keys: error_string += item + ', ' errors.append(error_string) if len(errors) > 0: output = '<errors>\n' for this_error in errors: output += '\t<error>' + this_error + '</error>\n' output += '</errors>' else: user = User.objects.get(id=thisUserId) is_callout = 0 try: arcf = validation_util_obj.save_answer( question, directives['answer_value'], jurisdiction, 'AddRequirement', user, is_callout) output = '<Result>' + str( arcf) + '</Result>' except Exception as inst: output = '<errors>\n\t<error>Failed to save answer suggestion.</error><detail>\n' output += str( type(inst)) # the exception instance output += str(inst.args) output += '</detail></errors>' ''' question_id = 93 question = Question.objects.get(id=question_id) answer = '{"value":"Written Via API x?"}' jurisdiction_id = 1 jurisdiction = Jurisdiction.objects.get(id=jurisdiction_id) user_id = 3 user = User.objects.get(id=user_id) is_callout = 0 answer_id = None #arcf = validation_util_obj.save_answer(question, answer, jurisdiction, 'AddRequirement', user, is_callout, answer_id) arcf = 'foo' output = '<testing>\n\n' output += str(arcf) output += '\n\n</testing>' ''' #finish up data['xml'] = mark_safe(output) requestProcessor = HttpRequestProcessor(request) return requestProcessor.render_to_response(request, 'website/api.xml', data, 'application/xml')