def __enter__(self): """ :rtype: flytekit.common.utils.AutoDeletingTempDir """ self._exit_stack.__enter__() temp_dir = self._exit_stack.enter_context( _utils.AutoDeletingTempDir("local_test_filesystem")) self._exit_stack.enter_context( _data_proxy.LocalDataContext(temp_dir.name)) self._exit_stack.enter_context( _data_proxy.LocalWorkingDirectoryContext(temp_dir)) return temp_dir
def execute(self, inputs, context=None): """ Just execute the function and return the outputs as a user-readable dictionary. :param flytekit.models.literals.LiteralMap inputs: :param context: :rtype: dict[Text,flytekit.models.common.FlyteIdlEntity] """ with _TemporaryConfiguration( _os.path.join(_os.path.dirname(__file__), "unit.config"), internal_overrides={"image": "unit_image"}, ): with _common_utils.AutoDeletingTempDir("unit_test_dir") as working_directory: with _data_proxy.LocalWorkingDirectoryContext(working_directory): return self._transform_for_user_output(self._execute_user_code(inputs))
def execute(self, inputs, context=None): """ Just execute the task and write the outputs to where they belong :param flytekit.models.literals.LiteralMap inputs: :param dict[Text, Text] context: :rtype: dict[Text, flytekit.models.common.FlyteIdlEntity] """ with _common_utils.AutoDeletingTempDir("engine_dir") as temp_dir: with _common_utils.AutoDeletingTempDir("task_dir") as task_dir: with _data_proxy.LocalWorkingDirectoryContext(task_dir): with _data_proxy.RemoteDataContext(): output_file_dict = dict() # This sets the logging level for user code and is the only place an sdk setting gets # used at runtime. Optionally, Propeller can set an internal config setting which # takes precedence. log_level = _internal_config.LOGGING_LEVEL.get( ) or _sdk_config.LOGGING_LEVEL.get() _logging.getLogger().setLevel(log_level) try: output_file_dict = self.sdk_task.execute( _common_engine.EngineContext( execution_id=_identifier. WorkflowExecutionIdentifier( project=_internal_config. EXECUTION_PROJECT.get(), domain=_internal_config. EXECUTION_DOMAIN.get(), name=_internal_config.EXECUTION_NAME. get()), execution_date=_datetime.utcnow(), stats=_get_stats( # Stats metric path will be: # registration_project.registration_domain.app.module.task_name.user_stats # and it will be tagged with execution-level values for project/domain/wf/lp "{}.{}.{}.user_stats".format( _internal_config.TASK_PROJECT.get( ) or _internal_config.PROJECT.get(), _internal_config.TASK_DOMAIN.get() or _internal_config.DOMAIN.get(), _internal_config.TASK_NAME.get() or _internal_config.NAME.get()), tags={ 'exec_project': _internal_config.EXECUTION_PROJECT. get(), 'exec_domain': _internal_config.EXECUTION_DOMAIN. get(), 'exec_workflow': _internal_config. EXECUTION_WORKFLOW.get(), 'exec_launchplan': _internal_config. EXECUTION_LAUNCHPLAN.get(), 'api_version': _api_version }), logging=_logging, tmp_dir=task_dir), inputs) except _exception_scopes.FlyteScopedException as e: _logging.error( "!!! Begin Error Captured by Flyte !!!") output_file_dict[ _constants. ERROR_FILE_NAME] = _error_models.ErrorDocument( _error_models.ContainerError( e.error_code, e.verbose_message, e.kind)) _logging.error(e.verbose_message) _logging.error( "!!! End Error Captured by Flyte !!!") except Exception: _logging.error( "!!! Begin Unknown System Error Captured by Flyte !!!" ) exc_str = _traceback.format_exc() output_file_dict[ _constants. ERROR_FILE_NAME] = _error_models.ErrorDocument( _error_models.ContainerError( "SYSTEM:Unknown", exc_str, _error_models.ContainerError.Kind. RECOVERABLE)) _logging.error(exc_str) _logging.error( "!!! End Error Captured by Flyte !!!") finally: for k, v in _six.iteritems(output_file_dict): _common_utils.write_proto_to_file( v.to_flyte_idl(), _os.path.join(temp_dir.name, k)) _data_proxy.Data.put_data(temp_dir.name, context['output_prefix'], is_multipart=True)