Allow FlowDecorators, FlowMutators and StepMutators to add_to_package #3082
GitHub Actions / Test Results — Unit
succeeded
Apr 28, 2026 in 0s
338 passed, 0 failed and 3 skipped
✅ junit-unit.xml
341 tests were completed in 44s with 338 passed, 0 failed and 3 skipped.
| Test suite | Passed | Failed | Skipped | Time |
|---|---|---|---|---|
| pytest | 338✅ | 3⚪ | 44s |
✅ pytest
test.unit.configs.test_config_naming.TestConfigNaming
✅ test_flow_completes
✅ test_config_with_underscore
✅ test_config_with_dash
✅ test_config_with_mixed_naming
test.unit.configs.test_config_plain.TestConfigPlain
✅ test_flow_completes
✅ test_plain_string_without_parser
✅ test_plain_list_with_parser
✅ test_plain_tuple_with_parser
test.unit.inheritance.test_inheritance.TestComprehensiveLinear
✅ test_flow_completes
✅ test_all_parameters_accessible
✅ test_all_configs_accessible
✅ test_computation_with_configs
test.unit.inheritance.test_inheritance.TestMutatorWithBaseConfig
✅ test_flow_completes
✅ test_base_parameters_accessible
✅ test_base_config_accessible
✅ test_mutator_injects_from_base_config
✅ test_computation_with_injected_params
test.unit.inheritance.test_inheritance.TestMutatorWithDerivedConfig
✅ test_flow_completes
✅ test_all_parameters_accessible
✅ test_all_configs_accessible
✅ test_base_mutator_uses_derived_config
✅ test_computation_with_forward_injected_params
test.unit.inheritance.test_inheritance.TestComprehensiveDiamond
✅ test_flow_completes
✅ test_parameters_from_all_branches
✅ test_configs_from_all_branches
✅ test_mro_resolution
✅ test_computation_across_branches
test.unit.inheritance.test_inheritance.TestComprehensiveMultiHierarchy
✅ test_flow_completes
✅ test_parameters_from_first_hierarchy
✅ test_parameters_from_second_hierarchy
✅ test_merge_point_parameters
✅ test_configs_from_both_hierarchies
✅ test_step_override_from_merge_point
✅ test_cross_hierarchy_computation
✅ test_mutator_from_first_hierarchy_executes
✅ test_decorated_step_from_first_hierarchy
test.unit.inheritance.test_inheritance.TestInheritanceIntegration
✅ test_all_flows_complete_successfully[comprehensive_linear_run]
✅ test_all_flows_complete_successfully[mutator_with_base_config_run]
✅ test_all_flows_complete_successfully[mutator_with_derived_config_run]
✅ test_all_flows_complete_successfully[comprehensive_diamond_run]
✅ test_all_flows_complete_successfully[comprehensive_multi_hierarchy_run]
✅ test_expected_steps_present[comprehensive_linear_run-expected_steps0]
✅ test_expected_steps_present[mutator_with_base_config_run-expected_steps1]
✅ test_expected_steps_present[mutator_with_derived_config_run-expected_steps2]
✅ test_expected_steps_present[comprehensive_diamond_run-expected_steps3]
✅ test_expected_steps_present[comprehensive_multi_hierarchy_run-expected_steps4]
test.unit.localbatch.test_localbatch.TestBatchAPI
✅ test_health
✅ test_describe_queues_returns_default
✅ test_default_queue_is_healthy
✅ test_describe_compute_environments
✅ test_register_job_definition
✅ test_revision_increments_on_re_register
✅ test_describe_job_definitions_by_name
✅ test_submit_job_returns_id_and_name
✅ test_job_reaches_terminal_state
✅ test_describe_jobs_returns_correct_shape
✅ test_terminate_job_transitions_to_failed
✅ test_list_jobs_returns_summary_list
✅ test_ecs_metadata_endpoint
test.unit.localbatch.test_localbatch.TestDockerExecution
✅ test_successful_container
✅ test_failed_container_reports_exit_code
✅ test_inject_env_is_visible_inside_container
test.unit.localbatch.test_localbatch.TestMetaflowE2E
⚪ test_batch_step_artifacts_are_persisted
⚪ test_run_succeeds
⚪ test_all_steps_have_tasks
test.unit.mutators.test_add_decorator_returns.TestAddDecoratorReturns
✅ test_flow_completes
✅ test_returned_decorator_is_not_none
✅ test_returned_decorator_has_name
✅ test_decorator_was_applied
✅ test_duplicate_ignore_returns_none
✅ test_duplicate_was_not_applied
test.unit.mutators.test_dual_inheritance.TestDualInheritance
✅ test_flow_completes
✅ test_pre_mutate_ran
✅ test_mutate_ran
✅ test_pre_step_ran
✅ test_post_step_ran
test.unit.mutators.test_flow_mutator_addition.TestDynamicFlowMutatorAddition
✅ test_flow_completes
✅ test_inner_pre_mutate_ran
✅ test_inner_mutate_ran
test.unit.mutators.test_flow_mutator_addition.TestStringFlowMutatorAddition
✅ test_flow_completes
✅ test_string_mutator_pre_mutate_ran
✅ test_string_mutator_mutate_ran
test.unit.mutators.test_post_step_none_false.TestPostStepNoneFalse
✅ test_flow_completes
✅ test_pre_step_ran
✅ test_post_step_ran
test.unit.mutators.test_remove_decorator_guard.TestRemoveDecoratorGuard
✅ test_do_all_from_mutate_raises
✅ test_specific_match_from_mutate_raises
✅ test_do_all_from_pre_mutate_succeeds
test.unit.mutators.test_string_step_mutator.TestStringStepMutatorAddition
✅ test_flow_completes
✅ test_string_step_mutator_ran
test.unit.test_add_to_package
✅ test_flow_decorator_add_to_package
✅ test_flow_mutator_add_to_package_module
✅ test_step_mutator_deduplicated_across_steps
✅ test_step_mutator_distinct_instances
✅ test_legacy_two_tuple_defaults_to_code_content
✅ test_non_unique_filename_raises
✅ test_module_content_deduplicated
✅ test_other_content_type
✅ test_ordering_flow_decorators_before_step_decorators
✅ test_user_content_recorded
✅ test_user_content_duplicate_same_path_dedup
✅ test_user_content_duplicate_different_path_raises
✅ test_user_code_tuples_emits_addl_user_content_not_in_walker
✅ test_user_code_tuples_skips_addl_when_walker_already_has_it
✅ test_user_code_tuples_respects_user_code_filter
✅ test_integration_add_addl_then_user_code_tuples_dedupes_by_arcname
✅ test_integration_add_addl_contributes_file_outside_flow_dir
test.unit.test_argo_workflows_cli
✅ test_sanitize_for_argo[a-valid-name-a-valid-name]
✅ test_sanitize_for_argo[removing---@+_characters@_+-removing---characters]
✅ test_sanitize_for_argo[numb3rs-4r3-0k-123-numb3rs-4r3-0k-123]
✅ test_sanitize_for_argo[proj3ct.br4nch.flow_name-proj3ct.br4nch.flowname]
✅ test_sanitize_for_argo[---1breaking1---.--2subdomain2--.-3rules3-----1breaking1.2subdomain2.3rules3----]
✅ test_sanitize_for_argo[1brea---king1.2sub---domain2.-3ru-les3---1brea---king1.2sub---domain2.3ru-les3--]
✅ test_sanitize_for_argo[project.branch-cut-short-.flowname-project.branch-cut-short.flowname]
✅ test_sanitize_for_argo[test...name-test.name]
✅ test_get_schedule_no_decorator_returns_none
✅ test_get_schedule[schedule_none]
✅ test_get_schedule[schedule_none_with_timezone]
✅ test_get_schedule[cron_expression]
✅ test_get_schedule[cron_expression_with_timezone]
✅ test_trigger_explanation_no_schedule_does_not_claim_cronworkflow
✅ test_trigger_explanation_schedule_none_does_not_claim_cronworkflow
✅ test_trigger_explanation_active_schedule_claims_cronworkflow
test.unit.test_aws_util
✅ test_validate_aws_tag[test-value-False]
✅ test_validate_aws_tag[test-with@chars+ - = ._/-value@with.chars-+ - = ._/-False]
✅ test_validate_aws_tag[aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-ok-False]
✅ test_validate_aws_tag[aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-ok-True]
✅ test_validate_aws_tag[ok-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-False]
✅ test_validate_aws_tag[ok-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-True]
✅ test_validate_aws_tag[aWs:not-allowed-ok-True]
✅ test_validate_aws_tag[ok-AWS:not-allowed-True]
✅ test_validate_aws_tag[ok-aws:-middleaWs:not-allowed-False]
test.unit.test_compute_resource_attributes
✅ test_compute_resource_attributes
✅ test_compute_resource_attributes_string
test.unit.test_conda_decorator
✅ test_decorator_custom_attributes
✅ test_decorator_custom_attributes_with_backward_compatibility
test.unit.test_config_value
✅ test_isinstance
✅ test_todict
✅ test_container_has_config_value
✅ test_non_modifiable
✅ test_json_dumpable
✅ test_dict_like_behavior
test.unit.test_content_addressed_store
✅ test_load_blobs_error_message_uses_current_path_key[missing_version]
✅ test_load_blobs_error_message_uses_current_path_key[unknown_version]
✅ test_load_blobs_error_message_uses_current_path_key[unpack_failure]
test.unit.test_kubernetes
✅ test_kubernetes_decorator_validate_kube_labels[None]
✅ test_kubernetes_decorator_validate_kube_labels[labels1]
✅ test_kubernetes_decorator_validate_kube_labels[labels2]
✅ test_kubernetes_decorator_validate_kube_labels[labels3]
✅ test_kubernetes_decorator_validate_kube_labels[labels4]
✅ test_kubernetes_decorator_validate_kube_labels[labels5]
✅ test_kubernetes_decorator_validate_kube_labels[labels6]
✅ test_kubernetes_decorator_validate_kube_labels[labels7]
✅ test_kubernetes_decorator_validate_kube_labels_fail[labels0]
✅ test_kubernetes_decorator_validate_kube_labels_fail[labels1]
✅ test_kubernetes_decorator_validate_kube_labels_fail[labels2]
✅ test_kubernetes_decorator_validate_kube_labels_fail[labels3]
✅ test_kubernetes_decorator_validate_kube_labels_fail[labels4]
✅ test_kubernetes_decorator_validate_kube_labels_fail[labels5]
✅ test_kubernetes_parse_keyvalue_list[items0-True]
✅ test_kubernetes_parse_keyvalue_list[items1-True]
test.unit.test_local_metadata_provider
✅ test_deduce_run_id_from_meta_dir
test.unit.test_metaflow_version
✅ test_format_git_describe_parses_known_shapes[2.19.22-0-g4ff334e-False-2.19.22]
✅ test_format_git_describe_parses_known_shapes[2.19.22-0-g4ff334e-True-2.19.22]
✅ test_format_git_describe_parses_known_shapes[2.19.22-5-g4ff334e-False-2.19.22.post5-git4ff334e]
✅ test_format_git_describe_parses_known_shapes[2.19.22-5-g4ff334e-True-2.19.22.post5]
✅ test_format_git_describe_parses_known_shapes[2.19.22-5-g4ff334e-dirty-False-2.19.22.post5-git4ff334e-dirty]
✅ test_format_git_describe_parses_known_shapes[2.19.22-0-g4ff334e-dirty-False-2.19.22-dirty]
✅ test_format_git_describe_parses_known_shapes[v1.0-rc.1-0-gabcdef0-False-v1.0-rc.1]
✅ test_format_git_describe_parses_known_shapes[v1.0-rc.1-12-gabcdef0-False-v1.0-rc.1.post12-gitabcdef0]
✅ test_format_git_describe_parses_known_shapes[v1.0-rc.1-12-gabcdef0-True-v1.0-rc.1.post12]
✅ test_format_git_describe_parses_known_shapes[v1.0-rc.1-12-gabcdef0-dirty-False-v1.0-rc.1.post12-gitabcdef0-dirty]
✅ test_format_git_describe_parses_known_shapes[v9.2.97-rc.15-100-g3a13f86-dirty-False-v9.2.97-rc.15.post100-git3a13f86-dirty]
✅ test_format_git_describe_returns_none_for_unparseable[None]
✅ test_format_git_describe_returns_none_for_unparseable[short]
✅ test_format_git_describe_returns_none_for_unparseable[a-b]
✅ test_format_git_describe_returns_none_for_unparseable[a-b-dirty]
✅ test_make_public_version_strips_only_private_suffixes[2.19.22-2.19.22]
✅ test_make_public_version_strips_only_private_suffixes[2.19.22.post5-git4ff334e-2.19.22.post5]
✅ test_make_public_version_strips_only_private_suffixes[2.19.22.post5-git4ff334e-dirty-2.19.22.post5]
✅ test_make_public_version_strips_only_private_suffixes[v1.0-rc.1-v1.0-rc.1]
✅ test_make_public_version_strips_only_private_suffixes[v1.0-rc.1.post12-gitabcdef0-v1.0-rc.1.post12]
✅ test_make_public_version_strips_only_private_suffixes[v1.0-rc.1.post12-gitabcdef0-dirty-v1.0-rc.1.post12]
✅ test_make_public_version_strips_only_private_suffixes[v1.0-rc.1.post12-gitabcdef0+ext(foo)-v1.0-rc.1.post12]
✅ test_get_version_public_from_info_preserves_dashed_tags
test.unit.test_multicore_utils
✅ test_parallel_map
test.unit.test_package_suffixes_mutator
✅ test_init_list_form
✅ test_init_string_form
✅ test_add_to_package_yields_matching_files
✅ test_add_to_package_empty_suffixes_yields_nothing
test.unit.test_packaging_utils
✅ test_walk_includes_files_when_hidden_dir_is_ancestor_of_root
✅ test_walk_excludes_hidden_dirs_under_root
test.unit.test_pypi_decorator
✅ test_decorator_custom_attributes
test.unit.test_pypi_parsers
✅ test_yml_parser
✅ test_requirements_parser
✅ test_toml_parser
test.unit.test_remove_decorator
✅ test_remove_decorator
test.unit.test_s3_storage
✅ test_save_bytes_put_many_preserves_metadata_slot
✅ test_save_bytes_sequential_preserves_metadata
test.unit.test_secrets_decorator
✅ test_missing_default_secrets_backend_type
✅ test_secret_spec_from_str_explicit_type
✅ test_secret_spec_from_str_implicit_type
✅ test_secret_spec_from_dict_explicit_type_no_options
✅ test_secret_spec_from_dict_implicit_type_with_options
✅ test_role_resolution_source_level_wins
✅ test_role_resolution_falls_back_to_decorator_level
✅ test_secret_spec_from_dict_rejects_invalid[bad_type]
✅ test_secret_spec_from_dict_rejects_invalid[bad_id]
✅ test_secret_spec_from_dict_rejects_invalid[bad_options]
✅ test_secret_spec_from_dict_rejects_invalid[bad_role]
✅ test_secrets_provider_resolution_unknown_backend
✅ test_validate_env_vars_across_secrets_rejects_overlap
✅ test_validate_env_vars_vs_existing_env_rejects_collision
✅ test_validate_env_vars_accepts_typical_keys
✅ test_validate_env_vars_rejects_mistyped_keys[1]
✅ test_validate_env_vars_rejects_mistyped_keys[bad_key1]
✅ test_validate_env_vars_rejects_mistyped_keys[old_school]
✅ test_validate_env_vars_rejects_mistyped_values[1]
✅ test_validate_env_vars_rejects_mistyped_values[bad_value1]
✅ test_validate_env_vars_rejects_mistyped_values[old_school]
✅ test_validate_env_vars_rejects_weird_keys[1_]
✅ test_validate_env_vars_rejects_weird_keys[hello world]
✅ test_validate_env_vars_rejects_weird_keys[hey_arnold!]
✅ test_validate_env_vars_rejects_weird_keys[I_\u2665_NY]
✅ test_validate_env_vars_rejects_weird_keys[door-]
✅ test_validate_env_vars_rejects_weird_keys[METAFLOW_SOMETHING_OR_OTHER]
test.unit.test_system_context
✅ test_execution_phase_enum_values
✅ test_phase_from_cli_args_none
✅ test_phase_from_cli_args_empty
✅ test_phase_from_cli_args_run_is_launch
✅ test_phase_from_cli_args_resume_is_launch
✅ test_phase_from_cli_args_step_is_task
✅ test_phase_from_cli_args_init_is_task
✅ test_phase_from_cli_args_spin_step_is_task
✅ test_phase_from_cli_args_batch_is_trampoline
✅ test_phase_from_cli_args_kubernetes_is_trampoline
✅ test_phase_from_cli_args_deployment_is_launch
✅ test_phase_from_cli_args_unknown_is_launch
✅ test_system_context_launch_phase_queries
✅ test_system_context_trampoline_phase_queries
✅ test_system_context_task_phase_queries
✅ test_system_context_initial_values_are_none
✅ test_system_context_progressive_update
✅ test_system_context_update_overwrites
✅ test_system_context_update_invalid_key_raises
✅ test_system_context_reset
✅ test_system_context_input_paths_initial_none
✅ test_system_context_input_paths_update
✅ test_decorator_system_ctx_property
✅ test_step_decorator_system_ctx_property
✅ test_flow_decorator_system_ctx_property
✅ test_step_decorator_ctx_variants_are_none
✅ test_flow_decorator_ctx_variant_is_none
✅ test_step_init_ctx_override
✅ test_task_step_completed_ctx_override_success
✅ test_task_step_completed_ctx_handles_exception
✅ test_task_decorate_ctx_override
✅ test_flow_init_ctx_override
✅ test_legacy_hook_still_works
✅ test_shared_state_publish_and_get
✅ test_shared_state_get_missing_namespace
✅ test_shared_state_get_missing_key
✅ test_shared_state_get_default
✅ test_shared_state_has_published_namespace
✅ test_shared_state_has_published_key
✅ test_shared_state_get_all_published
✅ test_shared_state_get_all_published_missing
✅ test_shared_state_overwrite_published
✅ test_shared_state_multiple_namespaces
✅ test_step_isolation_shared_state
✅ test_registration_register_and_get_step_decorators
✅ test_registration_get_step_decorators_missing_step
✅ test_registration_reset_clears_shared_and_decorators
test.unit.test_tutorial_01_02_csv_parsing
✅ test_playlist_csv_parsing
✅ test_stats_csv_parsing
test.cmd.develop.test_stub_generator.TestStubGenerator
✅ test_get_element_name_basic_types
✅ test_get_element_name_class_objects
✅ test_get_element_name_generic_alias_with_class_objects
✅ test_get_element_name_nested_generics
✅ test_get_element_name_callable_with_class_args
✅ test_get_element_name_forward_references
✅ test_get_element_name_string_annotations
✅ test_get_element_name_self_reference
✅ test_function_stub_generation
✅ test_class_stub_generation
✅ test_exploit_annotation_method
✅ test_imports_and_typing_imports
✅ test_safe_module_aliasing
✅ test_get_element_name_union_types
✅ test_get_element_name_tuple_types
✅ test_get_element_name_tuple_with_ellipsis
✅ test_get_element_name_callable_with_ellipsis
✅ test_get_element_name_newtype
✅ test_get_element_name_classvar
✅ test_get_element_name_final
✅ test_get_element_name_literal
✅ test_get_element_name_deeply_nested
✅ test_get_element_name_error_handling_none_module
✅ test_get_element_name_error_handling_eval_failure
✅ test_get_element_name_generic_origin_without_name
✅ test_get_element_name_builtin_collections
✅ test_get_element_name_type_with_special_chars
✅ test_get_element_name_nested_classes
✅ test_generator_state_isolation
✅ test_get_element_name_nonetype_handling
test.cmd.develop.test_stub_generator
✅ test_class_objects_in_generic_types_no_leakage
test.cmd.diff.test_metaflow_diff.TestMetaflowDiff
✅ test_extract_code_package
✅ test_perform_diff_output_false[True]
✅ test_perform_diff_output_false[False]
✅ test_perform_diff_output_true
✅ test_run_op
✅ test_op_patch
test.plugins.conda.test_conda_decorator_unit.TestCondaStepDecorator
✅ test_default_attributes
✅ test_user_defined_python
✅ test_user_defined_packages
✅ test_libraries_backward_compat
✅ test_disabled_flag
✅ test_packages_and_libraries_merged
test.plugins.conda.test_conda_environment_unit.TestManifestConcurrentWrites
✅ test_concurrent_writes_no_corruption
test.plugins.conda.test_conda_environment_unit.TestCleanupCondaFile
✅ test_cleanup_temp_file
✅ test_cleanup_nonexistent_file_no_error
test.plugins.conda.test_parsers.TestRequirementsTxtParser
✅ test_simple_package
✅ test_multiple_packages
✅ test_python_version
✅ test_comments_and_blank_lines
✅ test_inline_comments
✅ test_extras
✅ test_direct_reference
✅ test_environment_markers_rejected
✅ test_invalid_requirement
✅ test_multiple_python_specs_rejected
✅ test_empty_content
✅ test_rye_lockfile_skip
test.plugins.conda.test_parsers.TestCondaEnvironmentYmlParser
✅ test_simple_deps
✅ test_python_version
✅ test_no_version
✅ test_comments_skipped
✅ test_subsection_rejected
✅ test_inline_comments
✅ test_empty_deps
✅ test_double_equals
Loading