def post(self, *args, **kargs): commit = self.request.GET.get("commit") in (True, "true") fields = json.loads(self.request.POST['fields']) schema = self.get_object() forms = list(self._get_schemafield_forms(fields)) errors = dict(_get_form_errors(forms)) if not errors and commit: fields = [form.save(commit=False) for form in forms] for i, field in enumerate(fields): field.fieldnr = (i+1) * 10 field.save() for field in set(schema.fields.all()) - set(fields): # Remove deleted fields field.delete() self.request.session["schema_{}_edited".format(schema.id)] = True # Always send response (don't throw an error) schema_url = reverse("navigator:codingschema-details", args=[self.project.id, schema.id]) return HttpResponse( json.dumps({ "fields" : errors, "schema_url" : schema_url, "rules_valid" : codingruletoolkit.schemarules_valid(schema) }), content_type='application/json' )
def _edit_schemafields_post(request, schema, project, commit=None): """ View executed when making a POST request to edit_schema. """ commit = request.GET.get("commit", commit) in (True, "true") fields = json.loads(request.POST['fields']) forms = list(_get_schemafield_forms(fields, schema)) errors = dict(_get_form_errors(forms)) if not errors and commit: fields = [form.save(commit=False) for form in forms] for i, field in enumerate(fields): field.fieldnr = (i+1) * 10 field.save() for field in set(schema.fields.all()) - set(fields): # Remove deleted fields field.delete() request.session["schema_{}_edited".format(schema.id)] = True # Always send response (don't throw an error) schema_url = reverse("project-schema", args=[project.id, schema.id]) return HttpResponse( json.dumps({ "fields" : errors, "schema_url" : schema_url, "rules_valid" : codingruletoolkit.schemarules_valid(schema) }), mimetype='application/json' )
def post(self, *args, **kargs): commit = self.request.GET.get("commit") in (True, "true") fields = json.loads(self.request.POST['fields']) schema = self.get_object() forms = list(self._get_schemafield_forms(fields)) errors = dict(_get_form_errors(forms)) if not errors and commit: fields = [form.save(commit=False) for form in forms] for i, field in enumerate(fields): field.fieldnr = (i + 1) * 10 field.save() for field in set(schema.fields.all()) - set(fields): # Remove deleted fields field.delete() self.request.session["schema_{}_edited".format(schema.id)] = True # Always send response (don't throw an error) schema_url = reverse("coding schema-details", args=[self.project.id, schema.id]) return HttpResponse(json.dumps({ "fields": errors, "schema_url": schema_url, "rules_valid": codingruletoolkit.schemarules_valid(schema) }), mimetype='application/json')
def _edit_schemafields_post(request, schema, project, commit=None): """ View executed when making a POST request to edit_schema. """ commit = request.GET.get("commit", commit) in (True, "true") fields = json.loads(request.POST['fields']) forms = list(_get_schemafield_forms(fields, schema)) errors = dict(_get_form_errors(forms)) if not errors and commit: fields = [form.save(commit=False) for form in forms] for i, field in enumerate(fields): field.fieldnr = (i + 1) * 10 field.save() for field in set(schema.fields.all()) - set(fields): # Remove deleted fields field.delete() request.session["schema_{}_edited".format(schema.id)] = True # Always send response (don't throw an error) schema_url = reverse("project-schema", args=[project.id, schema.id]) return HttpResponse(json.dumps({ "fields": errors, "schema_url": schema_url, "rules_valid": codingruletoolkit.schemarules_valid(schema) }), mimetype='application/json')
def get_context_data(self, **kwargs): ctx = super(CodingSchemaEditFieldsView, self).get_context_data(**kwargs) fields_null = dict([(f.name, f.null) for f in CodingSchemaField._meta.fields]) rules_valid = json.dumps( codingruletoolkit.schemarules_valid(self.get_object())) ctx.update(locals()) return ctx
def test_schemafield_valid(self): schema_with_fields = amcattest.create_test_schema_with_fields() schema = schema_with_fields[0] self.assertTrue(schemarules_valid(schema)) self.condition(schema, "()").save() self.assertTrue(schemarules_valid(schema)) self.condition(schema, "(3==2)").save() self.assertFalse(schemarules_valid(schema)) CodingRule.objects.all().delete() # Test multiple (correct) rules self.condition(schema, "()").save() self.condition(schema, "()").save() self.condition(schema, "()").save() self.assertTrue(schemarules_valid(schema)) self.condition(schema, "(3==2)").save() self.assertFalse(schemarules_valid(schema))
def edit_schemafields(request, schema, project): if request.method == "POST": return _edit_schemafields_post(request, schema, project) # Is this schema imported? if schema.project != project: # Offer to copy it to currect project return redirect(copy_schema, project.id, schema.id) fields_null = dict([(f.name, f.null) for f in CodingSchemaField._meta.fields]) # This schema is owned by current project. Offer edit interface. return table_view(request, project, None, 'codingschemas', template="navigator/project/edit_schema.html", schema=schema, fields_null=fields_null, rules_valid=json.dumps(codingruletoolkit.schemarules_valid(schema)))
def edit_schemafields(request, schema, project): if request.method == "POST": return _edit_schemafields_post(request, schema, project) # Is this schema imported? if schema.project != project: # Offer to copy it to currect project return redirect(copy_schema, project.id, schema.id) fields_null = dict([(f.name, f.null) for f in CodingSchemaField._meta.fields]) # This schema is owned by current project. Offer edit interface. return table_view(request, project, None, 'codingschemas', template="navigator/project/edit_schema.html", schema=schema, fields_null=fields_null, rules_valid=json.dumps( codingruletoolkit.schemarules_valid(schema)))
def get_context_data(self, **kwargs): ctx = super(CodingSchemaEditFieldsView, self).get_context_data(**kwargs) fields_null = dict([(f.name, f.null) for f in CodingSchemaField._meta.fields]) rules_valid=json.dumps(codingruletoolkit.schemarules_valid(self.get_object())) ctx.update(locals()) return ctx