def monitoring_parameter_import(request, monitoring_pk): """ Импорт параметров из CSV. """ must_register = False if revision.is_registered(Parameter): revision.unregister(Parameter) must_register = True monitoring = get_object_or_404(Monitoring, pk=monitoring_pk) if not request.user.has_perm('exmo2010.edit_monitoring', monitoring): raise PermissionDenied if 'paramfile' not in request.FILES: return HttpResponseRedirect(reverse('exmo2010:monitorings_list')) reader = UnicodeReader(request.FILES['paramfile']) errors = [] rowOKCount = 0 row_num = 0 try: for row_num, row in enumerate(reader, start=1): if row[0].startswith('#'): errors.append("row %d. Starts with '#'. Skipped" % row_num) continue if row[0] == '': errors.append("row %d (csv). Empty code" % row_num) continue if row[1] == '': errors.append("row %d (csv). Empty name" % row_num) continue try: code = row[0] name = row[1] parameter = Parameter.objects.get(monitoring=monitoring, code=code, name=name) except Parameter.DoesNotExist: parameter = Parameter() except Exception, e: errors.append("row %d. %s" % (row_num, e)) continue try: parameter.monitoring = monitoring parameter.code = code parameter.name = name # Присваиваем пустую строку, а не None. parameter.grounds = row[2] or '' parameter.rating_procedure = row[3] or '' parameter.notes = row[4] or '' parameter.complete = bool(int(row[5])) parameter.topical = bool(int(row[6])) parameter.accessible = bool(int(row[7])) parameter.hypertext = bool(int(row[8])) parameter.document = bool(int(row[9])) parameter.image = bool(int(row[10])) parameter.weight = row[11] parameter.full_clean() parameter.save() except ValidationError, e: errors.append("row %d (validation). %s" % ( row_num, '; '.join(['%s: %s' % (i[0], ', '.join(i[1])) for i in e.message_dict.items()]))) except Exception, e: errors.append("row %d. %s" % (row_num, e))
def monitoring_organization_import(request, monitoring_pk): """ Импорт организаций из CSV. """ must_register = False if revision.is_registered(Organization): revision.unregister(Organization) must_register = True monitoring = get_object_or_404(Monitoring, pk=monitoring_pk) if not request.user.has_perm('exmo2010.edit_monitoring', monitoring): raise PermissionDenied if 'orgfile' not in request.FILES: return HttpResponseRedirect(reverse('exmo2010:monitorings_list')) reader = UnicodeReader(request.FILES['orgfile']) errors = [] indexes = {} rowOKCount = 0 row_num = 0 try: for row_num, row in enumerate(reader, start=1): if row[0] and row[0].startswith('#'): for key in ['name', 'url', 'email', 'phone', 'recommendations_hidden']: for item in row: if item and key in item.lower(): indexes[key] = row.index(item) errors.append("row %d. Starts with '#'. Skipped" % row_num) continue if 'name' not in indexes: errors.append("header row (csv). Field 'Name' does not exist") break if row[indexes['name']] == '': errors.append("row %d (csv). Empty organization name" % row_num) continue try: organization = Organization.objects.get(monitoring=monitoring, name=row[indexes['name']]) except Organization.DoesNotExist: organization = Organization(name=row[indexes['name']]) organization.monitoring = monitoring except Exception, e: errors.append("row %d. %s" % (row_num, e)) continue try: if row[indexes['email']]: organization.email = replace_string(row[indexes['email']]).strip() if row[indexes['phone']]: organization.phone = replace_string(row[indexes['phone']]).strip() if row[indexes['url']]: organization.url = row[indexes['url']].strip() if row[indexes['recommendations_hidden']] == 'False': organization.recommendations_hidden = False if row[indexes['recommendations_hidden']] == 'True': organization.recommendations_hidden = True organization.inv_code = generate_inv_code(6) organization.full_clean() organization.save() except ValidationError, e: errors.append("row %d (validation). %s" % ( row_num, '; '.join(['%s: %s' % (i[0], ', '.join(i[1])) for i in e.message_dict.items()]))) except Exception, e: errors.append("row %d. %s" % (row_num, e))