async def download_compute_logs_endpoint(self, request: Request): run_id = request.path_params["run_id"] step_key = request.path_params["step_key"] file_type = request.path_params["file_type"] context = self.make_request_context(request) file = context.instance.compute_log_manager.get_local_path( run_id, step_key, ComputeIOType(file_type), ) if not path.exists(file): raise HTTPException(404) return FileResponse( context.instance.compute_log_manager.get_local_path( run_id, step_key, ComputeIOType(file_type), ), filename=f"{run_id}_{step_key}.{file_type}", )
def view(run_id, step_key, file_type): run_id = str(uuid.UUID(run_id)) # raises if not valid run_id step_key = step_key.split("/")[-1] # make sure we're not diving deep into out_name = "{}_{}.{}".format(run_id, step_key, file_type) manager = context.instance.compute_log_manager try: io_type = ComputeIOType(file_type) result = manager.get_local_path(run_id, step_key, io_type) if not os.path.exists(result): result = io.BytesIO() timeout = None if manager.is_watch_completed(run_id, step_key) else 0 except ValueError: result = io.BytesIO() timeout = 0 if not result: result = io.BytesIO() return send_file( result, as_attachment=True, attachment_filename=out_name, cache_timeout=timeout )
def resolve_computeLogs(self, graphene_info, runId, stepKey, ioType, cursor=None): check.str_param(ioType, 'ioType') # need to resolve to enum return get_compute_log_observable( graphene_info, runId, stepKey, ComputeIOType(ioType), cursor )