import csv import io import re def items_csv_to_dict(items_csv_reader): items = [] headers = [] # get headers and items for key, row in enumerate(items_csv_reader): if key == 0: headers = row else: item = { 'attributes': [] } for key, col in enumerate(headers): if key == 0: item[col] = row[key] elif col == 'b_param': item[col] = row[key] elif key > 1: item['attributes'].append({ 'id': col, 'value': row[key], 'type': 'metadata' }) items.append(item) return items def solution_to_file(buffer, total_form_items, forms): wr = csv.writer(buffer, dialect='excel', delimiter=',') # write header row for first row utilizing the total items all forms will have # and the cut score as the last item header = [x + 1 for x in range(total_form_items)] + ['cut score'] wr.writerow(header) # add each form as row to processed csv for form in forms: # provide generated items and cut score row = [item.id for item in form.items] + [form.cut_score] wr.writerow(row) buff2 = io.BytesIO(buffer.getvalue().encode()) return buff2 def key_to_uuid(key): return re.split("_", key)[0]