def test_scalar_union(): non_scalar_type = {"str_field": String} scalar_union_type = ScalarUnion( scalar_type=int, non_scalar_schema=non_scalar_type, ) assert_inner_types(scalar_union_type, String, Int, non_scalar_type)
def test_scalar_union(): non_scalar_type = {'str_field': String} scalar_union_type = ScalarUnion( scalar_type=resolve_to_config_type(int), non_scalar_type=resolve_to_config_type(non_scalar_type), ) assert_inner_types(scalar_union_type, String, Int, non_scalar_type)
def test_scalar_or_selector(): int_or_selector = ScalarUnion( scalar_type=int, non_scalar_schema=Selector({ 'a_string': str, 'an_int': int }), ) assert validate_config(int_or_selector, 2).success assert not validate_config(int_or_selector, '2').success assert not validate_config(int_or_selector, False).success assert validate_config(int_or_selector, {'a_string': 'kjdfk'}).success assert validate_config(int_or_selector, {'an_int': 2}).success assert not validate_config(int_or_selector, {}).success assert not validate_config(int_or_selector, { 'a_string': 'kjdfk', 'an_int': 2 }).success assert not validate_config(int_or_selector, {'wrong_key': 'kjdfd'}).success assert not validate_config(int_or_selector, {'a_string': 2}).success assert not validate_config(int_or_selector, { 'a_string': 'kjdfk', 'extra_field': 'kd' }).success
def test_scalar_or_selector(): int_or_selector = ScalarUnion( scalar_type=int, non_scalar_schema=Selector({ "a_string": str, "an_int": int }), ) assert validate_config(int_or_selector, 2).success assert not validate_config(int_or_selector, "2").success assert not validate_config(int_or_selector, False).success assert validate_config(int_or_selector, {"a_string": "kjdfk"}).success assert validate_config(int_or_selector, {"an_int": 2}).success assert not validate_config(int_or_selector, {}).success assert not validate_config(int_or_selector, { "a_string": "kjdfk", "an_int": 2 }).success assert not validate_config(int_or_selector, {"wrong_key": "kjdfd"}).success assert not validate_config(int_or_selector, {"a_string": 2}).success assert not validate_config(int_or_selector, { "a_string": "kjdfk", "extra_field": "kd" }).success
def test_scalar_or_list(): int_or_list = ScalarUnion(scalar_type=int, non_scalar_schema=resolve_to_config_type([str])) assert validate_config(int_or_list, 2).success assert not validate_config(int_or_list, "2").success assert not validate_config(int_or_list, False).success assert validate_config(int_or_list, []).success assert validate_config(int_or_list, ["ab"]).success assert not validate_config(int_or_list, [2]).success assert not validate_config(int_or_list, {}).success
def test_scalar_or_list(): int_or_list = ScalarUnion(scalar_type=resolve_to_config_type(int), non_scalar_type=resolve_to_config_type([str])) assert validate_config(int_or_list, 2).success assert not validate_config(int_or_list, '2').success assert not validate_config(int_or_list, False).success assert validate_config(int_or_list, []).success assert validate_config(int_or_list, ['ab']).success assert not validate_config(int_or_list, [2]).success assert not validate_config(int_or_list, {}).success
def config_type(cls): return { "task_definition": Field( StringSource, is_required=False, description=( "The task definition to use when launching new tasks. " "If none is provided, each run will create its own task " "definition." ), ), "container_name": Field( StringSource, is_required=False, default_value="run", description=( "The container name to use when launching new tasks. Defaults to 'run'." ), ), "secrets": Field( Array( ScalarUnion( scalar_type=str, non_scalar_schema={"name": StringSource, "valueFrom": StringSource}, ) ), is_required=False, description=( "An array of AWS Secrets Manager secrets. These secrets will " "be mounted as environment variabls in the container. See " "https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_Secret.html." ), ), "secrets_tag": Field( Noneable(StringSource), is_required=False, default_value="dagster", description=( "AWS Secrets Manager secrets with this tag will be mounted as " "environment variables in the container. Defaults to 'dagster'." ), ), "include_sidecars": Field( bool, is_required=False, default_value=False, description=( "Whether each run should use the same sidecars as the task that launches it. " "Defaults to False." ), ), }
def test_list_of_scalar_or_dict(): int_or_dict_list = resolve_to_config_type( [ScalarUnion(scalar_type=int, non_scalar_schema=Shape({"a_string": str}))] ) assert validate_config(int_or_dict_list, []).success assert validate_config(int_or_dict_list, [2]).success assert validate_config(int_or_dict_list, [{"a_string": "kjdfd"}]).success assert validate_config(int_or_dict_list, [2, {"a_string": "kjdfd"}]).success assert not validate_config(int_or_dict_list, [2, {"wrong_key": "kjdfd"}]).success assert not validate_config(int_or_dict_list, [2, {"a_string": 2343}]).success assert not validate_config(int_or_dict_list, ["kjdfkd", {"a_string": "kjdfd"}]).success
def test_scalar_or_dict(): int_or_dict = ScalarUnion(scalar_type=int, non_scalar_schema=Shape({"a_string": str})) assert validate_config(int_or_dict, 2).success assert not validate_config(int_or_dict, "2").success assert not validate_config(int_or_dict, False).success assert validate_config(int_or_dict, {"a_string": "kjdfk"}).success assert not validate_config(int_or_dict, {}).success assert not validate_config(int_or_dict, {"wrong_key": "kjdfd"}).success assert not validate_config(int_or_dict, {"a_string": 2}).success assert not validate_config(int_or_dict, {"a_string": "kjdfk", "extra_field": "kd"}).success
def test_scalar_or_dict(): int_or_dict = ScalarUnion( scalar_type=resolve_to_config_type(int), non_scalar_type=Shape({'a_string': str}) ) assert validate_config(int_or_dict, 2).success assert not validate_config(int_or_dict, '2').success assert not validate_config(int_or_dict, False).success assert validate_config(int_or_dict, {'a_string': 'kjdfk'}).success assert not validate_config(int_or_dict, {}).success assert not validate_config(int_or_dict, {'wrong_key': 'kjdfd'}).success assert not validate_config(int_or_dict, {'a_string': 2}).success assert not validate_config(int_or_dict, {'a_string': 'kjdfk', 'extra_field': 'kd'}).success
def test_list_of_scalar_or_dict(): int_or_dict_list = resolve_to_config_type( [ ScalarUnion( scalar_type=resolve_to_config_type(int), non_scalar_type=Shape({'a_string': str}) ) ] ) assert validate_config(int_or_dict_list, []).success assert validate_config(int_or_dict_list, [2]).success assert validate_config(int_or_dict_list, [{'a_string': 'kjdfd'}]).success assert validate_config(int_or_dict_list, [2, {'a_string': 'kjdfd'}]).success assert not validate_config(int_or_dict_list, [2, {'wrong_key': 'kjdfd'}]).success assert not validate_config(int_or_dict_list, [2, {'a_string': 2343}]).success assert not validate_config(int_or_dict_list, ['kjdfkd', {'a_string': 'kjdfd'}]).success
def test_scalar_union(): # Requiring resolve calls is bad: https://github.com/dagster-io/dagster/issues/2266 @solid(config=ScalarUnion(resolve_to_config_type(str), resolve_to_config_type({'bar': str}))) def solid_with_config(_): pass @pipeline def single_solid_pipeline(): solid_with_config() config_snaps = build_config_schema_snapshot(single_solid_pipeline).all_config_snaps_by_key scalar_union_key = solid_with_config.config_field.config_type.key assert scalar_union_key in config_snaps assert config_snaps[config_snaps[scalar_union_key].scalar_type_key].key == 'String' assert ( config_snaps[config_snaps[scalar_union_key].non_scalar_type_key].kind == ConfigTypeKind.STRICT_SHAPE )