def run(self, form): # Get codebook object new_codebook = form.cleaned_data["new_codebook"] if new_codebook: codebook = Codebook(name=new_codebook, project=self.project) codebook.save() else: codebook = form.cleaned_data["existing_codebook"] codebook.cache() # Get queries and their labels indicator_language = form.cleaned_data["indicator_language"] roots = {r.label: r for r in codebook.get_roots()} queries = {q.label: q for q in SelectionSearch(form).get_queries()} updated, new = 0, 0 for label, query in queries.items(): if label in roots: # Update existing code roots[label].add_label(indicator_language, query.query, replace=True) updated += 1 else: # Create new code code = Code(label=label) code.save() code.add_label(indicator_language, query.query, replace=True) codebook.add_code(code) new += 1 return "Updated {} code(s), added {} new code(s).".format(updated, new)