fixed version classifier (forever)

This commit is contained in:
Peter Boin 2017-10-07 18:39:43 +11:00
parent 3773cd0ef4
commit 4a6a1113ee

View File

@ -1,6 +1,7 @@
import codecs
import os
import re
from distutils.version import LooseVersion
from setuptools import setup, find_packages
@ -14,7 +15,7 @@ PACKAGES = find_packages(where="src")
META_PATH = os.path.join("src", NAME, "__init__.py")
KEYWORDS = ['gcode', 'cnc', 'parser', 'interpreter']
CLASSIFIERS = [
"Development Status :: 2 - Pre-Alpha", # see src/pygcode/__init__.py
"Development Status :: 3 - Alpha", # see src/pygcode/__init__.py
"Intended Audience :: Developers",
"Intended Audience :: Manufacturing",
"License :: OSI Approved :: GNU General Public License v3 (GPLv3)",
@ -65,13 +66,49 @@ def find_meta(meta):
raise RuntimeError("Unable to find __{meta}__ string.".format(meta=meta))
def assert_version_classifier(version_str):
"""
Verify version consistency:
version number must correspond to the correct "Development Status" classifier
:raises: ValueError if error found, but ideally this function does nothing
"""
V = lambda v: LooseVersion(v)
# cast version
version = V(version_str)
# get "Development Status" classifier
dev_status_list = [x for x in CLASSIFIERS if x.startswith("Development Status ::")]
if len(dev_status_list) != 1:
raise ValueError("must be 1 'Development Status' in CLASSIFIERS")
classifier = dev_status_list.pop()
version_map = [
(V('0.1'), "Development Status :: 2 - Pre-Alpha"),
(V('0.2'), "Development Status :: 3 - Alpha"),
(V('0.3'), "Development Status :: 4 - Beta"),
(V('1.0'), "Development Status :: 5 - Production/Stable"),
]
for (test_ver, test_classifier) in reversed(sorted(version_map, key=lambda x: x[0])):
if version >= test_ver:
if classifier == test_classifier:
return # all good, now forget any of this ever happened
else:
raise ValueError("for version {ver} classifier should be \n'{good}'\nnot\n'{bad}'".format(
ver=str(version), good=test_classifier, bad=classifier
))
if __name__ == "__main__":
version = find_meta("version")
assert_version_classifier(version)
setup(
name=NAME,
description=find_meta("description"),
license=find_meta("license"),
url=find_meta("url"),
version=find_meta("version"),
version=version,
author=find_meta("author"),
author_email=find_meta("email"),
maintainer=find_meta("author"),