Files
pcdigitizer/pcdigitizer/__init__.py
T
2026-04-15 10:48:27 -04:00

69 lines
1.9 KiB
Python

"""Programmatically download, parse, and digitize chemical data and annotations from PubChem"""
import os
import sys
from ast import literal_eval
from typing import Any
from . import responses
from .data import Annotation
from .pubchem import PubChemAPI
from .task import GetAnnotationPage
__all__ = ["responses", "Annotation", "PubChemAPI", "GetAnnotationPage"]
from loguru import logger
logger.disable("pcdigitizer")
LOG_FORMAT = (
"<green>{time:HH:mm:ss}</green> | "
"<level>{level: <8}</level> | "
"<cyan>{name}</cyan>:<cyan>{function}</cyan>:<cyan>{line}</cyan> - <level>{message}</level>"
)
def enable_logging(
level_set: int,
stdout_set: bool = True,
file_path: str | None = None,
log_format: str = LOG_FORMAT,
colorize: bool = True,
) -> None:
r"""Enable logging.
Args:
level: Requested log level: `10` is debug, `20` is info.
file_path: Also write logs to files here.
"""
config: dict[str, Any] = {"handlers": []}
if stdout_set:
config["handlers"].append(
{
"sink": sys.stdout,
"level": level_set,
"format": log_format,
"colorize": colorize,
}
)
if isinstance(file_path, str):
config["handlers"].append(
{
"sink": file_path,
"level": level_set,
"format": log_format,
"colorize": colorize,
}
)
# https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger.configure
logger.configure(**config)
logger.enable("pcdigitizer")
if literal_eval(os.environ.get("PCDIGITIZER_LOG", "False")):
level = int(os.environ.get("PCDIGITIZER_LOG_LEVEL", 20))
stdout = literal_eval(os.environ.get("PCDIGITIZER_STDOUT", "True"))
log_file_path = os.environ.get("PCDIGITIZER_LOG_FILE_PATH", None)
enable_logging(level, stdout, log_file_path)