import json import pandas as pd import ammico.utils as ut import pytest import os def test_find_files(get_path): with pytest.raises(FileNotFoundError): ut.find_files(path=".", pattern="*.png") result_jpg = ut.find_files(path=get_path, pattern=".jpg", recursive=True, limit=10) assert 0 < len(result_jpg) <= 10 result_png = ut.find_files(path=get_path, pattern=".png", recursive=True, limit=10) assert 0 < len(result_png) <= 10 result_png_jpg = ut.find_files( path=get_path, pattern=["png", "jpg"], recursive=True, limit=10 ) assert 0 < len(result_png_jpg) <= 10 result_png_jpg = ut.find_files( path=get_path, pattern=["png", "jpg"], recursive=True, limit=4 ) assert 0 < len(result_png_jpg) <= 4 result_png_jpg = ut.find_files( path=get_path, pattern=["png", "jpg"], recursive=True, limit=[2, 4] ) assert 0 < len(result_png_jpg) <= 2 one_dir_up_path = os.path.join(get_path, "..") with pytest.raises(FileNotFoundError): ut.find_files( path=one_dir_up_path, pattern=["png", "jpg"], recursive=False, limit=[2, 4] ) result_png_jpg = ut.find_files( path=one_dir_up_path, pattern=["png", "jpg"], recursive=True, limit=[2, 4] ) assert 0 < len(result_png_jpg) <= 2 result_png_jpg = ut.find_files( path=get_path, pattern=["png", "jpg"], recursive=True, limit=None ) assert 0 < len(result_png_jpg) result_png_jpg = ut.find_files( path=get_path, pattern=["png", "jpg"], recursive=True, limit=-1 ) assert 0 < len(result_png_jpg) result_png_jpg_rdm1 = ut.find_files( path=get_path, pattern=["png", "jpg"], recursive=True, limit=2, random_seed=1 ) result_png_jpg_rdm2 = ut.find_files( path=get_path, pattern=["png", "jpg"], recursive=True, limit=2, random_seed=2 ) assert result_png_jpg_rdm1 != result_png_jpg_rdm2 assert len(result_png_jpg_rdm1) == len(result_png_jpg_rdm2) with pytest.raises(ValueError): ut.find_files(path=get_path, pattern=["png", "jpg"], recursive=True, limit=-2) with pytest.raises(ValueError): ut.find_files( path=get_path, pattern=["png", "jpg"], recursive=True, limit=[2, 4, 5] ) with pytest.raises(ValueError): ut.find_files(path=get_path, pattern=["png", "jpg"], recursive=True, limit=[2]) with pytest.raises(ValueError): ut.find_files( path=get_path, pattern=["png", "jpg"], recursive=True, limit="limit" ) def test_initialize_dict(get_path): result = [ "./test/data/image_faces.jpg", "./test/data/image_objects.jpg", ] mydict = ut.initialize_dict(result) with open(get_path + "example_utils_init_dict.json", "r") as file: out_dict = json.load(file) assert mydict == out_dict def test_check_for_missing_keys(): mydict = { "file1": {"faces": "Yes", "text_english": "Something"}, "file2": {"faces": "No", "text_english": "Otherthing"}, } # check that dict is not changed mydict2 = ut._check_for_missing_keys(mydict) assert mydict2 == mydict # check that dict is updated if key is missing mydict = { "file1": {"faces": "Yes", "text_english": "Something"}, "file2": {"faces": "No"}, } mydict2 = ut._check_for_missing_keys(mydict) assert mydict2["file2"] == {"faces": "No", "text_english": None} # check that dict is updated if more than one key is missing mydict = {"file1": {"faces": "Yes", "text_english": "Something"}, "file2": {}} mydict2 = ut._check_for_missing_keys(mydict) assert mydict2["file2"] == {"faces": None, "text_english": None} def test_append_data_to_dict(get_path): with open(get_path + "example_append_data_to_dict_in.json", "r") as file: mydict = json.load(file) outdict = ut.append_data_to_dict(mydict) print(outdict) with open(get_path + "example_append_data_to_dict_out.json", "r") as file: example_outdict = json.load(file) assert outdict == example_outdict def test_dump_df(get_path): with open(get_path + "example_append_data_to_dict_out.json", "r") as file: outdict = json.load(file) df = ut.dump_df(outdict) out_df = pd.read_csv(get_path + "example_dump_df.csv", index_col=[0]) pd.testing.assert_frame_equal(df, out_df) def test_get_dataframe(get_path): with open(get_path + "example_append_data_to_dict_in.json", "r") as file: mydict = json.load(file) out_df = pd.read_csv(get_path + "example_dump_df.csv", index_col=[0]) df = ut.get_dataframe(mydict) df.to_csv("data_out.csv") pd.testing.assert_frame_equal(df, out_df) def test_is_interactive(): assert ut.is_interactive def test_get_color_table(): colors = ut.get_color_table() assert colors["Pink"] == { "ColorName": [ "Pink", "LightPink", "HotPink", "DeepPink", "PaleVioletRed", "MediumVioletRed", ], "HEX": ["#FFC0CB", "#FFB6C1", "#FF69B4", "#FF1493", "#DB7093", "#C71585"], }