Steve Pletcher
03/11/2021, 2:34 PMschrockn
03/11/2021, 2:44 PMSteve Pletcher
03/11/2021, 2:46 PMschrockn
03/11/2021, 2:49 PM@resource
declarations with two different config schemasfrom dagster import pipeline, solid, resource, ModeDefinition, ResourceDefinition, execute_pipeline
@solid(required_resource_keys={"a"})
def print_me(context):
<http://context.log.info|context.log.info>(str(context.resources.a.value))
class ContainsSomething:
def __init__(self, value):
self.value = value
@resource({"value": int})
def contains_int(context):
return ContainsSomething(context.resource_config["value"])
@resource({"string_value": str})
def contains_string(context):
return ContainsSomething(context.resource_config["string_value"])
mock_mode = ModeDefinition(
name="mock", resource_defs={"a": contains_int, "b": ResourceDefinition.none_resource()}
)
real_mode = ModeDefinition(
name="real", resource_defs={"a": contains_string, "b": ResourceDefinition.none_resource()}
)
@pipeline(mode_defs=[mock_mode, real_mode])
def i_need_resources_pipeline():
print_me()
if __name__ == "__main__":
execute_pipeline(
i_need_resources_pipeline,
run_config={"resources": {"a": {"config": {"value": 1}}}},
mode="mock",
)
execute_pipeline(
i_need_resources_pipeline,
run_config={"resources": {"a": {"config": {"string_value": "foo"}}}},
mode="real",
)
Steve Pletcher
03/11/2021, 3:20 PMschrockn
03/11/2021, 3:22 PMSteve Pletcher
03/11/2021, 3:37 PMdef generate_run_request(self) -> RunRequest:
return RunRequest(
run_key='whatever',
run_config={
"solids": {
...
},
"resources": {
"some_api": {
"config": {
# the prod version of this resource requires the 'api_url' setting,
# but the local/test version only requires the 'working_directory' setting
"api_url": '',
}
}
}
}
)
schrockn
03/11/2021, 3:42 PM@resource
declarations@resource(dict)
def contains_int(context):
return ContainsSomething(context.resource_config["value"])
Steve Pletcher
03/11/2021, 3:45 PMschrockn
03/11/2021, 3:51 PMSteve Pletcher
03/11/2021, 3:57 PMschrockn
03/11/2021, 4:00 PMconfigured
for currying in configuration which does not vary at runtime.
3) And if you aren’t using a resource in the mode and you just change the definition of the resource in that modeo to require no configurationSteve Pletcher
03/11/2021, 4:02 PMconfigured
. i'm not sure i understand your third point, though. are we misusing modes (i.e. should modes be defined at a per-pipeline level instead of just one mode per environment, with every pipeline using the same set of modes?)schrockn
03/11/2021, 4:02 PMSteve Pletcher
03/11/2021, 4:02 PMschrockn
03/11/2021, 4:02 PMSteve Pletcher
03/11/2021, 4:05 PMschrockn
03/11/2021, 4:05 PMSteve Pletcher
03/11/2021, 4:34 PMschrockn
03/11/2021, 4:34 PM