def add_test_run(request, group_slug, project_slug, version, environment_slug): group = get_object_or_404(Group, slug=group_slug) project = get_object_or_404(group.projects, slug=project_slug) # authenticate token X project token = request.META.get('HTTP_AUTH_TOKEN', None) if token: if valid_token(token, project): pass else: return HttpResponseForbidden() else: return HttpResponse('Authentication needed', status=401) test_run_data = { 'version': version, 'environment_slug': environment_slug, } uploads = { 'tests_file': 'tests', 'metrics_file': 'metrics', 'log_file': 'log', 'metadata_file': 'metadata', } for key, field in uploads.items(): if field in request.FILES: f = request.FILES[field] test_run_data[key] = read_file_upload(f).decode('utf-8') elif field in request.POST: test_run_data[key] = request.POST[field] if 'metadata_file' not in test_run_data: metadata = {} for field in ReceiveTestRun.SPECIAL_METADATA_FIELDS: if field in request.POST: metadata[field] = request.POST[field] if metadata: test_run_data['metadata_file'] = json.dumps(metadata) if 'attachment' in request.FILES: attachments = {} for f in request.FILES.getlist('attachment'): attachments[f.name] = read_file_upload(f) test_run_data['attachments'] = attachments receive = ReceiveTestRun(project) try: receive(**test_run_data) except exceptions.invalid_input as e: logger.warning(request.get_full_path() + ": " + str(e)) return HttpResponse(str(e), status=400) return HttpResponse('', status=201)
def add_test_run(request, group_slug, project_slug, version, environment_slug): project = request.project test_run_data = { 'version': version, 'environment_slug': environment_slug, } uploads = { 'tests_file': 'tests', 'metrics_file': 'metrics', 'log_file': 'log', 'metadata_file': 'metadata', } for key, field in uploads.items(): if field in request.FILES: f = request.FILES[field] test_run_data[key] = read_file_upload(f).decode('utf-8') elif field in request.POST: test_run_data[key] = request.POST[field] if 'metadata_file' not in test_run_data: metadata = {} for field in ReceiveTestRun.SPECIAL_METADATA_FIELDS: if field in request.POST: metadata[field] = request.POST[field] if metadata: test_run_data['metadata_file'] = json.dumps(metadata) if 'attachment' in request.FILES: attachments = {} for f in request.FILES.getlist('attachment'): attachments[f.name] = read_file_upload(f) test_run_data['attachments'] = attachments receive = ReceiveTestRun(project) try: testrun, build = receive(**test_run_data) log_addition(request, testrun, "Test Run created") if build: log_addition(request, build, "Build created") except (exceptions.invalid_input + (exceptions.DuplicatedTestJob, )) as e: logger.warning(request.get_full_path() + ": " + str(e)) return HttpResponse(str(e), status=400) return HttpResponse('', status=201)
def add_test_run(request, group_slug, project_slug, version, environment_slug): project = request.project test_run_data = { 'version': version, 'environment_slug': environment_slug, } uploads = { 'tests_file': 'tests', 'metrics_file': 'metrics', 'log_file': 'log', 'metadata_file': 'metadata', } for key, field in uploads.items(): if field in request.FILES: f = request.FILES[field] test_run_data[key] = read_file_upload(f).decode('utf-8') elif field in request.POST: test_run_data[key] = request.POST[field] if 'metadata_file' not in test_run_data: metadata = {} for field in ReceiveTestRun.SPECIAL_METADATA_FIELDS: if field in request.POST: metadata[field] = request.POST[field] if metadata: test_run_data['metadata_file'] = json.dumps(metadata) if 'attachment' in request.FILES: attachments = {} for f in request.FILES.getlist('attachment'): attachments[f.name] = read_file_upload(f) test_run_data['attachments'] = attachments receive = ReceiveTestRun(project) try: receive(**test_run_data) except exceptions.invalid_input as e: logger.warning(request.get_full_path() + ": " + str(e)) return HttpResponse(str(e), status=400) return HttpResponse('', status=201)
def submit_job(request, group_slug, project_slug, version, environment_slug): backend_name = request.POST.get('backend') if backend_name is None: return HttpResponseBadRequest("backend field is required") try: backend = Backend.objects.get(name=backend_name) except Backend.DoesNotExist: return HttpResponseBadRequest("requested backend does not exist") # project has to exist or request will result with 404 project = request.project if project is None: return HttpResponseBadRequest("malformed request") # `Environment.expected_test_runs == -1` means that environment will stop receiving submissions environment, created = project.environments.get_or_create( slug=environment_slug) if environment.expected_test_runs == -1: return HttpResponseBadRequest( "environment '%s' is disabled and squad will not accept new submissions to it" % environment_slug) # create Build object build, _ = project.builds.get_or_create(version=version) # definition can be received as a file upload or as a POST parameter definition = None if 'definition' in request.FILES: definition = read_file_upload( request.FILES['definition']).decode('utf-8') else: definition = request.POST.get('definition') if definition is None: return HttpResponseBadRequest("test job definition is required") # create TestJob object test_job = TestJob.objects.create( backend=backend, definition=definition, target=project, target_build=build, environment=environment_slug, ) log_addition(request, test_job, "Test Job submission") # schedule submission submit.delay(test_job.id) # return ID of test job return HttpResponse(test_job.id, status=201)
def submit_job(request, group_slug, project_slug, version, environment_slug): backend_name = request.POST.get('backend') if backend_name is None: return HttpResponseBadRequest("backend field is required") try: backend = Backend.objects.get(name=backend_name) except Backend.DoesNotExist: return HttpResponseBadRequest("requested backend does not exist") # project has to exist or request will result with 404 project = request.project if project is None: return HttpResponseBadRequest("malformed request") # create Build object build, _ = project.builds.get_or_create(version=version) # definition can be received as a file upload or as a POST parameter definition = None if 'definition' in request.FILES: definition = read_file_upload(request.FILES['definition']) else: definition = request.POST.get('definition') if definition is None: return HttpResponseBadRequest("test job definition is required") # create TestJob object test_job = TestJob.objects.create( backend=backend, definition=definition, target=project, target_build=build, environment=environment_slug, ) # schedule submission submit.delay(test_job.id) # return ID of test job return HttpResponse(test_job.id, status=201)