Commit 1a94911
authored
* Fix #362: don't reconfigure root logger when importing pyensembl.shell
pyensembl/shell.py called logging.config.fileConfig() at module top-level.
fileConfig defaults to disable_existing_loggers=True, so importing the
module (a) attached pyensembl's console handlers to the root logger and set
its level to INFO, and (b) disabled every logger the host application had
created before the import. A library must not configure the root logger or
disable other loggers as an import side effect.
Following the Python logging HOWTO ("Configuring Logging for a Library"):
- Move the fileConfig() call into a configure_logging() helper that is only
invoked from the CLI entrypoint (run()), and pass
disable_existing_loggers=False so it never disables application loggers.
- Attach a NullHandler to the "pyensembl" package logger in __init__.py so
library use emits nothing by default and never warns about missing
handlers, while leaving the root logger untouched.
Adds regression tests covering the import side-effects and the CLI logging
setup.
Claude-Session: https://claude.ai/code/session_016pKPSmCAts4cacC3CQ9qsL
* test: restore global logging state in configure_logging test
configure_logging() applies logging.conf, which mutates process-global
logging state (replaces the pyensembl logger's NullHandler with a live
console handler and reconfigures root). Snapshot and restore that state in
test_configure_logging_preserves_existing_loggers so it doesn't leak a
console handler into sibling tests running in the same worker.
Claude-Session: https://claude.ai/code/session_016pKPSmCAts4cacC3CQ9qsL
1 parent 834ff46 commit 1a94911
3 files changed
Lines changed: 101 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
10 | 10 | | |
11 | 11 | | |
12 | 12 | | |
| 13 | + | |
| 14 | + | |
13 | 15 | | |
14 | 16 | | |
15 | 17 | | |
| |||
35 | 37 | | |
36 | 38 | | |
37 | 39 | | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
38 | 46 | | |
39 | 47 | | |
40 | 48 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
49 | 49 | | |
50 | 50 | | |
51 | 51 | | |
52 | | - | |
53 | 52 | | |
54 | 53 | | |
55 | 54 | | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
56 | 69 | | |
57 | 70 | | |
58 | 71 | | |
| |||
365 | 378 | | |
366 | 379 | | |
367 | 380 | | |
| 381 | + | |
368 | 382 | | |
369 | 383 | | |
370 | 384 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
1 | 5 | | |
2 | 6 | | |
| 7 | + | |
3 | 8 | | |
4 | 9 | | |
5 | 10 | | |
| |||
66 | 71 | | |
67 | 72 | | |
68 | 73 | | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
0 commit comments