Skip to content

Commit a43a82d

Browse files
merge conf
2 parents 00c2423 + 5bdefe4 commit a43a82d

31 files changed

Lines changed: 4623 additions & 526 deletions

docs/conf.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
# -- Project information -----------------------------------------------------
77
# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information
88

9+
from __future__ import annotations
10+
911
project = "mp-api"
1012
copyright = "2022, The Materials Project"
1113
author = "The Materials Project"

mp_api/client/contribs/__init__.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
"""Pull in core MPContribs client features."""
2+
3+
from __future__ import annotations
4+
5+
from mp_api.client.contribs._types import Attachment, Table
6+
from mp_api.client.contribs.client import ContribsClient
7+
from mp_api.client.contribs.settings import MPCC_SETTINGS
8+
from mp_api.client.core.exceptions import MPContribsClientError
9+
10+
__all__ = [
11+
"ContribsClient",
12+
"MPContribsClientError",
13+
"MPCC_SETTINGS",
14+
"Table",
15+
"Attachment",
16+
]

mp_api/client/contribs/_logger.py

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
from __future__ import annotations
2+
3+
import logging
4+
import os
5+
import sys
6+
from io import StringIO
7+
8+
from mp_api.client.contribs.settings import MPCC_SETTINGS
9+
10+
11+
class LogFilter(logging.Filter):
12+
def __init__(self, level: int, *args, **kwargs) -> None:
13+
"""Start an instance of logging.Filter.
14+
15+
Args:
16+
level (int) : logging level
17+
*args : args to pass to logging.Filter
18+
**kwargs : kwargs to pass to logging.Filter
19+
"""
20+
self.level = level
21+
super().__init__(*args, **kwargs)
22+
23+
def filter(self, record: logging.LogRecord) -> bool:
24+
"""Filter whether a message is logged.
25+
26+
Args:
27+
record (logging.LogRecord) : message to test if it
28+
meets threshold for logging.
29+
30+
Returns:
31+
bool : True if message should be suppressed.
32+
"""
33+
return record.levelno < self.level
34+
35+
36+
class CustomLoggerAdapter(logging.LoggerAdapter):
37+
"""Adapter for logger to enable prefixing."""
38+
39+
def process(self, msg, kwargs):
40+
"""Prefix logging message.
41+
42+
Args:
43+
msg (str) : logging message
44+
kwargs : args to pass to logging.LoggerAdapter
45+
"""
46+
prefix = self.extra.get("prefix")
47+
return f"[{prefix}] {msg}" if prefix else msg, kwargs
48+
49+
50+
def get_logger(name: str = "mp_api.client.contribs") -> CustomLoggerAdapter:
51+
"""Get the default MPContribs logger.
52+
53+
Args:
54+
name (str) : name of the logger
55+
Returns:
56+
CustomLoggerAdapter
57+
"""
58+
logger = logging.getLogger(name)
59+
process = os.environ.get("SUPERVISOR_PROCESS_NAME")
60+
group = os.environ.get("SUPERVISOR_GROUP_NAME")
61+
cfg = {"prefix": f"{group}/{process}"} if process and group else {}
62+
info_handler = logging.StreamHandler(sys.stdout)
63+
error_handler = logging.StreamHandler(sys.stderr)
64+
info_handler.addFilter(LogFilter(logging.WARNING))
65+
error_handler.setLevel(max(logging.DEBUG, logging.WARNING))
66+
logger.handlers = [info_handler, error_handler]
67+
logger.setLevel(MPCC_SETTINGS.CLIENT_LOG_LEVEL)
68+
return CustomLoggerAdapter(logger, cfg)
69+
70+
71+
MPCC_LOGGER = get_logger()
72+
73+
74+
class TqdmToLogger(StringIO):
75+
logger: logging.LoggerAdapter = MPCC_LOGGER
76+
level: int | str = MPCC_SETTINGS.CLIENT_LOG_LEVEL
77+
buf: str = ""
78+
79+
def __init__(
80+
self, logger: logging.LoggerAdapter = MPCC_LOGGER, level: int | None = None
81+
) -> None:
82+
"""Start an instance of a TQDM logger.
83+
84+
Args:
85+
logger (logging.Logger) : Logger to pass through
86+
level (int) : logging level
87+
"""
88+
super().__init__()
89+
self.logger = logger
90+
self.level = level or logging.INFO
91+
92+
def write(self, buf: str) -> int:
93+
self.buf = buf.strip("\r\n\t ")
94+
return 1
95+
96+
def flush(self) -> None:
97+
self.logger.log(self.level, self.buf) # type: ignore[arg-type]

0 commit comments

Comments
 (0)