Esempio n. 1
0
def test_map_attribute_to_seq(class_node: yatiml.Node) -> None:
    assert class_node.has_attribute_type('dict1', dict)

    class_node.map_attribute_to_seq('dict1', 'item_id', 'price')

    assert class_node.has_attribute_type('dict1', list)
    attr_node = class_node.get_attribute('dict1')

    assert len(attr_node.seq_items()) == 3
    first_item_node = attr_node.seq_items()[0]
    assert first_item_node.has_attribute('item_id')
    assert first_item_node.has_attribute('price')
    first_item_id = first_item_node.get_attribute('item_id').get_value()

    second_item_node = attr_node.seq_items()[1]
    assert second_item_node.has_attribute('item_id')
    assert second_item_node.has_attribute('price')
    second_item_id = second_item_node.get_attribute('item_id').get_value()

    third_item_node = attr_node.seq_items()[2]
    assert third_item_node.has_attribute('item_id')
    assert third_item_node.has_attribute('price')
    third_item_id = third_item_node.get_attribute('item_id').get_value()

    assert first_item_id == 'item1'
    assert second_item_id == 'item2'
    assert third_item_id == 'item3'

    assert ((first_item_id == 'item1' and second_item_id == 'item2')
            or (first_item_id == 'item2' and second_item_id == 'item1'))
Esempio n. 2
0
def test_map_attribute_to_index(class_node: yatiml.Node) -> None:
    class_node.map_attribute_to_index('dict1', 'item_id', 'price')

    assert class_node.has_attribute_type('dict1', dict)
    attr_node = class_node.get_attribute('dict1')

    assert attr_node.is_mapping()

    assert attr_node.has_attribute('item1')
    item1_node = attr_node.get_attribute('item1')
    assert len(item1_node.yaml_node.value) == 2
    assert item1_node.has_attribute('item_id')
    assert item1_node.get_attribute('item_id').get_value() == 'item1'
    assert item1_node.has_attribute('price')
    assert item1_node.get_attribute('price').get_value() == 100.0

    assert attr_node.has_attribute('item2')
    item2_node = attr_node.get_attribute('item2')
    assert len(item2_node.yaml_node.value) == 2
    assert item2_node.has_attribute('item_id')
    assert item2_node.get_attribute('item_id').get_value() == 'item2'
    assert item2_node.has_attribute('price')
    assert item2_node.get_attribute('price').get_value() == 200.0

    assert attr_node.has_attribute('item3')
    item3_node = attr_node.get_attribute('item3')
    assert len(item3_node.yaml_node.value) == 2
    assert item3_node.has_attribute('item_id')
    assert item3_node.get_attribute('item_id').get_value() == 'item3'
    assert item3_node.has_attribute('price')
    assert item3_node.get_attribute('price').get_value() == 150.0
Esempio n. 3
0
def test_seq_attribute_to_map(class_node: yatiml.Node,
                              class_node_dup_key: yatiml.Node) -> None:
    assert class_node.has_attribute('list1')
    assert class_node.get_attribute('list1').is_sequence()

    class_node.seq_attribute_to_map('list1', 'item_id', 'price')

    assert class_node.has_attribute_type('list1', dict)
    attr_node = class_node.get_attribute('list1')
    assert attr_node.is_mapping()

    assert attr_node.has_attribute_type('item1', float)
    item1_node = attr_node.get_attribute('item1')
    assert item1_node.get_value() == 100.0

    assert attr_node.has_attribute_type('item2', dict)
    item2_node = attr_node.get_attribute('item2')
    assert not item2_node.has_attribute('item_id')
    assert item2_node.has_attribute('price')
    assert item2_node.has_attribute('on_sale')

    # check that it fails silently if the attribute is missing or not a list
    class_node.seq_attribute_to_map('non_existent_attribute', 'item_id')
    class_node.seq_attribute_to_map('attr1', 'item_id')

    # check that it raises with strict=True and duplicate keys
    with pytest.raises(yatiml.SeasoningError):
        class_node_dup_key.seq_attribute_to_map('dup_list',
                                                'item_id',
                                                strict=True)
Esempio n. 4
0
 def _yatiml_savorize(cls, node: yatiml.Node) -> None:
     if node.has_attribute('multiplicity'):
         if node.has_attribute_type('multiplicity', int):
             attr = node.get_attribute('multiplicity')
             start_mark = attr.yaml_node.start_mark
             end_mark = attr.yaml_node.end_mark
             new_seq = yaml.nodes.SequenceNode(
                     'tag:yaml.org,2002:seq', [attr.yaml_node], start_mark,
                     end_mark)
             node.set_attribute('multiplicity', new_seq)
Esempio n. 5
0
 def _yatiml_savorize(cls, node: yatiml.Node) -> None:
     str_to_int = {
         'five': 5,
         'six': 6,
         'seven': 7,
     }
     if node.has_attribute_type('age', str):
         str_val = node.get_attribute('age').get_value()
         if str_val in str_to_int:
             node.set_attribute('age', str_to_int[str_val])
         else:
             raise yatiml.SeasoningError('Invalid age string')
Esempio n. 6
0
def test_has_attribute_type(class_node: yatiml.Node) -> None:
    assert class_node.has_attribute_type('attr1', int)
    assert not class_node.has_attribute_type('attr1', float)
    assert class_node.has_attribute_type('list1', list)
    with pytest.raises(ValueError):
        class_node.has_attribute_type('attr1', yaml.Node)