Skip to content

Commit

Permalink
Accept string values for non_argument_deps (#8023)
Browse files Browse the repository at this point in the history
Fixes #7233.
  • Loading branch information
shalabhc committed May 24, 2022
1 parent 9d98be1 commit 4062bca
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 8 deletions.
29 changes: 21 additions & 8 deletions python_modules/dagster/dagster/core/asset_defs/decorators.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ def asset(
name: Optional[str] = ...,
namespace: Optional[Sequence[str]] = ...,
ins: Optional[Mapping[str, AssetIn]] = ...,
non_argument_deps: Optional[Set[AssetKey]] = ...,
non_argument_deps: Optional[Union[Set[AssetKey], Set[str]]] = ...,
metadata: Optional[Mapping[str, Any]] = ...,
description: Optional[str] = ...,
required_resource_keys: Optional[Set[str]] = ...,
Expand All @@ -67,7 +67,7 @@ def asset(
name: Optional[Union[Callable[..., Any], Optional[str]]] = None,
namespace: Optional[Sequence[str]] = None,
ins: Optional[Mapping[str, AssetIn]] = None,
non_argument_deps: Optional[Set[AssetKey]] = None,
non_argument_deps: Optional[Union[Set[AssetKey], Set[str]]] = None,
metadata: Optional[Mapping[str, Any]] = None,
description: Optional[str] = None,
required_resource_keys: Optional[Set[str]] = None,
Expand Down Expand Up @@ -97,8 +97,8 @@ def asset(
name forms the asset key.
ins (Optional[Mapping[str, AssetIn]]): A dictionary that maps input names to their metadata
and namespaces.
non_argument_deps (Optional[Set[AssetKey]]): Set of asset keys that are upstream dependencies,
but do not pass an input to the asset.
non_argument_deps (Optional[Union[Set[AssetKey], Set[str]]]): Set of asset keys that are
upstream dependencies, but do not pass an input to the asset.
metadata (Optional[Dict[str, Any]]): A dict of metadata entries for the asset.
required_resource_keys (Optional[Set[str]]): Set of resource handles required by the op.
io_manager_key (Optional[str]): The resource key of the IOManager used for storing the
Expand Down Expand Up @@ -137,7 +137,7 @@ def inner(fn: Callable[..., Any]) -> AssetsDefinition:
name=cast(Optional[str], name), # (mypy bug that it can't infer name is Optional[str])
namespace=namespace,
ins=ins,
non_argument_deps=non_argument_deps,
non_argument_deps=_make_asset_keys(non_argument_deps),
metadata=metadata,
description=description,
required_resource_keys=required_resource_keys,
Expand Down Expand Up @@ -252,7 +252,7 @@ def multi_asset(
outs: Dict[str, Out],
name: Optional[str] = None,
ins: Optional[Mapping[str, AssetIn]] = None,
non_argument_deps: Optional[Set[AssetKey]] = None,
non_argument_deps: Optional[Union[Set[AssetKey], Set[str]]] = None,
description: Optional[str] = None,
required_resource_keys: Optional[Set[str]] = None,
compute_kind: Optional[str] = None,
Expand All @@ -273,7 +273,7 @@ def multi_asset(
outs: (Optional[Dict[str, Out]]): The Outs representing the produced assets.
ins (Optional[Mapping[str, AssetIn]]): A dictionary that maps input names to their metadata
and namespaces.
non_argument_deps (Optional[Set[AssetKey]]): Set of asset keys that are upstream dependencies,
non_argument_deps (Optional[Union[Set[AssetKey], Set[str]]]): Set of asset keys that are upstream dependencies,
but do not pass an input to the multi_asset.
required_resource_keys (Optional[Set[str]]): Set of resource handles required by the op.
io_manager_key (Optional[str]): The resource key of the IOManager used for storing the
Expand Down Expand Up @@ -313,7 +313,9 @@ def multi_asset(
def inner(fn: Callable[..., Any]) -> AssetsDefinition:

op_name = name or fn.__name__
asset_ins = build_asset_ins(fn, None, ins or {}, non_argument_deps)
asset_ins = build_asset_ins(
fn, None, ins or {}, non_argument_deps=_make_asset_keys(non_argument_deps)
)

# validate that the asset_deps make sense
valid_asset_deps = set(asset_ins.keys())
Expand Down Expand Up @@ -439,3 +441,14 @@ def build_asset_ins(
ins_by_asset_key[asset_key] = (stringified_asset_key, In(cast(type, Nothing)))

return ins_by_asset_key


def _make_asset_keys(deps: Optional[Union[Set[AssetKey], Set[str]]]) -> Optional[Set[AssetKey]]:
"""Convert all str items to AssetKey in the set."""
if deps is None:
return deps

deps_asset_keys = {
AssetKey.from_user_string(dep) if isinstance(dep, str) else dep for dep in deps
}
return deps_asset_keys
Original file line number Diff line number Diff line change
Expand Up @@ -314,6 +314,18 @@ def bar():
assert _asset_keys_for_node(result, "bar") == {AssetKey("bar")}


def test_non_argument_deps_as_str():
@asset
def foo():
pass

@asset(non_argument_deps={"foo"})
def bar():
pass

assert AssetKey("foo") in bar.asset_deps[AssetKey("bar")]


def test_multiple_non_argument_deps():
@asset
def foo():
Expand Down

0 comments on commit 4062bca

Please sign in to comment.