Source code for ini2toml.plugins.toml_incompatibilities
import logging
from inspect import cleandoc
from typing import List, TypeVar
from ..types import IntermediateRepr, Translator
R = TypeVar("R", bound=IntermediateRepr)
_logger = logging.getLogger(__package__)
_FLAKE8_SECTIONS = ["flake8", "flake8-rst", "flake8:local-plugins"]
_KNOWN_INCOMPATIBILITIES = {
"setup.cfg": [*_FLAKE8_SECTIONS, "devpi:upload"],
".flake8": _FLAKE8_SECTIONS,
}
[docs]
def activate(translator: Translator):
for name, sections in _KNOWN_INCOMPATIBILITIES.items():
fn = ReportIncompatibleSections(name, sections)
translator[name].intermediate_processors.insert(0, fn)
class ReportIncompatibleSections:
"""Remove well-know incompatible sections."""
def __init__(self, profile: str, sections: List[str]):
self._profile = profile
self._sections = sections
def __call__(self, cfg: R) -> R:
invalid = [section for section in self._sections if section in cfg]
if invalid:
sections = ", ".join(repr(x) for x in invalid)
_logger.warning(_warning_text(self._profile, sections))
return cfg
def _warning_text(profile: str, sections: str) -> str:
msg = f"""
Sections {sections} ({profile!r}) may be problematic.
It might be the case TOML files are not supported by the relevant tools,
or that 'ini2toml' just lacks a plugin for this kind of configuration.
Please review the generated output and remove these sections if necessary.
"""
return cleandoc(msg) + "\n"