def test_mapped_raw_record_container(): input_record_info = RecordInfo(AlteryxEngine()) input_record_info.add_field(field_name="a", field_type=FieldType.byte) input_record_info.add_field(field_name="b", field_type=FieldType.fixeddecimal) storage_record_info = RecordInfo(AlteryxEngine()) storage_record_info.add_field(field_name="c", field_type=FieldType.fixeddecimal) storage_record_info.add_field(field_name="d", field_type=FieldType.byte) field_map = {"a": "d", "b": "c"} container = RawRecordContainer(input_record_info, storage_record_info, field_map) record1 = RecordRef(input_record_info) record1.data["a"] = 123 record1.data["b"] = 666.666 record2 = RecordRef(input_record_info) record2.data["a"] = 456 record2.data["b"] = 999.999 records = [record1, record2] for record in records: container.add_record(record) for input_record, saved_record in zip(records, container.records): assert input_record.data["a"] == saved_record.finalize_record( ).data["d"] assert input_record.data["b"] == saved_record.finalize_record( ).data["c"]
def test_record_copier_proxy(): engine = AlteryxEngine() input_record_info = RecordInfo(engine) output_record_info = RecordInfo(engine) field_props = [ { "field_name": "a", "field_type": FieldType.int32 }, { "field_name": "b", "field_type": FieldType.v_wstring }, ] for props in field_props: input_record_info.add_field(**props) output_record_info.add_field(**props) record_copier_proxy = RecordCopierProxy(input_record_info, output_record_info, { "a": "a", "b": "b" }) record = RecordRef(input_record_info) record.data["a"] = 123 record.data["b"] = "Hello world" record_copier = record_copier_proxy.copy(record) assert record == record_copier.finalize_record() assert record is not record_copier.finalize_record()
def test_raw_record_container_construction(): record_info = RecordInfo(AlteryxEngine()) record_info.add_field(field_name="a", field_type=FieldType.byte) record_info.add_field(field_name="b", field_type=FieldType.fixeddecimal) with pytest.raises(ValueError): RawRecordContainer(record_info, record_info)
def test_generate_records_from_df(): df = pd.DataFrame({"a": [1, 2, 3], "b": ["Hello", "from", "blackbird"]}) record_info = RecordInfo(AlteryxEngine()) record_info.add_field(field_name="a", field_type=FieldType.byte) record_info.add_field(field_name="b", field_type=FieldType.v_string) record_generator = generate_records_from_df(df, record_info) num_rows, _ = df.shape for row, record in enumerate(record_generator): for column in list(df): assert record.finalize_record().data[column] == df[column][row]
def record_collection(): record_info = RecordInfo(AlteryxEngine()) record_info.add_field("a", FieldType.float) record_info.add_field("b", FieldType.float) record1 = RecordRef(record_info) record1.data["a"] = 123 record1.data["b"] = 666.666 record2 = RecordRef(record_info) record2.data["a"] = 456 record2.data["b"] = 999.999 records = [record1, record2] return record_info, records
def test_simple_raw_record_container(): record_info = RecordInfo(AlteryxEngine()) record_info.add_field(field_name="a", field_type=FieldType.byte) record_info.add_field(field_name="b", field_type=FieldType.fixeddecimal) container = RawRecordContainer(record_info) record1 = RecordRef(record_info) record1.data["a"] = 123 record1.data["b"] = 666.666 record2 = RecordRef(record_info) record2.data["a"] = 456 record2.data["b"] = 999.999 records = [record1, record2] for record in records: container.add_record(record) for input_record, saved_record in zip(records, container.records): assert input_record.data == saved_record.finalize_record().data df = pd.DataFrame({"b": [1000, 2000]}) container.update_with_dataframe(df) assert container.records[0].finalize_record().data == {"a": 123, "b": 1000} assert container.records[1].finalize_record().data == {"a": 456, "b": 2000} df = pd.DataFrame({"b": [1000, 2000, 3000]}) with pytest.raises(ValueError): container.update_with_dataframe(df) df = pd.DataFrame({"d": [1000, 2000]}) with pytest.raises(RuntimeError): container.update_with_dataframe(df) container.clear_records() assert len(container.records) == 0
def test_simple_parsed_record_container(): record_info = RecordInfo(AlteryxEngine()) record_info.add_field(field_name="a", field_type=FieldType.byte) record_info.add_field(field_name="b", field_type=FieldType.fixeddecimal) container = ParsedRecordContainer(record_info) record1 = RecordRef(record_info) record1.data["a"] = 123 record1.data["b"] = 666.666 record2 = RecordRef(record_info) record2.data["a"] = 456 record2.data["b"] = 999.999 records = [record1, record2] for record in records: container.add_record(record) df = container.build_dataframe() assert df.equals(pd.DataFrame({"a": [123, 456], "b": [666.666, 999.999]}))
def test_field_proxy(): record_info = RecordInfo(AlteryxEngine()) record_info.add_field( field_name="float", field_type=FieldType.float, size=1, scale=1, source="test.txt", description="Test description", ) field_proxy = FieldProxy(record_info.fields[0]) record_creator = RecordCreator(record_info) assert field_proxy.name == "float" field_proxy.set(record_creator, "10.0") assert field_proxy.get(record_creator.finalize_record()) == 10.0 field_proxy.set(record_creator, NULL_VALUE_PLACEHOLDER) assert field_proxy.get(record_creator.finalize_record()) is None field_proxy.set_null(record_creator) assert field_proxy.get(record_creator.finalize_record()) is None
def engine_proxy(): return EngineProxy(AlteryxEngine(), 1)