def test_str_to_bytes(self): with_char = Retriever('not-a-filename', '', DataType('str16')) # Should get \x00 trail without_char = Retriever( 'filename', '', DataType('str16')) # Should not get \x00 trail s = 'Test String' self.assertEqual(str_to_bytes(s, with_char), b'Test String\x00') self.assertEqual(str_to_bytes(s, without_char), b'Test String')
def from_structure(cls, section_name, structure): retrievers = [] for name, attr in structure.get('retrievers').items(): retrievers.append(Retriever.from_structure(name, attr)) structs = model_dict_from_structure(structure) return cls(section_name, retrievers, structs)
def from_structure(cls, name, structure) -> AoE2StructModel: retrievers = [] for retriever_name, attr in structure.get('retrievers').items(): retrievers.append(Retriever.from_structure(retriever_name, attr)) structs = model_dict_from_structure(structure) return cls(name, retrievers, structs)
def from_structure(cls, section_name, structure): retriever_map = {} for name, attr in structure.get('retrievers').items(): retriever_map[name] = Retriever.from_structure(name, attr) structs = model_dict_from_structure(structure) return cls(section_name, retriever_map, structs)
def from_structure(cls, name, structure) -> AoE2StructModel: retriever_map = {} for retriever_name, attr in structure.get('retrievers').items(): retriever_map[retriever_name] = Retriever.from_structure( retriever_name, attr) structs = model_dict_from_structure(structure) return cls(name, retriever_map, structs)
def test_vorl(self): # Test repeat == 1 && len(value) == 1 retriever = Retriever('name', 0, DataType('1', repeat=1)) self.assertEqual(vorl(retriever, [10]), 10) # Test repeat > 1 && len(value) == 1 retriever = Retriever('name', 0, DataType('1', repeat=2)) self.assertEqual(vorl(retriever, [10]), [10]) # Test repeat == 1 && len(value) > 1 retriever = Retriever('name', 0, DataType('1', repeat=1)) self.assertEqual(vorl(retriever, [10, 20]), [10, 20]) # Test repeat > 1 && len(value) > 1 retriever = Retriever('name', 0, DataType('1', repeat=2)) self.assertEqual(vorl(retriever, [10, 20]), [10, 20]) # Test repeat == 1 && is_list && len(value) == 1 retriever = Retriever('name', 0, DataType('1', repeat=1), is_list=True) self.assertEqual(vorl(retriever, [10]), [10]) # Test repeat == 1 && not is_list && len(value) == 1 retriever = Retriever('name', 0, DataType('1', repeat=1), is_list=False) self.assertEqual(vorl(retriever, [10]), 10)
def handle_retriever_dependency(retriever: Retriever, state, section, sections): on_x = f'on_{state}' if not hasattr(retriever, on_x): return retriever_event = getattr(retriever, on_x) # construct, commit or refresh action = retriever_event.dependency_action if action == DependencyAction.REFRESH_SELF: execute_refresh_action(retriever, section, sections) elif action == DependencyAction.REFRESH: refresh_targets(retriever_event, section, sections) elif action in [DependencyAction.SET_VALUE, DependencyAction.SET_REPEAT]: value = execute_dependency_eval(retriever_event, section, sections) if action == DependencyAction.SET_VALUE: retriever.data = value elif action == DependencyAction.SET_REPEAT: retriever.datatype.repeat = value
def test_parse_val_to_bytes(self): retriever = Retriever(name='_', default_value=0, datatype=DataType("u16")) self.assertEqual(parse_val_to_bytes(retriever, 1), b'\x01\x00') retriever.datatype = DataType("s16") self.assertEqual(parse_val_to_bytes(retriever, -1), b'\xff\xff') retriever.datatype = DataType("str16") self.assertEqual(parse_val_to_bytes(retriever, "Hello World"), b'\x0c\x00Hello World\x00') retriever.datatype = DataType("c20") self.assertEqual(parse_val_to_bytes(retriever, "Hello World"), b'Hello World') retriever.datatype = DataType("20") self.assertEqual( parse_val_to_bytes(retriever, b'Direct bytes\x11\xff'), b'Direct bytes\x11\xff') retriever.datatype = DataType("f32") self.assertEqual(parse_val_to_bytes(retriever, 3.14), b'\xc3\xf5\x48\x40')