def export_batch(request, mongo, batch_id): #! These should be populated from a form, but said form doesn't exist yet. include_empty_rows = False include_doc_content = False #Retrieve the relevant objects batch = mongo.get_collection("tb_app_batch").find_one( {"_id": ObjectId(batch_id)}) documents = batch["documents"] collection = mongo.get_collection("tb_app_collection").find_one( {"_id": ObjectId(batch["profile"]["collection_id"])}) codebook = mongo.get_collection("tb_app_codebook").find_one( {"_id": ObjectId(batch["profile"]["codebook_id"])}) #Get column names... col_names = models.gen_codebook_column_names(codebook) col_index = models.gen_col_index_from_col_names(col_names) #Generate filename filename = sluggify( batch["profile"]["name"]) + "-" + datetime.datetime.now().strftime( "%Y-%m-%d") + ".csv" #Begin constructing a response #response = HttpResponse(mimetype='text') response = HttpResponse(mimetype='text/csv') response['Content-Disposition'] = 'attachment; filename=' + filename writer = csv.writer(response) #Generate and write column headers header = ['index', 'doc_index', 'username'] if include_doc_content: header += ['document'] header += col_names writer.writerow(header) for i, doc in enumerate(documents): for coder in doc["labels"]: answer_set = models.get_most_recent_answer_set( doc["labels"][coder]) if answer_set != {} or include_empty_rows: row = [i + 1, doc["index"], coder] if include_doc_content: row += [collection["documents"][i]["content"]] row += models.gen_csv_column_from_batch_labels( answer_set, col_index) print row writer.writerow(row) return response
def export_batch(request, mongo, batch_id): #! These should be populated from a form, but said form doesn't exist yet. include_empty_rows = False include_doc_content = False #Retrieve the relevant objects batch = mongo.get_collection("tb_app_batch").find_one( {"_id": ObjectId(batch_id)} ) documents = batch["documents"] collection = mongo.get_collection("tb_app_collection").find_one({"_id": ObjectId(batch["profile"]["collection_id"])} ) codebook = mongo.get_collection("tb_app_codebook").find_one({"_id": ObjectId(batch["profile"]["codebook_id"])} ) #Get column names... col_names = models.gen_codebook_column_names(codebook) col_index = models.gen_col_index_from_col_names(col_names) #Generate filename filename = sluggify(batch["profile"]["name"])+"-"+datetime.datetime.now().strftime("%Y-%m-%d")+".csv" #Begin constructing a response #response = HttpResponse(mimetype='text') response = HttpResponse(mimetype='text/csv') response['Content-Disposition'] = 'attachment; filename='+filename writer = csv.writer(response) #Generate and write column headers header = ['index', 'doc_index', 'username'] if include_doc_content: header += ['document'] header += col_names writer.writerow(header) for i,doc in enumerate(documents): for coder in doc["labels"]: answer_set = models.get_most_recent_answer_set(doc["labels"][coder]) if answer_set != {} or include_empty_rows: row = [i+1, doc["index"], coder] if include_doc_content: row += [collection["documents"][i]["content"]] row += models.gen_csv_column_from_batch_labels(answer_set, col_index) print row writer.writerow(row) return response
def review(request, mongo, batch_index): batch = mongo.get_collection("tb_app_batch").find_one( {"profile.index": int(batch_index)}, { "profile": 1, "reports": 1, "documents": 1 }) codebook = mongo.get_collection("tb_app_collection").find_one( {"_id": ObjectId(batch["profile"]["codebook_id"])}, {}) #print json.dumps(batch, cls=MongoEncoder, indent=2) seq_list = [d["index"] for d in batch["documents"]] #Reshape label dictionaries for display #! This should go in models.py label_list = [] for doc in batch["documents"]: label_set = defaultdict(dict) for coder in doc["labels"]: #print "\t", coder answer_set = models.get_most_recent_answer_set( doc["labels"][coder]) #Append question labels to the label_set object for question in answer_set: label_set[question][coder] = answer_set[question] label_list.append(label_set) # print json.dumps(label_list, cls=MongoEncoder, indent=2) result = { 'batch': batch, 'seq_list': seq_list, 'label_list': json.dumps(label_list, cls=MongoEncoder, indent=2), # 'label_list_2': json.dumps(batch["documents"], cls=MongoEncoder, indent=2), } #print json.dumps(batch, cls=MongoEncoder, indent=2) return render_to_response('review.html', result, context_instance=RequestContext(request))
def review(request, mongo, batch_index): batch = mongo.get_collection("tb_app_batch").find_one( {"profile.index": int(batch_index)}, {"profile":1, "reports":1, "documents":1} ) codebook = mongo.get_collection("tb_app_collection").find_one( {"_id": ObjectId(batch["profile"]["codebook_id"])}, {} ) #print json.dumps(batch, cls=MongoEncoder, indent=2) seq_list = [d["index"] for d in batch["documents"]] #Reshape label dictionaries for display #! This should go in models.py label_list = [] for doc in batch["documents"]: label_set = defaultdict(dict) for coder in doc["labels"]: #print "\t", coder answer_set = models.get_most_recent_answer_set(doc["labels"][coder]) #Append question labels to the label_set object for question in answer_set: label_set[question][coder] = answer_set[question] label_list.append(label_set) # print json.dumps(label_list, cls=MongoEncoder, indent=2) result = { 'batch': batch, 'seq_list' : seq_list, 'label_list': json.dumps(label_list, cls=MongoEncoder, indent=2), # 'label_list_2': json.dumps(batch["documents"], cls=MongoEncoder, indent=2), } #print json.dumps(batch, cls=MongoEncoder, indent=2) return render_to_response('review.html', result, context_instance=RequestContext(request))