@@ -243,7 +243,10 @@ def cli_config():
243
243
@verbosity_option (logger , expose_value = False )
244
244
def cli (** _ ):
245
245
"""This is the documentation provided by the user."""
246
- pass
246
+ logger .debug ("App Debug level message" )
247
+ logger .info ("App Info level message" )
248
+ logger .warning ("App Warning level message" )
249
+ logger .error ("App Error level message" )
247
250
248
251
return (cli , messages )
249
252
@@ -255,7 +258,7 @@ def test_logger_click_option_config_q(cli_config):
255
258
cli , log_output = cli_config
256
259
runner = CliRunner ()
257
260
result = runner .invoke (cli , ["--cmp" , "complex-var" ])
258
- expected = "[ERROR] Error level message\n "
261
+ expected = "[ERROR] Error level message\n " "[ERROR] App Error level message \n "
259
262
assert result .exit_code == 0 , result .output
260
263
assert log_output .getvalue () == expected
261
264
@@ -264,7 +267,12 @@ def test_logger_click_option_config_v(cli_config):
264
267
cli , log_output = cli_config
265
268
runner = CliRunner ()
266
269
result = runner .invoke (cli , ["--cmp" , "complex-var" , "-v" ])
267
- expected = "[WARNING] Warning level message\n " "[ERROR] Error level message\n "
270
+ expected = (
271
+ "[WARNING] Warning level message\n "
272
+ "[ERROR] Error level message\n "
273
+ "[WARNING] App Warning level message\n "
274
+ "[ERROR] App Error level message\n "
275
+ )
268
276
assert result .exit_code == 0 , result .output
269
277
assert log_output .getvalue () == expected
270
278
@@ -277,6 +285,9 @@ def test_logger_click_option_config_vv(cli_config):
277
285
"[INFO] Info level message\n "
278
286
"[WARNING] Warning level message\n "
279
287
"[ERROR] Error level message\n "
288
+ "[INFO] App Info level message\n "
289
+ "[WARNING] App Warning level message\n "
290
+ "[ERROR] App Error level message\n "
280
291
)
281
292
assert result .exit_code == 0 , result .output
282
293
assert log_output .getvalue () == expected
@@ -291,17 +302,23 @@ def test_logger_click_option_config_vvv(cli_config):
291
302
"[INFO] Info level message\n "
292
303
"[WARNING] Warning level message\n "
293
304
"[ERROR] Error level message\n "
305
+ "[DEBUG] App Debug level message\n "
306
+ "[INFO] App Info level message\n "
307
+ "[WARNING] App Warning level message\n "
308
+ "[ERROR] App Error level message\n "
294
309
)
295
310
assert result .exit_code == 0 , result .output
296
311
assert log_output .getvalue ().endswith (expected )
297
312
298
313
299
314
# Loading configs using ConfigCommand
315
+
316
+
300
317
def test_logger_click_command_config_q (cli_config ):
301
318
cli , log_output = cli_config
302
319
runner = CliRunner ()
303
320
result = runner .invoke (cli , ["complex" ])
304
- expected = "[ERROR] Error level message\n "
321
+ expected = "[ERROR] Error level message\n " "[ERROR] App Error level message \n "
305
322
assert result .exit_code == 0 , result .output
306
323
assert log_output .getvalue () == expected
307
324
@@ -310,7 +327,12 @@ def test_logger_click_command_config_v(cli_config):
310
327
cli , log_output = cli_config
311
328
runner = CliRunner ()
312
329
result = runner .invoke (cli , ["complex" , "-v" ])
313
- expected = "[WARNING] Warning level message\n " "[ERROR] Error level message\n "
330
+ expected = (
331
+ "[WARNING] Warning level message\n "
332
+ "[ERROR] Error level message\n "
333
+ "[WARNING] App Warning level message\n "
334
+ "[ERROR] App Error level message\n "
335
+ )
314
336
assert result .exit_code == 0 , result .output
315
337
assert log_output .getvalue () == expected
316
338
@@ -323,6 +345,9 @@ def test_logger_click_command_config_vv(cli_config):
323
345
"[INFO] Info level message\n "
324
346
"[WARNING] Warning level message\n "
325
347
"[ERROR] Error level message\n "
348
+ "[INFO] App Info level message\n "
349
+ "[WARNING] App Warning level message\n "
350
+ "[ERROR] App Error level message\n "
326
351
)
327
352
assert result .exit_code == 0 , result .output
328
353
assert log_output .getvalue () == expected
@@ -337,6 +362,150 @@ def test_logger_click_command_config_vvv(cli_config):
337
362
"[INFO] Info level message\n "
338
363
"[WARNING] Warning level message\n "
339
364
"[ERROR] Error level message\n "
365
+ "[DEBUG] App Debug level message\n "
366
+ "[INFO] App Info level message\n "
367
+ "[WARNING] App Warning level message\n "
368
+ "[ERROR] App Error level message\n "
340
369
)
341
370
assert result .exit_code == 0 , result .output
342
371
assert log_output .getvalue ().endswith (expected )
372
+
373
+
374
+ # Verbosity option set in config file is ignored (not a ResourceOption)
375
+
376
+
377
+ def test_logger_click_command_config_q_plus_config (cli_config ):
378
+ cli , log_output = cli_config
379
+ runner = CliRunner ()
380
+ result = runner .invoke (cli , ["verbose-config" , "complex" ])
381
+ expected = "[ERROR] Error level message\n " "[ERROR] App Error level message\n "
382
+ assert result .exit_code == 0 , result .output
383
+ assert log_output .getvalue () == expected
384
+
385
+
386
+ def test_logger_click_command_config_v_plus_config (cli_config ):
387
+ cli , log_output = cli_config
388
+ runner = CliRunner ()
389
+ result = runner .invoke (cli , ["verbose-config" , "complex" , "-v" ])
390
+ expected = (
391
+ "[WARNING] Warning level message\n "
392
+ "[ERROR] Error level message\n "
393
+ "[WARNING] App Warning level message\n "
394
+ "[ERROR] App Error level message\n "
395
+ )
396
+ assert result .exit_code == 0 , result .output
397
+ assert log_output .getvalue () == expected
398
+
399
+
400
+ # Testing verbosity option as config option (legacy mode)
401
+ # The logging level will not be correct in the config files, but can be set as a config.
402
+
403
+
404
+ @pytest .fixture
405
+ def cli_verbosity_config ():
406
+ messages = io .StringIO ()
407
+ logger = clapper .logging .setup (
408
+ "clapper_test" ,
409
+ format = "[%(levelname)s] %(message)s" ,
410
+ low_level_stream = messages ,
411
+ high_level_stream = messages ,
412
+ )
413
+ logger .setLevel ("ERROR" ) # Enforce a default level
414
+
415
+ @click .command (entry_point_group = "clapper.test.config" , cls = ConfigCommand )
416
+ @click .option ("--cmp" , entry_point_group = "clapper.test.config" , cls = ResourceOption )
417
+ @verbosity_option (logger , expose_value = False , cls = ResourceOption )
418
+ def cli (** _ ):
419
+ """This is the documentation provided by the user."""
420
+ logger .debug ("App Debug level message" )
421
+ logger .info ("App Info level message" )
422
+ logger .warning ("App Warning level message" )
423
+ logger .error ("App Error level message" )
424
+
425
+ return (cli , messages )
426
+
427
+
428
+ def test_logger_click_option_config_verbose_as_config_q (cli_verbosity_config ):
429
+ cli , log_output = cli_verbosity_config
430
+ runner = CliRunner ()
431
+ result = runner .invoke (cli , ["--cmp" , "complex-var" ])
432
+ expected = "[ERROR] Error level message\n " "[ERROR] App Error level message\n "
433
+ assert result .exit_code == 0 , result .output
434
+ assert log_output .getvalue () == expected
435
+
436
+
437
+ def test_logger_click_option_config_verbose_as_config_v (cli_verbosity_config ):
438
+ cli , log_output = cli_verbosity_config
439
+ runner = CliRunner ()
440
+ result = runner .invoke (cli , ["--cmp" , "complex-var" , "-v" ])
441
+ expected = (
442
+ "[ERROR] Error level message\n "
443
+ "[WARNING] App Warning level message\n "
444
+ "[ERROR] App Error level message\n "
445
+ )
446
+ assert result .exit_code == 0 , result .output
447
+ assert log_output .getvalue () == expected
448
+
449
+
450
+ def test_logger_click_option_config_verbose_as_config_vv (cli_verbosity_config ):
451
+ cli , log_output = cli_verbosity_config
452
+ runner = CliRunner ()
453
+ result = runner .invoke (cli , ["--cmp" , "complex-var" , "-vv" ])
454
+ expected = (
455
+ "[ERROR] Error level message\n "
456
+ "[INFO] App Info level message\n "
457
+ "[WARNING] App Warning level message\n "
458
+ "[ERROR] App Error level message\n "
459
+ )
460
+ assert result .exit_code == 0 , result .output
461
+ assert log_output .getvalue () == expected
462
+
463
+
464
+ def test_logger_click_option_config_verbose_as_config_vvv (cli_verbosity_config ):
465
+ cli , log_output = cli_verbosity_config
466
+ runner = CliRunner ()
467
+ result = runner .invoke (cli , ["--cmp" , "complex-var" , "-vvv" ])
468
+ expected_start = "[ERROR] Error level message\n "
469
+ expected_end = (
470
+ "[DEBUG] App Debug level message\n "
471
+ "[INFO] App Info level message\n "
472
+ "[WARNING] App Warning level message\n "
473
+ "[ERROR] App Error level message\n "
474
+ )
475
+ assert result .exit_code == 0 , result .output
476
+ output = log_output .getvalue ()
477
+ assert output .startswith (expected_start )
478
+ assert output .endswith (expected_end )
479
+
480
+
481
+ # Verbosity option set in config file is handled (verbosity_option is a ResourceOption)
482
+
483
+
484
+ def test_logger_option_config_verbose_as_config_q_plus_config (cli_verbosity_config ):
485
+ cli , log_output = cli_verbosity_config
486
+ runner = CliRunner ()
487
+ result = runner .invoke (cli , ["verbose-config" , "complex" ])
488
+ expected = (
489
+ "[ERROR] Error level message\n "
490
+ "[INFO] App Info level message\n "
491
+ "[WARNING] App Warning level message\n "
492
+ "[ERROR] App Error level message\n "
493
+ )
494
+ assert result .exit_code == 0 , result .output
495
+ assert log_output .getvalue () == expected
496
+
497
+
498
+ # specifying the verbosity option in the CLI overrides the option
499
+
500
+
501
+ def test_logger_option_config_verbose_as_config_v_plus_config (cli_verbosity_config ):
502
+ cli , log_output = cli_verbosity_config
503
+ runner = CliRunner ()
504
+ result = runner .invoke (cli , ["verbose-config" , "complex" , "-v" ])
505
+ expected = (
506
+ "[ERROR] Error level message\n "
507
+ "[WARNING] App Warning level message\n "
508
+ "[ERROR] App Error level message\n "
509
+ )
510
+ assert result .exit_code == 0 , result .output
511
+ assert log_output .getvalue () == expected
0 commit comments