def test_intersection():
    fqn_a = SelectionCriteria.from_single_spec('fqn:model_a')
    fqn_b = SelectionCriteria.from_single_spec('fqn:model_b')
    intersection = SelectionIntersection(components=[fqn_a, fqn_b])
    assert list(intersection) == [fqn_a, fqn_b]
    combined = intersection.combine_selections(
        [{'model_a', 'model_b', 'model_c'}, {'model_c', 'model_d'}])
    assert combined == {'model_c'}
def test_union():
    fqn_a = SelectionCriteria.from_single_spec('fqn:model_a')
    fqn_b = SelectionCriteria.from_single_spec('fqn:model_b')
    fqn_c = SelectionCriteria.from_single_spec('fqn:model_c')
    difference = SelectionUnion(components=[fqn_a, fqn_b, fqn_c])
    combined = difference.combine_selections([{'model_a', 'model_b'},
                                              {'model_b', 'model_c'},
                                              {'model_d'}])
    assert combined == {'model_a', 'model_b', 'model_c', 'model_d'}
def test_difference():
    fqn_a = SelectionCriteria.from_single_spec('fqn:model_a')
    fqn_b = SelectionCriteria.from_single_spec('fqn:model_b')
    difference = SelectionDifference(components=[fqn_a, fqn_b])
    assert list(difference) == [fqn_a, fqn_b]
    combined = difference.combine_selections(
        [{'model_a', 'model_b', 'model_c'}, {'model_c', 'model_d'}])
    assert combined == {'model_a', 'model_b'}

    fqn_c = SelectionCriteria.from_single_spec('fqn:model_c')
    difference = SelectionDifference(components=[fqn_a, fqn_b, fqn_c])
    assert list(difference) == [fqn_a, fqn_b, fqn_c]
    combined = difference.combine_selections(
        [{'model_a', 'model_b', 'model_c'}, {'model_c', 'model_d'},
         {'model_a'}])
    assert combined == {'model_b'}
示例#4
0
 def parse_from_definition(cls, definition):
     if isinstance(definition, str):
         definition = SelectionCriteria.dict_from_single_spec(definition)
     elif 'union' in definition:
         definition = cls.parse_a_definition('union', definition)
     elif 'intersection' in definition:
         definition = cls.parse_a_definition('intersection', definition)
     elif isinstance(definition, dict):
         definition = cls.parse_dict_definition(definition)
     return definition
def test_raw_parse_complex():
    raw = '2+config.arg.secondarg:argument_value+4'
    result = SelectionCriteria.from_single_spec(raw)
    assert result.raw == raw
    assert result.method == MethodName.Config
    assert result.method_arguments == ['arg', 'secondarg']
    assert result.value == 'argument_value'
    assert not result.childrens_parents
    assert result.children
    assert result.parents
    assert result.parents_depth == 2
    assert result.children_depth == 4
def test_raw_parse_simple_infer_fqn_children():
    raw = 'asdf+'
    result = SelectionCriteria.from_single_spec(raw)
    assert result.raw == raw
    assert result.method == MethodName.FQN
    assert result.method_arguments == []
    assert result.value == 'asdf'
    assert not result.childrens_parents
    assert result.children
    assert not result.parents
    assert result.parents_depth is None
    assert result.children_depth is None
def test_raw_parse_simple_infer_path_modified():
    raw = '@' + os.path.join('asdf', '*')
    result = SelectionCriteria.from_single_spec(raw)
    assert result.raw == raw
    assert result.method == MethodName.Path
    assert result.method_arguments == []
    assert result.value == raw[1:]
    assert result.childrens_parents
    assert not result.children
    assert not result.parents
    assert result.parents_depth is None
    assert result.children_depth is None
示例#8
0
 def parse_a_definition(cls, def_type, definition):
     # this definition must be a list
     new_dict = {def_type: []}
     for sel_def in definition[def_type]:
         if isinstance(sel_def, dict):
             sel_def = cls.parse_from_definition(sel_def)
             new_dict[def_type].append(sel_def)
         elif isinstance(sel_def, str):
             sel_def = SelectionCriteria.dict_from_single_spec(sel_def)
             new_dict[def_type].append(sel_def)
         else:
             new_dict[def_type].append(sel_def)
     return new_dict
def test_raw_parse_weird():
    # you can have an empty method name (defaults to FQN/path) and you can have
    # an empty value, so you can also have this...
    result = SelectionCriteria.from_single_spec('')
    assert result.raw == ''
    assert result.method == MethodName.FQN
    assert result.method_arguments == []
    assert result.value == ''
    assert not result.childrens_parents
    assert not result.children
    assert not result.parents
    assert result.parents_depth is None
    assert result.children_depth is None
def test_raw_parse_invalid():
    with pytest.raises(RuntimeException):
        SelectionCriteria.from_single_spec('invalid_method:something')

    with pytest.raises(RuntimeException):
        SelectionCriteria.from_single_spec('@foo+')