1 line
47 KiB
JSON
1 line
47 KiB
JSON
{"nodes": [{"id": "backend_tests_test_image_storage_py", "label": "test_image_storage.py", "file_type": "code", "source_file": "backend/tests/test_image_storage.py", "source_location": "L1"}, {"id": "test_image_storage_testsanitizefilename", "label": "TestSanitizeFilename", "file_type": "code", "source_file": "backend/tests/test_image_storage.py", "source_location": "L16"}, {"id": "test_image_storage_testsanitizefilename_test_removes_unsafe_characters", "label": ".test_removes_unsafe_characters()", "file_type": "code", "source_file": "backend/tests/test_image_storage.py", "source_location": "L19"}, {"id": "test_image_storage_testsanitizefilename_test_converts_to_lowercase", "label": ".test_converts_to_lowercase()", "file_type": "code", "source_file": "backend/tests/test_image_storage.py", "source_location": "L27"}, {"id": "test_image_storage_testsanitizefilename_test_limits_length_to_255", "label": ".test_limits_length_to_255()", "file_type": "code", "source_file": "backend/tests/test_image_storage.py", "source_location": "L32"}, {"id": "test_image_storage_testsanitizefilename_test_preserves_meaningful_names", "label": ".test_preserves_meaningful_names()", "file_type": "code", "source_file": "backend/tests/test_image_storage.py", "source_location": "L38"}, {"id": "test_image_storage_testsanitizefilename_test_removes_null_and_control_chars", "label": ".test_removes_null_and_control_chars()", "file_type": "code", "source_file": "backend/tests/test_image_storage.py", "source_location": "L44"}, {"id": "test_image_storage_testsanitizefilename_test_preserves_extension", "label": ".test_preserves_extension()", "file_type": "code", "source_file": "backend/tests/test_image_storage.py", "source_location": "L49"}, {"id": "test_image_storage_testsanitizefilename_test_empty_filename_raises_error", "label": ".test_empty_filename_raises_error()", "file_type": "code", "source_file": "backend/tests/test_image_storage.py", "source_location": "L55"}, {"id": "test_image_storage_testsanitizefilename_test_filename_only_extension_raises_error", "label": ".test_filename_only_extension_raises_error()", "file_type": "code", "source_file": "backend/tests/test_image_storage.py", "source_location": "L60"}, {"id": "test_image_storage_testgetuniquefilename", "label": "TestGetUniqueFilename", "file_type": "code", "source_file": "backend/tests/test_image_storage.py", "source_location": "L68"}, {"id": "test_image_storage_testgetuniquefilename_test_no_collision_returns_base_name", "label": ".test_no_collision_returns_base_name()", "file_type": "code", "source_file": "backend/tests/test_image_storage.py", "source_location": "L71"}, {"id": "test_image_storage_testgetuniquefilename_test_collision_adds_uuid_suffix", "label": ".test_collision_adds_uuid_suffix()", "file_type": "code", "source_file": "backend/tests/test_image_storage.py", "source_location": "L76"}, {"id": "test_image_storage_testgetuniquefilename_test_uuid_suffix_is_valid_hex", "label": ".test_uuid_suffix_is_valid_hex()", "file_type": "code", "source_file": "backend/tests/test_image_storage.py", "source_location": "L85"}, {"id": "test_image_storage_testgetuniquefilename_test_multiple_collisions_generates_new_uuid", "label": ".test_multiple_collisions_generates_new_uuid()", "file_type": "code", "source_file": "backend/tests/test_image_storage.py", "source_location": "L97"}, {"id": "test_image_storage_testgetuniquefilename_test_case_insensitive_collision_detection", "label": ".test_case_insensitive_collision_detection()", "file_type": "code", "source_file": "backend/tests/test_image_storage.py", "source_location": "L108"}, {"id": "test_image_storage_testgetuniquefilename_test_different_variants_in_collision_detection", "label": ".test_different_variants_in_collision_detection()", "file_type": "code", "source_file": "backend/tests/test_image_storage.py", "source_location": "L116"}, {"id": "test_image_storage_testensureimagedirectories", "label": "TestEnsureImageDirectories", "file_type": "code", "source_file": "backend/tests/test_image_storage.py", "source_location": "L127"}, {"id": "test_image_storage_testensureimagedirectories_test_creates_images_root_directory", "label": ".test_creates_images_root_directory()", "file_type": "code", "source_file": "backend/tests/test_image_storage.py", "source_location": "L130"}, {"id": "test_image_storage_testensureimagedirectories_test_creates_category_subdirectories", "label": ".test_creates_category_subdirectories()", "file_type": "code", "source_file": "backend/tests/test_image_storage.py", "source_location": "L141"}, {"id": "test_image_storage_testensureimagedirectories_test_idempotent_directory_creation", "label": ".test_idempotent_directory_creation()", "file_type": "code", "source_file": "backend/tests/test_image_storage.py", "source_location": "L158"}, {"id": "test_image_storage_testsaveimage", "label": "TestSaveImage", "file_type": "code", "source_file": "backend/tests/test_image_storage.py", "source_location": "L170"}, {"id": "test_image_storage_testsaveimage_test_saves_image_to_correct_path", "label": ".test_saves_image_to_correct_path()", "file_type": "code", "source_file": "backend/tests/test_image_storage.py", "source_location": "L173"}, {"id": "test_image_storage_testsaveimage_test_returns_relative_path", "label": ".test_returns_relative_path()", "file_type": "code", "source_file": "backend/tests/test_image_storage.py", "source_location": "L191"}, {"id": "test_image_storage_testsaveimage_test_creates_category_directory_if_missing", "label": ".test_creates_category_directory_if_missing()", "file_type": "code", "source_file": "backend/tests/test_image_storage.py", "source_location": "L204"}, {"id": "test_image_storage_testsaveimage_test_handles_collision_during_save", "label": ".test_handles_collision_during_save()", "file_type": "code", "source_file": "backend/tests/test_image_storage.py", "source_location": "L219"}, {"id": "test_image_storage_testsaveimage_test_different_variants_save_separately", "label": ".test_different_variants_save_separately()", "file_type": "code", "source_file": "backend/tests/test_image_storage.py", "source_location": "L246"}, {"id": "test_image_storage_rationale_1", "label": "Tests for image storage utilities.", "file_type": "rationale", "source_file": "backend/tests/test_image_storage.py", "source_location": "L1"}, {"id": "test_image_storage_rationale_17", "label": "Test filename sanitization.", "file_type": "rationale", "source_file": "backend/tests/test_image_storage.py", "source_location": "L17"}, {"id": "test_image_storage_rationale_20", "label": "Should remove path traversal and unsafe chars.", "file_type": "rationale", "source_file": "backend/tests/test_image_storage.py", "source_location": "L20"}, {"id": "test_image_storage_rationale_28", "label": "Should convert to lowercase.", "file_type": "rationale", "source_file": "backend/tests/test_image_storage.py", "source_location": "L28"}, {"id": "test_image_storage_rationale_33", "label": "Should limit filename to 255 characters.", "file_type": "rationale", "source_file": "backend/tests/test_image_storage.py", "source_location": "L33"}, {"id": "test_image_storage_rationale_39", "label": "Should preserve readable names with valid chars.", "file_type": "rationale", "source_file": "backend/tests/test_image_storage.py", "source_location": "L39"}, {"id": "test_image_storage_rationale_45", "label": "Should remove null bytes and control characters.", "file_type": "rationale", "source_file": "backend/tests/test_image_storage.py", "source_location": "L45"}, {"id": "test_image_storage_rationale_50", "label": "Should preserve file extension after sanitization.", "file_type": "rationale", "source_file": "backend/tests/test_image_storage.py", "source_location": "L50"}, {"id": "test_image_storage_rationale_56", "label": "Should raise ValueError for empty filenames.", "file_type": "rationale", "source_file": "backend/tests/test_image_storage.py", "source_location": "L56"}, {"id": "test_image_storage_rationale_61", "label": "Should raise ValueError for filename that becomes empty after sanitization.", "file_type": "rationale", "source_file": "backend/tests/test_image_storage.py", "source_location": "L61"}, {"id": "test_image_storage_rationale_69", "label": "Test collision detection and UUID suffix generation.", "file_type": "rationale", "source_file": "backend/tests/test_image_storage.py", "source_location": "L69"}, {"id": "test_image_storage_rationale_72", "label": "Should return base name when no collision exists.", "file_type": "rationale", "source_file": "backend/tests/test_image_storage.py", "source_location": "L72"}, {"id": "test_image_storage_rationale_77", "label": "Should add UUID suffix when collision detected.", "file_type": "rationale", "source_file": "backend/tests/test_image_storage.py", "source_location": "L77"}, {"id": "test_image_storage_rationale_86", "label": "UUID suffix should be valid hex characters.", "file_type": "rationale", "source_file": "backend/tests/test_image_storage.py", "source_location": "L86"}, {"id": "test_image_storage_rationale_98", "label": "Each collision should generate a different UUID suffix.", "file_type": "rationale", "source_file": "backend/tests/test_image_storage.py", "source_location": "L98"}, {"id": "test_image_storage_rationale_109", "label": "Should detect collisions case-insensitively.", "file_type": "rationale", "source_file": "backend/tests/test_image_storage.py", "source_location": "L109"}, {"id": "test_image_storage_rationale_117", "label": "Should treat original and thumb as different variants.", "file_type": "rationale", "source_file": "backend/tests/test_image_storage.py", "source_location": "L117"}, {"id": "test_image_storage_rationale_128", "label": "Test directory creation on startup.", "file_type": "rationale", "source_file": "backend/tests/test_image_storage.py", "source_location": "L128"}, {"id": "test_image_storage_rationale_131", "label": "Should create /images/ directory if it doesn't exist.", "file_type": "rationale", "source_file": "backend/tests/test_image_storage.py", "source_location": "L131"}, {"id": "test_image_storage_rationale_142", "label": "Should create category-specific subdirectories.", "file_type": "rationale", "source_file": "backend/tests/test_image_storage.py", "source_location": "L142"}, {"id": "test_image_storage_rationale_159", "label": "Should succeed if directories already exist.", "file_type": "rationale", "source_file": "backend/tests/test_image_storage.py", "source_location": "L159"}, {"id": "test_image_storage_rationale_171", "label": "Test image file saving.", "file_type": "rationale", "source_file": "backend/tests/test_image_storage.py", "source_location": "L171"}, {"id": "test_image_storage_rationale_174", "label": "Should save image bytes to /images/{category}/{filename}.", "file_type": "rationale", "source_file": "backend/tests/test_image_storage.py", "source_location": "L174"}, {"id": "test_image_storage_rationale_192", "label": "Should return relative path like /images/category/filename.", "file_type": "rationale", "source_file": "backend/tests/test_image_storage.py", "source_location": "L192"}, {"id": "test_image_storage_rationale_205", "label": "Should create category directory if it doesn't exist.", "file_type": "rationale", "source_file": "backend/tests/test_image_storage.py", "source_location": "L205"}, {"id": "test_image_storage_rationale_220", "label": "Should handle filename collision by adding UUID suffix.", "file_type": "rationale", "source_file": "backend/tests/test_image_storage.py", "source_location": "L220"}, {"id": "test_image_storage_rationale_247", "label": "Should save original and thumb variants to different files.", "file_type": "rationale", "source_file": "backend/tests/test_image_storage.py", "source_location": "L247"}], "edges": [{"source": "backend_tests_test_image_storage_py", "target": "pytest", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/tests/test_image_storage.py", "source_location": "L2", "weight": 1.0}, {"source": "backend_tests_test_image_storage_py", "target": "tempfile", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/tests/test_image_storage.py", "source_location": "L3", "weight": 1.0}, {"source": "backend_tests_test_image_storage_py", "target": "pathlib", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/tests/test_image_storage.py", "source_location": "L4", "weight": 1.0}, {"source": "backend_tests_test_image_storage_py", "target": "unittest_mock", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/tests/test_image_storage.py", "source_location": "L5", "weight": 1.0}, {"source": "backend_tests_test_image_storage_py", "target": "backend_services_image_storage", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/tests/test_image_storage.py", "source_location": "L8", "weight": 1.0}, {"source": "backend_tests_test_image_storage_py", "target": "test_image_storage_testsanitizefilename", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_image_storage.py", "source_location": "L16", "weight": 1.0}, {"source": "test_image_storage_testsanitizefilename", "target": "test_image_storage_testsanitizefilename_test_removes_unsafe_characters", "relation": "method", "confidence": "EXTRACTED", "source_file": "backend/tests/test_image_storage.py", "source_location": "L19", "weight": 1.0}, {"source": "test_image_storage_testsanitizefilename", "target": "test_image_storage_testsanitizefilename_test_converts_to_lowercase", "relation": "method", "confidence": "EXTRACTED", "source_file": "backend/tests/test_image_storage.py", "source_location": "L27", "weight": 1.0}, {"source": "test_image_storage_testsanitizefilename", "target": "test_image_storage_testsanitizefilename_test_limits_length_to_255", "relation": "method", "confidence": "EXTRACTED", "source_file": "backend/tests/test_image_storage.py", "source_location": "L32", "weight": 1.0}, {"source": "test_image_storage_testsanitizefilename", "target": "test_image_storage_testsanitizefilename_test_preserves_meaningful_names", "relation": "method", "confidence": "EXTRACTED", "source_file": "backend/tests/test_image_storage.py", "source_location": "L38", "weight": 1.0}, {"source": "test_image_storage_testsanitizefilename", "target": "test_image_storage_testsanitizefilename_test_removes_null_and_control_chars", "relation": "method", "confidence": "EXTRACTED", "source_file": "backend/tests/test_image_storage.py", "source_location": "L44", "weight": 1.0}, {"source": "test_image_storage_testsanitizefilename", "target": "test_image_storage_testsanitizefilename_test_preserves_extension", "relation": "method", "confidence": "EXTRACTED", "source_file": "backend/tests/test_image_storage.py", "source_location": "L49", "weight": 1.0}, {"source": "test_image_storage_testsanitizefilename", "target": "test_image_storage_testsanitizefilename_test_empty_filename_raises_error", "relation": "method", "confidence": "EXTRACTED", "source_file": "backend/tests/test_image_storage.py", "source_location": "L55", "weight": 1.0}, {"source": "test_image_storage_testsanitizefilename", "target": "test_image_storage_testsanitizefilename_test_filename_only_extension_raises_error", "relation": "method", "confidence": "EXTRACTED", "source_file": "backend/tests/test_image_storage.py", "source_location": "L60", "weight": 1.0}, {"source": "backend_tests_test_image_storage_py", "target": "test_image_storage_testgetuniquefilename", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_image_storage.py", "source_location": "L68", "weight": 1.0}, {"source": "test_image_storage_testgetuniquefilename", "target": "test_image_storage_testgetuniquefilename_test_no_collision_returns_base_name", "relation": "method", "confidence": "EXTRACTED", "source_file": "backend/tests/test_image_storage.py", "source_location": "L71", "weight": 1.0}, {"source": "test_image_storage_testgetuniquefilename", "target": "test_image_storage_testgetuniquefilename_test_collision_adds_uuid_suffix", "relation": "method", "confidence": "EXTRACTED", "source_file": "backend/tests/test_image_storage.py", "source_location": "L76", "weight": 1.0}, {"source": "test_image_storage_testgetuniquefilename", "target": "test_image_storage_testgetuniquefilename_test_uuid_suffix_is_valid_hex", "relation": "method", "confidence": "EXTRACTED", "source_file": "backend/tests/test_image_storage.py", "source_location": "L85", "weight": 1.0}, {"source": "test_image_storage_testgetuniquefilename", "target": "test_image_storage_testgetuniquefilename_test_multiple_collisions_generates_new_uuid", "relation": "method", "confidence": "EXTRACTED", "source_file": "backend/tests/test_image_storage.py", "source_location": "L97", "weight": 1.0}, {"source": "test_image_storage_testgetuniquefilename", "target": "test_image_storage_testgetuniquefilename_test_case_insensitive_collision_detection", "relation": "method", "confidence": "EXTRACTED", "source_file": "backend/tests/test_image_storage.py", "source_location": "L108", "weight": 1.0}, {"source": "test_image_storage_testgetuniquefilename", "target": "test_image_storage_testgetuniquefilename_test_different_variants_in_collision_detection", "relation": "method", "confidence": "EXTRACTED", "source_file": "backend/tests/test_image_storage.py", "source_location": "L116", "weight": 1.0}, {"source": "backend_tests_test_image_storage_py", "target": "test_image_storage_testensureimagedirectories", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_image_storage.py", "source_location": "L127", "weight": 1.0}, {"source": "test_image_storage_testensureimagedirectories", "target": "test_image_storage_testensureimagedirectories_test_creates_images_root_directory", "relation": "method", "confidence": "EXTRACTED", "source_file": "backend/tests/test_image_storage.py", "source_location": "L130", "weight": 1.0}, {"source": "test_image_storage_testensureimagedirectories", "target": "test_image_storage_testensureimagedirectories_test_creates_category_subdirectories", "relation": "method", "confidence": "EXTRACTED", "source_file": "backend/tests/test_image_storage.py", "source_location": "L141", "weight": 1.0}, {"source": "test_image_storage_testensureimagedirectories", "target": "test_image_storage_testensureimagedirectories_test_idempotent_directory_creation", "relation": "method", "confidence": "EXTRACTED", "source_file": "backend/tests/test_image_storage.py", "source_location": "L158", "weight": 1.0}, {"source": "backend_tests_test_image_storage_py", "target": "test_image_storage_testsaveimage", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_image_storage.py", "source_location": "L170", "weight": 1.0}, {"source": "test_image_storage_testsaveimage", "target": "test_image_storage_testsaveimage_test_saves_image_to_correct_path", "relation": "method", "confidence": "EXTRACTED", "source_file": "backend/tests/test_image_storage.py", "source_location": "L173", "weight": 1.0}, {"source": "test_image_storage_testsaveimage", "target": "test_image_storage_testsaveimage_test_returns_relative_path", "relation": "method", "confidence": "EXTRACTED", "source_file": "backend/tests/test_image_storage.py", "source_location": "L191", "weight": 1.0}, {"source": "test_image_storage_testsaveimage", "target": "test_image_storage_testsaveimage_test_creates_category_directory_if_missing", "relation": "method", "confidence": "EXTRACTED", "source_file": "backend/tests/test_image_storage.py", "source_location": "L204", "weight": 1.0}, {"source": "test_image_storage_testsaveimage", "target": "test_image_storage_testsaveimage_test_handles_collision_during_save", "relation": "method", "confidence": "EXTRACTED", "source_file": "backend/tests/test_image_storage.py", "source_location": "L219", "weight": 1.0}, {"source": "test_image_storage_testsaveimage", "target": "test_image_storage_testsaveimage_test_different_variants_save_separately", "relation": "method", "confidence": "EXTRACTED", "source_file": "backend/tests/test_image_storage.py", "source_location": "L246", "weight": 1.0}, {"source": "test_image_storage_rationale_1", "target": "backend_tests_test_image_storage_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/test_image_storage.py", "source_location": "L1", "weight": 1.0}, {"source": "test_image_storage_rationale_17", "target": "test_image_storage_testsanitizefilename", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/test_image_storage.py", "source_location": "L17", "weight": 1.0}, {"source": "test_image_storage_rationale_20", "target": "test_image_storage_testsanitizefilename_test_removes_unsafe_characters", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/test_image_storage.py", "source_location": "L20", "weight": 1.0}, {"source": "test_image_storage_rationale_28", "target": "test_image_storage_testsanitizefilename_test_converts_to_lowercase", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/test_image_storage.py", "source_location": "L28", "weight": 1.0}, {"source": "test_image_storage_rationale_33", "target": "test_image_storage_testsanitizefilename_test_limits_length_to_255", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/test_image_storage.py", "source_location": "L33", "weight": 1.0}, {"source": "test_image_storage_rationale_39", "target": "test_image_storage_testsanitizefilename_test_preserves_meaningful_names", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/test_image_storage.py", "source_location": "L39", "weight": 1.0}, {"source": "test_image_storage_rationale_45", "target": "test_image_storage_testsanitizefilename_test_removes_null_and_control_chars", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/test_image_storage.py", "source_location": "L45", "weight": 1.0}, {"source": "test_image_storage_rationale_50", "target": "test_image_storage_testsanitizefilename_test_preserves_extension", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/test_image_storage.py", "source_location": "L50", "weight": 1.0}, {"source": "test_image_storage_rationale_56", "target": "test_image_storage_testsanitizefilename_test_empty_filename_raises_error", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/test_image_storage.py", "source_location": "L56", "weight": 1.0}, {"source": "test_image_storage_rationale_61", "target": "test_image_storage_testsanitizefilename_test_filename_only_extension_raises_error", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/test_image_storage.py", "source_location": "L61", "weight": 1.0}, {"source": "test_image_storage_rationale_69", "target": "test_image_storage_testgetuniquefilename", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/test_image_storage.py", "source_location": "L69", "weight": 1.0}, {"source": "test_image_storage_rationale_72", "target": "test_image_storage_testgetuniquefilename_test_no_collision_returns_base_name", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/test_image_storage.py", "source_location": "L72", "weight": 1.0}, {"source": "test_image_storage_rationale_77", "target": "test_image_storage_testgetuniquefilename_test_collision_adds_uuid_suffix", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/test_image_storage.py", "source_location": "L77", "weight": 1.0}, {"source": "test_image_storage_rationale_86", "target": "test_image_storage_testgetuniquefilename_test_uuid_suffix_is_valid_hex", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/test_image_storage.py", "source_location": "L86", "weight": 1.0}, {"source": "test_image_storage_rationale_98", "target": "test_image_storage_testgetuniquefilename_test_multiple_collisions_generates_new_uuid", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/test_image_storage.py", "source_location": "L98", "weight": 1.0}, {"source": "test_image_storage_rationale_109", "target": "test_image_storage_testgetuniquefilename_test_case_insensitive_collision_detection", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/test_image_storage.py", "source_location": "L109", "weight": 1.0}, {"source": "test_image_storage_rationale_117", "target": "test_image_storage_testgetuniquefilename_test_different_variants_in_collision_detection", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/test_image_storage.py", "source_location": "L117", "weight": 1.0}, {"source": "test_image_storage_rationale_128", "target": "test_image_storage_testensureimagedirectories", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/test_image_storage.py", "source_location": "L128", "weight": 1.0}, {"source": "test_image_storage_rationale_131", "target": "test_image_storage_testensureimagedirectories_test_creates_images_root_directory", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/test_image_storage.py", "source_location": "L131", "weight": 1.0}, {"source": "test_image_storage_rationale_142", "target": "test_image_storage_testensureimagedirectories_test_creates_category_subdirectories", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/test_image_storage.py", "source_location": "L142", "weight": 1.0}, {"source": "test_image_storage_rationale_159", "target": "test_image_storage_testensureimagedirectories_test_idempotent_directory_creation", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/test_image_storage.py", "source_location": "L159", "weight": 1.0}, {"source": "test_image_storage_rationale_171", "target": "test_image_storage_testsaveimage", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/test_image_storage.py", "source_location": "L171", "weight": 1.0}, {"source": "test_image_storage_rationale_174", "target": "test_image_storage_testsaveimage_test_saves_image_to_correct_path", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/test_image_storage.py", "source_location": "L174", "weight": 1.0}, {"source": "test_image_storage_rationale_192", "target": "test_image_storage_testsaveimage_test_returns_relative_path", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/test_image_storage.py", "source_location": "L192", "weight": 1.0}, {"source": "test_image_storage_rationale_205", "target": "test_image_storage_testsaveimage_test_creates_category_directory_if_missing", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/test_image_storage.py", "source_location": "L205", "weight": 1.0}, {"source": "test_image_storage_rationale_220", "target": "test_image_storage_testsaveimage_test_handles_collision_during_save", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/test_image_storage.py", "source_location": "L220", "weight": 1.0}, {"source": "test_image_storage_rationale_247", "target": "test_image_storage_testsaveimage_test_different_variants_save_separately", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/test_image_storage.py", "source_location": "L247", "weight": 1.0}], "raw_calls": [{"caller_nid": "test_image_storage_testsanitizefilename_test_removes_unsafe_characters", "callee": "sanitize_filename", "source_file": "backend/tests/test_image_storage.py", "source_location": "L22"}, {"caller_nid": "test_image_storage_testsanitizefilename_test_removes_unsafe_characters", "callee": "sanitize_filename", "source_file": "backend/tests/test_image_storage.py", "source_location": "L23"}, {"caller_nid": "test_image_storage_testsanitizefilename_test_removes_unsafe_characters", "callee": "sanitize_filename", "source_file": "backend/tests/test_image_storage.py", "source_location": "L24"}, {"caller_nid": "test_image_storage_testsanitizefilename_test_removes_unsafe_characters", "callee": "sanitize_filename", "source_file": "backend/tests/test_image_storage.py", "source_location": "L25"}, {"caller_nid": "test_image_storage_testsanitizefilename_test_converts_to_lowercase", "callee": "sanitize_filename", "source_file": "backend/tests/test_image_storage.py", "source_location": "L29"}, {"caller_nid": "test_image_storage_testsanitizefilename_test_converts_to_lowercase", "callee": "sanitize_filename", "source_file": "backend/tests/test_image_storage.py", "source_location": "L30"}, {"caller_nid": "test_image_storage_testsanitizefilename_test_limits_length_to_255", "callee": "sanitize_filename", "source_file": "backend/tests/test_image_storage.py", "source_location": "L35"}, {"caller_nid": "test_image_storage_testsanitizefilename_test_limits_length_to_255", "callee": "len", "source_file": "backend/tests/test_image_storage.py", "source_location": "L36"}, {"caller_nid": "test_image_storage_testsanitizefilename_test_preserves_meaningful_names", "callee": "sanitize_filename", "source_file": "backend/tests/test_image_storage.py", "source_location": "L40"}, {"caller_nid": "test_image_storage_testsanitizefilename_test_preserves_meaningful_names", "callee": "sanitize_filename", "source_file": "backend/tests/test_image_storage.py", "source_location": "L41"}, {"caller_nid": "test_image_storage_testsanitizefilename_test_preserves_meaningful_names", "callee": "sanitize_filename", "source_file": "backend/tests/test_image_storage.py", "source_location": "L42"}, {"caller_nid": "test_image_storage_testsanitizefilename_test_removes_null_and_control_chars", "callee": "sanitize_filename", "source_file": "backend/tests/test_image_storage.py", "source_location": "L46"}, {"caller_nid": "test_image_storage_testsanitizefilename_test_removes_null_and_control_chars", "callee": "sanitize_filename", "source_file": "backend/tests/test_image_storage.py", "source_location": "L47"}, {"caller_nid": "test_image_storage_testsanitizefilename_test_preserves_extension", "callee": "endswith", "source_file": "backend/tests/test_image_storage.py", "source_location": "L51"}, {"caller_nid": "test_image_storage_testsanitizefilename_test_preserves_extension", "callee": "sanitize_filename", "source_file": "backend/tests/test_image_storage.py", "source_location": "L51"}, {"caller_nid": "test_image_storage_testsanitizefilename_test_preserves_extension", "callee": "endswith", "source_file": "backend/tests/test_image_storage.py", "source_location": "L52"}, {"caller_nid": "test_image_storage_testsanitizefilename_test_preserves_extension", "callee": "sanitize_filename", "source_file": "backend/tests/test_image_storage.py", "source_location": "L52"}, {"caller_nid": "test_image_storage_testsanitizefilename_test_preserves_extension", "callee": "endswith", "source_file": "backend/tests/test_image_storage.py", "source_location": "L53"}, {"caller_nid": "test_image_storage_testsanitizefilename_test_preserves_extension", "callee": "sanitize_filename", "source_file": "backend/tests/test_image_storage.py", "source_location": "L53"}, {"caller_nid": "test_image_storage_testsanitizefilename_test_empty_filename_raises_error", "callee": "raises", "source_file": "backend/tests/test_image_storage.py", "source_location": "L57"}, {"caller_nid": "test_image_storage_testsanitizefilename_test_empty_filename_raises_error", "callee": "sanitize_filename", "source_file": "backend/tests/test_image_storage.py", "source_location": "L58"}, {"caller_nid": "test_image_storage_testsanitizefilename_test_filename_only_extension_raises_error", "callee": "raises", "source_file": "backend/tests/test_image_storage.py", "source_location": "L64"}, {"caller_nid": "test_image_storage_testsanitizefilename_test_filename_only_extension_raises_error", "callee": "sanitize_filename", "source_file": "backend/tests/test_image_storage.py", "source_location": "L65"}, {"caller_nid": "test_image_storage_testgetuniquefilename_test_no_collision_returns_base_name", "callee": "get_unique_filename", "source_file": "backend/tests/test_image_storage.py", "source_location": "L73"}, {"caller_nid": "test_image_storage_testgetuniquefilename_test_collision_adds_uuid_suffix", "callee": "get_unique_filename", "source_file": "backend/tests/test_image_storage.py", "source_location": "L79"}, {"caller_nid": "test_image_storage_testgetuniquefilename_test_collision_adds_uuid_suffix", "callee": "startswith", "source_file": "backend/tests/test_image_storage.py", "source_location": "L81"}, {"caller_nid": "test_image_storage_testgetuniquefilename_test_collision_adds_uuid_suffix", "callee": "len", "source_file": "backend/tests/test_image_storage.py", "source_location": "L83"}, {"caller_nid": "test_image_storage_testgetuniquefilename_test_collision_adds_uuid_suffix", "callee": "split", "source_file": "backend/tests/test_image_storage.py", "source_location": "L83"}, {"caller_nid": "test_image_storage_testgetuniquefilename_test_uuid_suffix_is_valid_hex", "callee": "get_unique_filename", "source_file": "backend/tests/test_image_storage.py", "source_location": "L88"}, {"caller_nid": "test_image_storage_testgetuniquefilename_test_uuid_suffix_is_valid_hex", "callee": "split", "source_file": "backend/tests/test_image_storage.py", "source_location": "L89"}, {"caller_nid": "test_image_storage_testgetuniquefilename_test_uuid_suffix_is_valid_hex", "callee": "int", "source_file": "backend/tests/test_image_storage.py", "source_location": "L93"}, {"caller_nid": "test_image_storage_testgetuniquefilename_test_uuid_suffix_is_valid_hex", "callee": "fail", "source_file": "backend/tests/test_image_storage.py", "source_location": "L95"}, {"caller_nid": "test_image_storage_testgetuniquefilename_test_multiple_collisions_generates_new_uuid", "callee": "get_unique_filename", "source_file": "backend/tests/test_image_storage.py", "source_location": "L104"}, {"caller_nid": "test_image_storage_testgetuniquefilename_test_case_insensitive_collision_detection", "callee": "get_unique_filename", "source_file": "backend/tests/test_image_storage.py", "source_location": "L111"}, {"caller_nid": "test_image_storage_testgetuniquefilename_test_different_variants_in_collision_detection", "callee": "get_unique_filename", "source_file": "backend/tests/test_image_storage.py", "source_location": "L119"}, {"caller_nid": "test_image_storage_testgetuniquefilename_test_different_variants_in_collision_detection", "callee": "get_unique_filename", "source_file": "backend/tests/test_image_storage.py", "source_location": "L123"}, {"caller_nid": "test_image_storage_testensureimagedirectories_test_creates_images_root_directory", "callee": "TemporaryDirectory", "source_file": "backend/tests/test_image_storage.py", "source_location": "L132"}, {"caller_nid": "test_image_storage_testensureimagedirectories_test_creates_images_root_directory", "callee": "Path", "source_file": "backend/tests/test_image_storage.py", "source_location": "L133"}, {"caller_nid": "test_image_storage_testensureimagedirectories_test_creates_images_root_directory", "callee": "exists", "source_file": "backend/tests/test_image_storage.py", "source_location": "L134"}, {"caller_nid": "test_image_storage_testensureimagedirectories_test_creates_images_root_directory", "callee": "patch", "source_file": "backend/tests/test_image_storage.py", "source_location": "L136"}, {"caller_nid": "test_image_storage_testensureimagedirectories_test_creates_images_root_directory", "callee": "ensure_image_directories", "source_file": "backend/tests/test_image_storage.py", "source_location": "L137"}, {"caller_nid": "test_image_storage_testensureimagedirectories_test_creates_images_root_directory", "callee": "exists", "source_file": "backend/tests/test_image_storage.py", "source_location": "L138"}, {"caller_nid": "test_image_storage_testensureimagedirectories_test_creates_images_root_directory", "callee": "is_dir", "source_file": "backend/tests/test_image_storage.py", "source_location": "L139"}, {"caller_nid": "test_image_storage_testensureimagedirectories_test_creates_category_subdirectories", "callee": "TemporaryDirectory", "source_file": "backend/tests/test_image_storage.py", "source_location": "L143"}, {"caller_nid": "test_image_storage_testensureimagedirectories_test_creates_category_subdirectories", "callee": "Path", "source_file": "backend/tests/test_image_storage.py", "source_location": "L144"}, {"caller_nid": "test_image_storage_testensureimagedirectories_test_creates_category_subdirectories", "callee": "patch", "source_file": "backend/tests/test_image_storage.py", "source_location": "L147"}, {"caller_nid": "test_image_storage_testensureimagedirectories_test_creates_category_subdirectories", "callee": "patch", "source_file": "backend/tests/test_image_storage.py", "source_location": "L148"}, {"caller_nid": "test_image_storage_testensureimagedirectories_test_creates_category_subdirectories", "callee": "ensure_image_directories", "source_file": "backend/tests/test_image_storage.py", "source_location": "L151"}, {"caller_nid": "test_image_storage_testensureimagedirectories_test_creates_category_subdirectories", "callee": "exists", "source_file": "backend/tests/test_image_storage.py", "source_location": "L155"}, {"caller_nid": "test_image_storage_testensureimagedirectories_test_creates_category_subdirectories", "callee": "is_dir", "source_file": "backend/tests/test_image_storage.py", "source_location": "L156"}, {"caller_nid": "test_image_storage_testensureimagedirectories_test_idempotent_directory_creation", "callee": "TemporaryDirectory", "source_file": "backend/tests/test_image_storage.py", "source_location": "L160"}, {"caller_nid": "test_image_storage_testensureimagedirectories_test_idempotent_directory_creation", "callee": "Path", "source_file": "backend/tests/test_image_storage.py", "source_location": "L161"}, {"caller_nid": "test_image_storage_testensureimagedirectories_test_idempotent_directory_creation", "callee": "mkdir", "source_file": "backend/tests/test_image_storage.py", "source_location": "L162"}, {"caller_nid": "test_image_storage_testensureimagedirectories_test_idempotent_directory_creation", "callee": "patch", "source_file": "backend/tests/test_image_storage.py", "source_location": "L164"}, {"caller_nid": "test_image_storage_testensureimagedirectories_test_idempotent_directory_creation", "callee": "ensure_image_directories", "source_file": "backend/tests/test_image_storage.py", "source_location": "L166"}, {"caller_nid": "test_image_storage_testensureimagedirectories_test_idempotent_directory_creation", "callee": "exists", "source_file": "backend/tests/test_image_storage.py", "source_location": "L167"}, {"caller_nid": "test_image_storage_testsaveimage_test_saves_image_to_correct_path", "callee": "TemporaryDirectory", "source_file": "backend/tests/test_image_storage.py", "source_location": "L175"}, {"caller_nid": "test_image_storage_testsaveimage_test_saves_image_to_correct_path", "callee": "Path", "source_file": "backend/tests/test_image_storage.py", "source_location": "L176"}, {"caller_nid": "test_image_storage_testsaveimage_test_saves_image_to_correct_path", "callee": "mkdir", "source_file": "backend/tests/test_image_storage.py", "source_location": "L177"}, {"caller_nid": "test_image_storage_testsaveimage_test_saves_image_to_correct_path", "callee": "patch", "source_file": "backend/tests/test_image_storage.py", "source_location": "L183"}, {"caller_nid": "test_image_storage_testsaveimage_test_saves_image_to_correct_path", "callee": "save_image", "source_file": "backend/tests/test_image_storage.py", "source_location": "L184"}, {"caller_nid": "test_image_storage_testsaveimage_test_saves_image_to_correct_path", "callee": "exists", "source_file": "backend/tests/test_image_storage.py", "source_location": "L188"}, {"caller_nid": "test_image_storage_testsaveimage_test_saves_image_to_correct_path", "callee": "read_bytes", "source_file": "backend/tests/test_image_storage.py", "source_location": "L189"}, {"caller_nid": "test_image_storage_testsaveimage_test_returns_relative_path", "callee": "TemporaryDirectory", "source_file": "backend/tests/test_image_storage.py", "source_location": "L193"}, {"caller_nid": "test_image_storage_testsaveimage_test_returns_relative_path", "callee": "Path", "source_file": "backend/tests/test_image_storage.py", "source_location": "L194"}, {"caller_nid": "test_image_storage_testsaveimage_test_returns_relative_path", "callee": "mkdir", "source_file": "backend/tests/test_image_storage.py", "source_location": "L195"}, {"caller_nid": "test_image_storage_testsaveimage_test_returns_relative_path", "callee": "patch", "source_file": "backend/tests/test_image_storage.py", "source_location": "L198"}, {"caller_nid": "test_image_storage_testsaveimage_test_returns_relative_path", "callee": "save_image", "source_file": "backend/tests/test_image_storage.py", "source_location": "L199"}, {"caller_nid": "test_image_storage_testsaveimage_test_returns_relative_path", "callee": "startswith", "source_file": "backend/tests/test_image_storage.py", "source_location": "L201"}, {"caller_nid": "test_image_storage_testsaveimage_test_returns_relative_path", "callee": "endswith", "source_file": "backend/tests/test_image_storage.py", "source_location": "L202"}, {"caller_nid": "test_image_storage_testsaveimage_test_creates_category_directory_if_missing", "callee": "TemporaryDirectory", "source_file": "backend/tests/test_image_storage.py", "source_location": "L206"}, {"caller_nid": "test_image_storage_testsaveimage_test_creates_category_directory_if_missing", "callee": "Path", "source_file": "backend/tests/test_image_storage.py", "source_location": "L207"}, {"caller_nid": "test_image_storage_testsaveimage_test_creates_category_directory_if_missing", "callee": "mkdir", "source_file": "backend/tests/test_image_storage.py", "source_location": "L208"}, {"caller_nid": "test_image_storage_testsaveimage_test_creates_category_directory_if_missing", "callee": "patch", "source_file": "backend/tests/test_image_storage.py", "source_location": "L213"}, {"caller_nid": "test_image_storage_testsaveimage_test_creates_category_directory_if_missing", "callee": "save_image", "source_file": "backend/tests/test_image_storage.py", "source_location": "L214"}, {"caller_nid": "test_image_storage_testsaveimage_test_creates_category_directory_if_missing", "callee": "exists", "source_file": "backend/tests/test_image_storage.py", "source_location": "L217"}, {"caller_nid": "test_image_storage_testsaveimage_test_handles_collision_during_save", "callee": "TemporaryDirectory", "source_file": "backend/tests/test_image_storage.py", "source_location": "L221"}, {"caller_nid": "test_image_storage_testsaveimage_test_handles_collision_during_save", "callee": "Path", "source_file": "backend/tests/test_image_storage.py", "source_location": "L222"}, {"caller_nid": "test_image_storage_testsaveimage_test_handles_collision_during_save", "callee": "mkdir", "source_file": "backend/tests/test_image_storage.py", "source_location": "L223"}, {"caller_nid": "test_image_storage_testsaveimage_test_handles_collision_during_save", "callee": "mkdir", "source_file": "backend/tests/test_image_storage.py", "source_location": "L225"}, {"caller_nid": "test_image_storage_testsaveimage_test_handles_collision_during_save", "callee": "write_bytes", "source_file": "backend/tests/test_image_storage.py", "source_location": "L228"}, {"caller_nid": "test_image_storage_testsaveimage_test_handles_collision_during_save", "callee": "patch", "source_file": "backend/tests/test_image_storage.py", "source_location": "L232"}, {"caller_nid": "test_image_storage_testsaveimage_test_handles_collision_during_save", "callee": "save_image", "source_file": "backend/tests/test_image_storage.py", "source_location": "L233"}, {"caller_nid": "test_image_storage_testsaveimage_test_handles_collision_during_save", "callee": "Path", "source_file": "backend/tests/test_image_storage.py", "source_location": "L242"}, {"caller_nid": "test_image_storage_testsaveimage_test_handles_collision_during_save", "callee": "lstrip", "source_file": "backend/tests/test_image_storage.py", "source_location": "L242"}, {"caller_nid": "test_image_storage_testsaveimage_test_handles_collision_during_save", "callee": "exists", "source_file": "backend/tests/test_image_storage.py", "source_location": "L243"}, {"caller_nid": "test_image_storage_testsaveimage_test_handles_collision_during_save", "callee": "read_bytes", "source_file": "backend/tests/test_image_storage.py", "source_location": "L244"}, {"caller_nid": "test_image_storage_testsaveimage_test_different_variants_save_separately", "callee": "TemporaryDirectory", "source_file": "backend/tests/test_image_storage.py", "source_location": "L248"}, {"caller_nid": "test_image_storage_testsaveimage_test_different_variants_save_separately", "callee": "Path", "source_file": "backend/tests/test_image_storage.py", "source_location": "L249"}, {"caller_nid": "test_image_storage_testsaveimage_test_different_variants_save_separately", "callee": "mkdir", "source_file": "backend/tests/test_image_storage.py", "source_location": "L250"}, {"caller_nid": "test_image_storage_testsaveimage_test_different_variants_save_separately", "callee": "mkdir", "source_file": "backend/tests/test_image_storage.py", "source_location": "L252"}, {"caller_nid": "test_image_storage_testsaveimage_test_different_variants_save_separately", "callee": "patch", "source_file": "backend/tests/test_image_storage.py", "source_location": "L257"}, {"caller_nid": "test_image_storage_testsaveimage_test_different_variants_save_separately", "callee": "save_image", "source_file": "backend/tests/test_image_storage.py", "source_location": "L258"}, {"caller_nid": "test_image_storage_testsaveimage_test_different_variants_save_separately", "callee": "save_image", "source_file": "backend/tests/test_image_storage.py", "source_location": "L259"}, {"caller_nid": "test_image_storage_testsaveimage_test_different_variants_save_separately", "callee": "Path", "source_file": "backend/tests/test_image_storage.py", "source_location": "L267"}, {"caller_nid": "test_image_storage_testsaveimage_test_different_variants_save_separately", "callee": "lstrip", "source_file": "backend/tests/test_image_storage.py", "source_location": "L267"}, {"caller_nid": "test_image_storage_testsaveimage_test_different_variants_save_separately", "callee": "Path", "source_file": "backend/tests/test_image_storage.py", "source_location": "L268"}, {"caller_nid": "test_image_storage_testsaveimage_test_different_variants_save_separately", "callee": "lstrip", "source_file": "backend/tests/test_image_storage.py", "source_location": "L268"}, {"caller_nid": "test_image_storage_testsaveimage_test_different_variants_save_separately", "callee": "exists", "source_file": "backend/tests/test_image_storage.py", "source_location": "L269"}, {"caller_nid": "test_image_storage_testsaveimage_test_different_variants_save_separately", "callee": "exists", "source_file": "backend/tests/test_image_storage.py", "source_location": "L270"}, {"caller_nid": "test_image_storage_testsaveimage_test_different_variants_save_separately", "callee": "read_bytes", "source_file": "backend/tests/test_image_storage.py", "source_location": "L272"}, {"caller_nid": "test_image_storage_testsaveimage_test_different_variants_save_separately", "callee": "read_bytes", "source_file": "backend/tests/test_image_storage.py", "source_location": "L273"}]} |