Changeset View
Changeset View
Standalone View
Standalone View
swh/core/logger.py
# Copyright (C) 2015 The Software Heritage developers | # Copyright (C) 2015 The Software Heritage developers | ||||
# See the AUTHORS file at the top-level directory of this distribution | # See the AUTHORS file at the top-level directory of this distribution | ||||
# License: GNU General Public License version 3, or any later version | # License: GNU General Public License version 3, or any later version | ||||
# See top-level LICENSE file for more information | # See top-level LICENSE file for more information | ||||
import datetime | import datetime | ||||
import logging | import logging | ||||
from typing import Any, Generator, List, Tuple | |||||
from systemd.journal import JournalHandler as _JournalHandler, send | from systemd.journal import JournalHandler as _JournalHandler, send | ||||
try: | try: | ||||
from celery import current_task | from celery import current_task | ||||
except ImportError: | except ImportError: | ||||
current_task = None | current_task = None | ||||
Show All 31 Lines | if current_task and current_task.request: | ||||
extra_data['task'].update({ | extra_data['task'].update({ | ||||
'kwargs': current_task.request.kwargs, | 'kwargs': current_task.request.kwargs, | ||||
'args': current_task.request.args, | 'args': current_task.request.args, | ||||
}) | }) | ||||
return extra_data | return extra_data | ||||
def flatten(data, separator='_'): | def flatten( | ||||
data: Any, | |||||
separator: str = "_" | |||||
) -> Generator[Tuple[str, Any], None, None]: | |||||
"""Flatten the data dictionary into a flat structure""" | """Flatten the data dictionary into a flat structure""" | ||||
def inner_flatten(data, prefix): | |||||
def inner_flatten( | |||||
data: Any, prefix: List[str] | |||||
) -> Generator[Tuple[List[str], Any], None, None]: | |||||
if isinstance(data, dict): | if isinstance(data, dict): | ||||
if all(isinstance(key, str) for key in data): | |||||
for key, value in data.items(): | for key, value in data.items(): | ||||
yield from inner_flatten(value, prefix + [key]) | yield from inner_flatten(value, prefix + [key]) | ||||
else: | |||||
yield prefix, str(data) | |||||
elif isinstance(data, (list, tuple)): | elif isinstance(data, (list, tuple)): | ||||
for key, value in enumerate(data): | for key, value in enumerate(data): | ||||
yield from inner_flatten(value, prefix + [str(key)]) | yield from inner_flatten(value, prefix + [str(key)]) | ||||
else: | else: | ||||
yield prefix, data | yield prefix, data | ||||
for path, value in inner_flatten(data, []): | for path, value in inner_flatten(data, []): | ||||
yield separator.join(path), value | yield separator.join(path), value | ||||
Show All 36 Lines |