@@ -967,3 +967,65 @@ def test_json_properties_remove_table_does_not_exist(catalog: InMemoryCatalog) -
967967 result = runner .invoke (run , ["--output=json" , "properties" , "remove" , "table" , "default.doesnotexist" , "location" ])
968968 assert result .exit_code == 1
969969 assert result .output == """{"type": "NoSuchTableError", "message": "Table does not exist: default.doesnotexist"}\n """
970+
971+
972+ def test_log_level_cli_option (mocker : MockFixture ) -> None :
973+ mock_basicConfig = mocker .patch ("logging.basicConfig" )
974+
975+ runner = CliRunner ()
976+ runner .invoke (run , ["--log-level" , "DEBUG" , "list" ])
977+
978+ # Verify logging.basicConfig was called with DEBUG level
979+ import logging
980+
981+ mock_basicConfig .assert_called_once ()
982+ call_kwargs = mock_basicConfig .call_args [1 ]
983+ assert call_kwargs ["level" ] == logging .DEBUG
984+
985+
986+ def test_log_level_env_variable (mocker : MockFixture ) -> None :
987+ mock_basicConfig = mocker .patch ("logging.basicConfig" )
988+ mocker .patch .dict (os .environ , {"PYICEBERG_LOG_LEVEL" : "INFO" })
989+
990+ runner = CliRunner ()
991+ runner .invoke (run , ["list" ])
992+
993+ # Verify logging.basicConfig was called with INFO level
994+ import logging
995+
996+ mock_basicConfig .assert_called_once ()
997+ call_kwargs = mock_basicConfig .call_args [1 ]
998+ assert call_kwargs ["level" ] == logging .INFO
999+
1000+
1001+ def test_log_level_default_warning (mocker : MockFixture ) -> None :
1002+ mock_basicConfig = mocker .patch ("logging.basicConfig" )
1003+ # Ensure PYICEBERG_LOG_LEVEL is not set
1004+ mocker .patch .dict (os .environ , {}, clear = False )
1005+ if "PYICEBERG_LOG_LEVEL" in os .environ :
1006+ del os .environ ["PYICEBERG_LOG_LEVEL" ]
1007+
1008+ runner = CliRunner ()
1009+ runner .invoke (run , ["list" ])
1010+
1011+ # Verify logging.basicConfig was called with WARNING level (default)
1012+ import logging
1013+
1014+ mock_basicConfig .assert_called_once ()
1015+ call_kwargs = mock_basicConfig .call_args [1 ]
1016+ assert call_kwargs ["level" ] == logging .WARNING
1017+
1018+
1019+ def test_log_level_cli_overrides_env (mocker : MockFixture ) -> None :
1020+ mock_basicConfig = mocker .patch ("logging.basicConfig" )
1021+ mocker .patch .dict (os .environ , {"PYICEBERG_LOG_LEVEL" : "INFO" })
1022+
1023+ runner = CliRunner ()
1024+ runner .invoke (run , ["--log-level" , "ERROR" , "list" ])
1025+
1026+ # Verify CLI option overrides environment variable
1027+ import logging
1028+
1029+ mock_basicConfig .assert_called_once ()
1030+ call_kwargs = mock_basicConfig .call_args [1 ]
1031+ assert call_kwargs ["level" ] == logging .ERROR
0 commit comments