def diff(realized_repository): # We create a temporary redirection from kwds's # output to our tempfile. This lets us capture the # diff and redirect it to their requested location as # well as to the XUnit report. diff_output = tempfile.NamedTemporaryFile(mode='r') user_requested_output = kwds.get('output', None) # Replace their output handle with ours kwds['output'] = diff_output.name captured_io = {} with captured_io_for_xunit(kwds, captured_io): result = shed.diff_repo(ctx, realized_repository, **kwds) # May be extraneous but just want to ensure entire file is written # before a copy is made. diff_output.flush() # Redirect a copy to user_requested_output if they did: if user_requested_output is not None: shutil.copy(diff_output.name, user_requested_output) else: with open(diff_output.name, "r") as f: sys.stdout.write(f.read()) # Rewind to the start of the file and read it in its entirety diff_output.seek(0) diff_output_contents = diff_output.read() diff_output.close() # Collect data about what happened collected_data['results']['total'] += 1 xunit_case = { 'name': 'shed-diff', 'classname': realized_repository.name, 'time': captured_io["time"], 'stdout': captured_io["stdout"], 'stderr': captured_io["stderr"], } if result >= 200: collected_data['results']['errors'] += 1 xunit_case.update({ 'errorType': 'DiffError', 'errorMessage': 'Error diffing repositories', 'errorContent': escape(diff_output_contents), 'time': captured_io["time"], }) elif result > 2: collected_data['results']['failures'] += 1 xunit_case.update({ 'errorType': 'PlanemoDiffError', 'errorMessage': 'Planemo error diffing repositories', 'errorContent': escape(diff_output_contents), }) elif result == 2: collected_data['results']['failures'] += 1 xunit_case.update({ 'errorType': 'RepoDoesNotExist', 'errorMessage': 'Target Repository does not exist', 'errorContent': escape(diff_output_contents), }) elif result == 1: collected_data['results']['failures'] += 1 xunit_case.update({ 'errorType': 'Different', 'errorMessage': 'Repository is different', 'errorContent': escape(diff_output_contents), }) # Append our xunit test case collected_data['tests'].append(xunit_case) return result
def update(realized_repository): collected_data['results']['total'] += 1 skip_upload = kwds["skip_upload"] skip_metadata = kwds["skip_metadata"] upload_ret_code = 0 upload_ok = True captured_io = {} if not skip_upload: with captured_io_for_xunit(kwds, captured_io): upload_ret_code = shed.upload_repository( ctx, realized_repository, **kwds ) upload_ok = not upload_ret_code repo_result = { 'classname': realized_repository.name, 'time': captured_io.get("time", None), 'name': 'shed-update', 'stdout': captured_io.get("stdout", None), 'stderr': captured_io.get("stderr", None), } # Now that we've uploaded (or skipped appropriately), collect results. if upload_ret_code == 2: collected_data['results']['failures'] += 1 repo_result.update({ 'errorType': 'FailedUpdate', 'errorMessage': 'Failed to update repository as it does not exist in target ToolShed', }) collected_data['tests'].append(repo_result) error("Failed to update repository it does not exist " "in target ToolShed.") return upload_ret_code exit = 0 metadata_ok = True if not skip_metadata: repo_id = shed.handle_force_create(realized_repository, ctx, shed_context, **kwds) # failing to create the repo, give up if repo_id is None: exit = shed.report_non_existent_repository(realized_repository) metadata_ok = False else: metadata_ok = realized_repository.update(ctx, shed_context, repo_id) else: info("Skipping repository metadata update.") if not metadata_ok: error("Failed to update repository metadata.") if metadata_ok and upload_ok: pass elif upload_ok: collected_data['results']['skips'] += 1 repo_result.update({ 'errorType': 'FailedMetadata', 'errorMessage': 'Failed to update repository metadata', }) if not skip_upload: error("Repo updated but metadata was not.") exit = exit or 1 else: collected_data['results']['failures'] += 1 repo_result.update({ 'errorType': 'FailedUpdate', 'errorMessage': 'Failed to update repository', }) error("Failed to update a repository.") exit = exit or 1 collected_data['tests'].append(repo_result) return exit
def diff(realized_repository): # We create a temporary redirection from kwds's # output to our tempfile. This lets us capture the # diff and redirect it to their requested location as # well as to the XUnit report. diff_output = tempfile.NamedTemporaryFile(mode="rw+b") user_requested_output = kwds.get("output", None) # Replace their output handle with ours kwds["output"] = diff_output.name captured_io = {} with captured_io_for_xunit(kwds, captured_io): result = shed.diff_repo(ctx, realized_repository, **kwds) # May be extraneous but just want to ensure entire file is written # before a copy is made. diff_output.flush() # Redirect a copy to user_requested_output if they did: if user_requested_output is not None: shutil.copy(diff_output.name, user_requested_output) # Rewind to the start of the file and read it in its entirety diff_output.seek(0) diff_output_contents = diff_output.read() diff_output.close() # Collect data about what happened collected_data["results"]["total"] += 1 xunit_case = { "name": "shed-diff", "classname": realized_repository.name, "time": captured_io["time"], "stdout": captured_io["stdout"], "stderr": captured_io["stderr"], } if result >= 200: collected_data["results"]["errors"] += 1 xunit_case.update( { "errorType": "DiffError", "errorMessage": "Error diffing repositories", "errorContent": escape(diff_output_contents), "time": captured_io["time"], } ) elif result > 2: collected_data["results"]["failures"] += 1 xunit_case.update( { "errorType": "PlanemoDiffError", "errorMessage": "Planemo error diffing repositories", "errorContent": escape(diff_output_contents), } ) elif result == 2: collected_data["results"]["failures"] += 1 xunit_case.update( { "errorType": "RepoDoesNotExist", "errorMessage": "Target Repository does not exist", "errorContent": escape(diff_output_contents), } ) elif result == 1: collected_data["results"]["failures"] += 1 xunit_case.update( { "errorType": "Different", "errorMessage": "Repository is different", "errorContent": escape(diff_output_contents), } ) # Append our xunit test case collected_data["tests"].append(xunit_case) return result
def update(realized_repository): collected_data['results']['total'] += 1 skip_upload = kwds["skip_upload"] skip_metadata = kwds["skip_metadata"] upload_ret_code = 0 upload_ok = True captured_io = {} if not skip_upload: with captured_io_for_xunit(kwds, captured_io): upload_ret_code = shed.upload_repository( ctx, realized_repository, **kwds) upload_ok = not upload_ret_code repo_result = { 'classname': realized_repository.name, 'time': captured_io.get("time", None), 'name': 'shed-update', 'stdout': captured_io.get("stdout", None), 'stderr': captured_io.get("stderr", None), } # Now that we've uploaded (or skipped appropriately), collect results. if upload_ret_code == 2: collected_data['results']['failures'] += 1 repo_result.update({ 'errorType': 'FailedUpdate', 'errorMessage': 'Failed to update repository as it does not exist in target ToolShed', }) collected_data['tests'].append(repo_result) error("Failed to update repository it does not exist " "in target ToolShed.") return upload_ret_code exit = 0 metadata_ok = True if not skip_metadata: repo_id = shed.handle_force_create(realized_repository, ctx, shed_context, **kwds) # failing to create the repo, give up if repo_id is None: exit = shed.report_non_existent_repository(realized_repository) metadata_ok = False else: metadata_ok = realized_repository.update( ctx, shed_context, repo_id) else: info("Skipping repository metadata update.") if not metadata_ok: error("Failed to update repository metadata.") if metadata_ok and upload_ok: pass elif upload_ok: collected_data['results']['skips'] += 1 repo_result.update({ 'errorType': 'FailedMetadata', 'errorMessage': 'Failed to update repository metadata', }) if not skip_upload: error("Repo updated but metadata was not.") exit = exit or 1 else: collected_data['results']['failures'] += 1 repo_result.update({ 'errorType': 'FailedUpdate', 'errorMessage': 'Failed to update repository', }) error("Failed to update a repository.") exit = exit or 1 collected_data['tests'].append(repo_result) return exit
def update(realized_repository): collected_data['results']['total'] += 1 upload_ret_code = 0 upload_ok = True captured_io = {} if not kwds["skip_upload"]: with captured_io_for_xunit(kwds, captured_io): upload_ret_code = shed.upload_repository( ctx, realized_repository, **kwds ) upload_ok = not upload_ret_code # Now that we've uploaded (or skipped appropriately), collect results. if upload_ret_code == 2: collected_data['results']['failures'] += 1 collected_data['tests'].append({ 'classname': realized_repository.name, 'errorType': 'FailedUpdate', 'errorMessage': 'Failed to update repository as it does not exist in target ToolShed', 'time': captured_io["time"], 'name': 'shed-update', 'stdout': captured_io["stdout"], 'stderr': captured_io["stderr"], }) error("Failed to update repository it does not exist " "in target ToolShed.") return upload_ret_code repo_id = realized_repository.find_repository_id(ctx, shed_context) metadata_ok = True if not kwds["skip_metadata"]: metadata_ok = realized_repository.update(ctx, shed_context, repo_id) if metadata_ok: info("Repository metadata updated.") else: error("Failed to update repository metadata.") if metadata_ok and upload_ok: collected_data['tests'].append({ 'classname': realized_repository.name, 'time': captured_io["time"], 'name': 'shed-update', 'stdout': captured_io["stdout"], 'stderr': captured_io["stderr"], }) return 0 elif upload_ok: collected_data['results']['skips'] += 1 collected_data['tests'].append({ 'classname': realized_repository.name, 'errorType': 'FailedMetadata', 'errorMessage': 'Failed to update repository metadata', 'time': captured_io["time"], 'name': 'shed-update', 'stdout': captured_io["stdout"], 'stderr': captured_io["stderr"], }) error("Repo updated but metadata was not.") return 1 else: collected_data['results']['failures'] += 1 collected_data['tests'].append({ 'classname': realized_repository.name, 'errorType': 'FailedUpdate', 'errorMessage': 'Failed to update repository', 'time': captured_io["time"], 'name': 'shed-update', 'stdout': captured_io["stdout"], 'stderr': captured_io["stderr"], }) error("Failed to update a repository.") return 1