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)