Source code for pkglts.option.pyproject.option

import logging
from pathlib import Path

from url_normalize import url_normalize

from pkglts.option_object import Option
from pkglts.version import __version__

LOGGER = logging.getLogger(__name__)


[docs] class OptionPyproject(Option):
[docs] def version(self): return __version__
[docs] def root_dir(self): return Path(__file__).parent
[docs] def update_parameters(self, cfg): LOGGER.info("update parameters %s", self._name) sec = dict( intended_versions=["3.11"], ) cfg[self._name] = sec
[docs] def check(self, cfg): invalids = [] intended_versions = cfg[self._name]['intended_versions'] if not intended_versions: invalids.append("pyproject.intended_versions") return invalids
[docs] def require_option(self, cfg): return ['src', 'doc', 'license', 'version', 'reqs']
[docs] def environment_extensions(self, cfg): py_vers = sorted([int(v) for v in ver.split(".")] for ver in cfg[self._name]['intended_versions']) universal = len(set(ver.split(".")[0] for ver in cfg[self._name]['intended_versions'])) > 1 return { "urls": find_urls(cfg), "py_max_ver": ".".join(str(v) for v in py_vers[-1]), "py_min_ver": ".".join(str(v) for v in py_vers[0]), "universal": universal }
[docs] def find_urls(cfg): """Extract all valid urls from all config sections. Args: cfg (Config): current package configuration Returns: dict(str, str): key, url """ urls = {} for name, section, key in [ ("homepage", "base", "url"), ("repository", "github", "url"), ("repository", "gitlab", "url"), ]: try: url = cfg[section][key] if url is not None: urls[name] = url_normalize(url) except KeyError: pass return urls