diff --git a/setup.py b/setup.py index ca02036..ac2d511 100644 --- a/setup.py +++ b/setup.py @@ -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"),