Source code for pkglts.option.pypi.option

import logging
from pathlib import Path

from pkglts.dependency import Dependency
from pkglts.local import pkg_full_name
from pkglts.option.doc.badge import Badge
from pkglts.option_object import Option
from pkglts.version import __version__

LOGGER = logging.getLogger(__name__)


[docs] class OptionPypi(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( classifiers=[ "Development Status :: 2 - Pre-Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Natural Language :: English", ], servers=[ dict(name="pypi", url="https://upload.pypi.org/legacy/"), dict(name="test", url="https://testpypi.python.org/pypi"), ], ) cfg[self._name] = sec
[docs] def check(self, cfg): invalids = [] classifiers = cfg[self._name]["classifiers"] if not classifiers: invalids.append("pypi.classifiers") return invalids
[docs] def require_option(self, cfg): return ["doc", "pyproject"]
[docs] def require(self, cfg): del cfg yield Dependency("twine", intent="dvlpt")
[docs] def environment_extensions(self, cfg): ext = {"auto_classifiers": auto_classifiers(cfg)} servers = cfg["pypi"]["servers"] if servers and servers[0]["name"] == "pypi": url = f"badge.fury.io/py/{pkg_full_name(cfg)}" ext["badge"] = Badge(name="pypi", url=url, url_img=f"{url}.svg", text="PyPI version") return ext
[docs] def auto_classifiers(cfg): """Generate a list of classifiers for pypi from all sections of config. Args: cfg (Config): current package configuration Returns: (list of str) """ items = set(cfg["pypi"]["classifiers"]) # add license item # TODO # add intended versions items intended_versions = cfg["pyproject"]["intended_versions"] if intended_versions: items.add("Programming Language :: Python") ver_cla_tpl = "Programming Language :: Python :: {}" major_versions = set() for ver in intended_versions: items.add(ver_cla_tpl.format(ver)) major_versions.add(ver.split(".")[0]) for ver in major_versions: items.add(ver_cla_tpl.format(ver)) if len(major_versions) == 1: (ver,) = major_versions items.add(f"Programming Language :: Python :: {ver} :: Only") return sorted(items)