def do_import_data(request, entity_id, context): user = User.objects.get(id=request.user.id) entity = Entity.objects.filter(id=entity_id, is_active=True).first() if not entity: return HttpResponse("Couldn't parse uploaded file", status=400) try: data = yaml.load(context, Loader=yaml.FullLoader) except yaml.parser.ParserError: return HttpResponse("Couldn't parse uploaded file", status=400) if not Entry.is_importable_data(data): return HttpResponse("Uploaded file has invalid data structure to import", status=400) if custom_view.is_custom("import_entry", entity.name): # import custom view resp = custom_view.call_custom("import_entry", entity.name, user, entity, data) # If custom_view returns available response this returns it to user, # or continues default processing. if resp: return resp # create job to import data to create or update entries and run it job = Job.new_import(user, entity, text='Preparing to import data', params=data) job.run() return HttpResponseSeeOther('/entry/%s/' % entity_id)
def do_import_data(request, entity_id, context): user: User = request.user entity: Entity entity, error = get_obj_with_check_perm(user, Entity, entity_id, ACLType.Writable) if error: return error if not entity.is_active: return HttpResponse("Failed to get entity of specified id", status=400) try: data = yaml.load(context, Loader=yaml.FullLoader) except yaml.parser.ParserError: return HttpResponse("Couldn't parse uploaded file", status=400) except ValueError as e: return HttpResponse("Invalid value is found: %s" % e, status=400) except yaml.scanner.ScannerError: return HttpResponse("Couldn't scan uploaded file", status=400) except Exception as e: return HttpResponse("Unknown exception: %s" % e, status=500) if not Entry.is_importable_data(data): return HttpResponse( "Uploaded file has invalid data structure to import", status=400) for entity_name in data.keys(): import_entity: Entity = Entity.objects.filter(name=entity_name, is_active=True).first() if not import_entity: return HttpResponse("Specified entity does not exist (%s)" % entity_name, status=400) if not user.has_permission(import_entity, ACLType.Writable): return HttpResponse("You don't have permission to access (%s)" % entity_name, status=400) import_data = data[entity_name] if custom_view.is_custom("import_entry", entity_name): # import custom view import_data, err_msg = custom_view.call_custom( "import_entry", entity_name, user, import_entity, import_data) # If custom_view returns available response this returns it to user, # or continues default processing. if err_msg: return HttpResponse(err_msg, status=400) # create job to import data to create or update entries and run it job = Job.new_import(user, import_entity, text="Preparing to import data", params=import_data) job.run() return HttpResponseSeeOther("/entry/%s/" % entity_id)
def do_import_data(request, entity_id, context): entity = Entity.objects.filter(id=entity_id, is_active=True).first() if not entity: return HttpResponse("Couldn't parse uploaded file", status=400) try: data = yaml.load(context, Loader=yaml.FullLoader) except yaml.parser.ParserError: return HttpResponse("Couldn't parse uploaded file", status=400) except ValueError as e: return HttpResponse("Invalid value is found: %s" % e, status=400) except yaml.scanner.ScannerError: return HttpResponse("Couldn't scan uploaded file", status=400) except Exception as e: return HttpResponse("Unknown exception: %s" % e, status=500) if not Entry.is_importable_data(data): return HttpResponse( "Uploaded file has invalid data structure to import", status=400) if custom_view.is_custom("import_entry", entity.name): # import custom view resp = custom_view.call_custom("import_entry", entity.name, request.user, entity, data) # If custom_view returns available response this returns it to user, # or continues default processing. if resp: return resp # create job to import data to create or update entries and run it job = Job.new_import(request.user, entity, text="Preparing to import data", params=data) job.run() return HttpResponseSeeOther("/entry/%s/" % entity_id)