def task_import(request, id): task = get_object_or_404(Task, pk=id) if not request.user.has_perm('exmo2010.fill_task', task): return HttpResponseForbidden(_('Forbidden')) if not request.FILES.has_key('taskfile'): return HttpResponseRedirect(reverse('exmo2010:score_list_by_task', args=[id])) reader = UnicodeReader(request.FILES['taskfile']) errLog = [] rowOKCount = 0 rowALLCount = 0 try: for row in reader: rowALLCount += 1 if row[0].startswith('#'): errLog.append(_("row %d. Starts with '#'. Skipped") % reader.line_num) continue try: code = re.match('^(\d+)$', row[0]) if not code: errLog.append(_("row %(row)d (csv). Not a code: %(raw)s") % {'row': reader.line_num, 'raw': row[0]}) continue if ( row[2] == '' and row[3] == '' and row[4] == '' and row[5] == '' and row[6] == '' and row[7] == '' and row[8] == '' and row[9] == '' and row[10] == '' and row[11] == '' and row[12] == '' and row[13] == '' and row[14] == '' and row[15] == '' ): errLog.append(_("row %(row)d (csv). Empty score: %(raw)s") % {'row': reader.line_num, 'raw': row[0]}) continue parameter = Parameter.objects.get(code=code.group(1), monitoring = task.organization.monitoring) try: score = Score.objects.get(task = task, parameter = parameter) except Score.DoesNotExist: score = Score() score.task = task score.parameter = parameter score.found = row[2] score.complete = row[3] score.completeComment = row[4] score.topical = row[5] score.topicalComment = row[6] score.accessible = row[7] score.accessibleComment = row[8] score.hypertext = row[9] score.hypertextComment = row[10] score.document = row[11] score.documentComment = row[12] score.image = row[13] score.imageComment = row[14] score.comment = row[15] score.full_clean() score.save() except ValidationError, e: errLog.append(_("row %(row)d (validation). %(raw)s") % { 'row': reader.line_num, 'raw': '; '.join(['%s: %s' % (i[0], ', '.join(i[1])) for i in e.message_dict.items()])}) except Parameter.DoesNotExist: errLog.append(_("row %(row)d. %(raw)s") % { 'row': reader.line_num, 'raw': _('Parameter matching query does not exist')}) except Exception, e: errLog.append(_("row %(row)d. %(raw)s") % { 'row': reader.line_num, 'raw': filter(lambda x: x in string.printable, e.__str__())})