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'))
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
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)
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)
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')
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)