Skip to content

Extend the use of config_expr #2409

New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Merged
merged 8 commits into from
May 29, 2025
Merged

Extend the use of config_expr #2409

merged 8 commits into from
May 29, 2025

Conversation

romain-intel
Copy link
Contributor

Now allows:
@Environment(vars=config_expr("..."))

  • This was broken since vars was a ConfigValue and not an updatable dictionary

@project(name=config_expr("get_my_name(cfg)"))

  • This was broken because when evaluating the config_expr, we did not consider the globals at the point of call but instead inside the file defining config_expr.

Tests are deployed internally.

Copy link

@Copilot Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR extends the functionality of config_expr by allowing globals from the user’s call site to be captured and by adding a to_dict conversion for delayed evaluations.

  • Propagate saved globals via the constructor for DelayEvaluator
  • Introduce a new to_dict parameter in resolve_delayed_evaluator and update related usages
  • Adjust delayed-evaluator resolution in decorators and parameters to incorporate the to_dict conversion

Reviewed Changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 1 comment.

File Description
metaflow/user_configs/config_parameters.py Updated DelayEvaluator to accept saved_globals; adjusted eval usage and config_expr to capture caller globals; added to_dict conversion in resolve_delayed_evaluator
metaflow/parameters.py Updated resolve_delayed_evaluator calls to include to_dict conversion
metaflow/decorators.py Updated delayed evaluator unpacking and re-resolution to use the to_dict flag
Comments suppressed due to low confidence (1)

metaflow/user_configs/config_parameters.py:389

  • [nitpick] Consider enhancing the docstring or adding inline comments for the new 'to_dict' parameter to clarify its behavior and when its conversion is applied.
def resolve_delayed_evaluator(v: Any, ignore_errors: bool = False, to_dict: bool = False) -> Any:

@@ -157,8 +158,9 @@ class DelayEvaluator(collections.abc.Mapping):
of _unpacked_delayed_*
"""

def __init__(self, ex: str):
def __init__(self, ex: str, saved_globals: Optional[Dict[str, Any]] = None):
Copy link
Preview

Copilot AI May 15, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[nitpick] The constructor now accepts a new parameter 'saved_globals'. Consider updating the class docstring to explain the purpose and usage of this parameter to help future maintainers.

Copilot uses AI. Check for mistakes.

@nflx-mf-bot
Copy link
Collaborator

Netflix internal testing[1112] @ d6298d5

Now allows:
@Environment(vars=config_expr("..."))
  - This was broken since vars was a ConfigValue and not an updatable dictionary

@project(name=config_expr("get_my_name(cfg)"))
  - This was broken because when evaluating the config_expr, we did not
    consider the globals at the point of call but instead inside the file
    defining config_expr.

Tests are deployed internally.
  - fixes a case where configs and Runner/Deployer were not compatible due to
    configs not being processed in the same cwd

  - fixes an issue with constructing the config values (introduced in
    previous commit)

  - fixes the error message when both default and specified config files
    are not found
Previously something like:

RETRIES = config_expr("settings").retry

class MyFlow(FlowSpec):
  @retries(times=RETRIES)
  @step
  def start(self):
    ...

  @retries(times=RETRIES)
  @step
  def end(self):
    ...

would fail. Also, something like:

FOO = config_expr("settings").foo.bar
BAR = FOO.BAZ
BLAH = FOO.BAZ2

would also fail.

This fixes these issues by copying DelayEvaluator everytime and also
making the `__call__` function reentrant.
@savingoyal savingoyal merged commit c8ea885 into master May 29, 2025
28 of 29 checks passed
@savingoyal savingoyal deleted the fix/configs_func branch May 29, 2025 16:55
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants