diff options
| author | Joshua Watt <jpewhacker@gmail.com> | 2020-03-11 18:28:45 -0500 |
|---|---|---|
| committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2020-03-13 11:29:23 +0000 |
| commit | 361ea84d5683000397f2deeb05b4ffdba624df83 (patch) | |
| tree | b8fd5a157eda013d6fb85528637be1dac8437015 | |
| parent | c8b2694cd4a1fdd93a9bdf727d568ee8530e4039 (diff) | |
| download | poky-361ea84d5683000397f2deeb05b4ffdba624df83.tar.gz | |
bitbake: msg: Add helper to merge logging configs
Adds a function that can be used by UI front ends to merge logging
configuration fragments.
(Bitbake rev: e860d93b76c142fdae90226bc68e4fe6e7b6a9db)
Signed-off-by: Joshua Watt <JPEWhacker@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
| -rw-r--r-- | bitbake/lib/bb/msg.py | 89 |
1 files changed, 48 insertions, 41 deletions
diff --git a/bitbake/lib/bb/msg.py b/bitbake/lib/bb/msg.py index 05645739d4..582165dd08 100644 --- a/bitbake/lib/bb/msg.py +++ b/bitbake/lib/bb/msg.py | |||
| @@ -229,6 +229,53 @@ def has_console_handler(logger): | |||
| 229 | return True | 229 | return True |
| 230 | return False | 230 | return False |
| 231 | 231 | ||
| 232 | def mergeLoggingConfig(logconfig, userconfig): | ||
| 233 | logconfig = copy.deepcopy(logconfig) | ||
| 234 | userconfig = copy.deepcopy(userconfig) | ||
| 235 | |||
| 236 | # Merge config with the default config | ||
| 237 | if userconfig.get('version') != logconfig['version']: | ||
| 238 | raise BaseException("Bad user configuration version. Expected %r, got %r" % (logconfig['version'], userconfig.get('version'))) | ||
| 239 | |||
| 240 | # Set some defaults to make merging easier | ||
| 241 | userconfig.setdefault("loggers", {}) | ||
| 242 | |||
| 243 | # If a handler, formatter, or filter is defined in the user | ||
| 244 | # config, it will replace an existing one in the default config | ||
| 245 | for k in ("handlers", "formatters", "filters"): | ||
| 246 | logconfig.setdefault(k, {}).update(userconfig.get(k, {})) | ||
| 247 | |||
| 248 | seen_loggers = set() | ||
| 249 | for name, l in logconfig["loggers"].items(): | ||
| 250 | # If the merge option is set, merge the handlers and | ||
| 251 | # filters. Otherwise, if it is False, this logger won't get | ||
| 252 | # add to the set of seen loggers and will replace the | ||
| 253 | # existing one | ||
| 254 | if l.get('bitbake_merge', True): | ||
| 255 | ulogger = userconfig["loggers"].setdefault(name, {}) | ||
| 256 | ulogger.setdefault("handlers", []) | ||
| 257 | ulogger.setdefault("filters", []) | ||
| 258 | |||
| 259 | # Merge lists | ||
| 260 | l.setdefault("handlers", []).extend(ulogger["handlers"]) | ||
| 261 | l.setdefault("filters", []).extend(ulogger["filters"]) | ||
| 262 | |||
| 263 | # Replace other properties if present | ||
| 264 | if "level" in ulogger: | ||
| 265 | l["level"] = ulogger["level"] | ||
| 266 | |||
| 267 | if "propagate" in ulogger: | ||
| 268 | l["propagate"] = ulogger["propagate"] | ||
| 269 | |||
| 270 | seen_loggers.add(name) | ||
| 271 | |||
| 272 | # Add all loggers present in the user config, but not any that | ||
| 273 | # have already been processed | ||
| 274 | for name in set(userconfig["loggers"].keys()) - seen_loggers: | ||
| 275 | logconfig["loggers"][name] = userconfig["loggers"][name] | ||
| 276 | |||
| 277 | return logconfig | ||
| 278 | |||
| 232 | def setLoggingConfig(defaultconfig, userconfigfile=None): | 279 | def setLoggingConfig(defaultconfig, userconfigfile=None): |
| 233 | logconfig = copy.deepcopy(defaultconfig) | 280 | logconfig = copy.deepcopy(defaultconfig) |
| 234 | 281 | ||
| @@ -244,47 +291,7 @@ def setLoggingConfig(defaultconfig, userconfigfile=None): | |||
| 244 | raise BaseException("Unrecognized file format: %s" % userconfigfile) | 291 | raise BaseException("Unrecognized file format: %s" % userconfigfile) |
| 245 | 292 | ||
| 246 | if userconfig.get('bitbake_merge', True): | 293 | if userconfig.get('bitbake_merge', True): |
| 247 | # Merge config with the default config | 294 | logconfig = mergeLoggingConfig(logconfig, userconfig) |
| 248 | if userconfig.get('version') != logconfig['version']: | ||
| 249 | raise BaseException("Bad user configuration version. Expected %r, got %r" % (logconfig['version'], userconfig.get('version'))) | ||
| 250 | |||
| 251 | # Set some defaults to make merging easier | ||
| 252 | userconfig.setdefault("loggers", {}) | ||
| 253 | |||
| 254 | # If a handler, formatter, or filter is defined in the user | ||
| 255 | # config, it will replace an existing one in the default config | ||
| 256 | for k in ("handlers", "formatters", "filters"): | ||
| 257 | logconfig.setdefault(k, {}).update(userconfig.get(k, {})) | ||
| 258 | |||
| 259 | seen_loggers = set() | ||
| 260 | for name, l in logconfig["loggers"].items(): | ||
| 261 | # If the merge option is set, merge the handlers and | ||
| 262 | # filters. Otherwise, if it is False, this logger won't get | ||
| 263 | # add to the set of seen loggers and will replace the | ||
| 264 | # existing one | ||
| 265 | if l.get('bitbake_merge', True): | ||
| 266 | ulogger = userconfig["loggers"].setdefault(name, {}) | ||
| 267 | ulogger.setdefault("handlers", []) | ||
| 268 | ulogger.setdefault("filters", []) | ||
| 269 | |||
| 270 | # Merge lists | ||
| 271 | l.setdefault("handlers", []).extend(ulogger["handlers"]) | ||
| 272 | l.setdefault("filters", []).extend(ulogger["filters"]) | ||
| 273 | |||
| 274 | # Replace other properties if present | ||
| 275 | if "level" in ulogger: | ||
| 276 | l["level"] = ulogger["level"] | ||
| 277 | |||
| 278 | if "propagate" in ulogger: | ||
| 279 | l["propagate"] = ulogger["propagate"] | ||
| 280 | |||
| 281 | seen_loggers.add(name) | ||
| 282 | |||
| 283 | # Add all loggers present in the user config, but not any that | ||
| 284 | # have already been processed | ||
| 285 | for name in set(userconfig["loggers"].keys()) - seen_loggers: | ||
| 286 | logconfig["loggers"][name] = userconfig["loggers"][name] | ||
| 287 | |||
| 288 | else: | 295 | else: |
| 289 | # Replace the entire default config | 296 | # Replace the entire default config |
| 290 | logconfig = userconfig | 297 | logconfig = userconfig |
