Diff of /setup.py [000000] .. [030aeb]

Switch to side-by-side view

--- a
+++ b/setup.py
@@ -0,0 +1,170 @@
+#!/usr/bin/env python
+
+import os
+import sys
+from shutil import rmtree
+from setuptools import Command, find_packages, setup
+
+here = os.path.abspath(os.path.dirname(__file__))
+
+
+def get_version():
+    init_py_path = os.path.join(os.path.abspath(os.path.dirname(__file__)), "dosma", "__init__.py")
+    init_py = open(init_py_path, "r").readlines()
+    version_line = [l.strip() for l in init_py if l.startswith("__version__")][0]  # noqa: E741
+    version = version_line.split("=")[-1].strip().strip("'\"")
+
+    # The following is used to build release packages.
+    # Users should never use it.
+    suffix = os.getenv("DOSMA_VERSION_SUFFIX", "")
+    version = version + suffix
+    if os.getenv("BUILD_NIGHTLY", "0") == "1":
+        from datetime import datetime
+
+        date_str = datetime.today().strftime("%y%m%d")
+        version = version + ".dev" + date_str
+
+        new_init_py = [l for l in init_py if not l.startswith("__version__")]  # noqa: E741
+        new_init_py.append('__version__ = "{}"\n'.format(version))
+        with open(init_py_path, "w") as f:
+            f.write("".join(new_init_py))
+    return version
+
+
+def get_resources():
+    """Get the resources files for dosma. To be used with `package_data`.
+
+    All files under 'dosma/resources/{elastix,templates}'.
+    """
+    import pathlib
+
+    files = []
+    # Elastix files
+    for path in pathlib.Path("dosma/resources/elastix/params").rglob("*.*"):
+        files.append(str(path))
+    for path in pathlib.Path("dosma/resources/templates").rglob("*.*"):
+        files.append(str(path))
+    return [x.split("/", 1)[1] for x in files]
+
+
+class UploadCommand(Command):
+    """Support setup.py upload.
+
+    Adapted from https://github.com/robustness-gym/meerkat.
+    """
+
+    description = "Build and publish the package."
+    user_options = []
+
+    @staticmethod
+    def status(s):
+        """Prints things in bold."""
+        print("\033[1m{0}\033[0m".format(s))
+
+    def initialize_options(self):
+        pass
+
+    def finalize_options(self):
+        pass
+
+    def run(self):
+        try:
+            self.status("Removing previous builds…")
+            rmtree(os.path.join(here, "dist"))
+        except OSError:
+            pass
+
+        self.status("Building Source and Wheel (universal) distribution…")
+        os.system("{0} setup.py sdist bdist_wheel --universal".format(sys.executable))
+
+        self.status("Uploading the package to PyPI via Twine…")
+        os.system("twine upload dist/*")
+
+        self.status("Pushing git tags…")
+        os.system("git tag v{0}".format(get_version()))
+        os.system("git push --tags")
+
+        sys.exit()
+
+
+# ---------------------------------------------------
+# Setup Information
+# ---------------------------------------------------
+
+# Required pacakges.
+REQUIRED = [
+    "matplotlib",
+    "numpy",
+    "h5py",
+    "natsort",
+    "nested-lookup",
+    "nibabel",
+    "nipype",
+    "packaging",
+    "pandas",
+    # TODO Issue #57: Remove pydicom upper bound (https://github.com/ad12/DOSMA/issues/57)
+    "pydicom>=1.6.0",
+    "scikit-image",
+    "scipy",
+    "seaborn",
+    "openpyxl",
+    "Pmw",
+    "PyYAML",
+    "tabulate",
+    "termcolor",
+    "tqdm>=4.42.0",
+]
+
+# Optional packages.
+# TODO Issue #106: Fix to only import tensorflow version with fixed version
+# once keras import statements are properly handled.
+EXTRAS = {
+    "dev": [
+        "coverage",
+        "flake8",
+        "flake8-bugbear",
+        "flake8-comprehensions",
+        "isort",
+        "black==21.4b2",
+        "click==8.0.2",
+        "simpleitk",
+        "sphinx",
+        "sphinxcontrib.bibtex",
+        "m2r2",
+        "tensorflow<=2.4.1",
+        "keras<=2.4.3",
+        "sigpy",
+    ],
+    "ai": ["tensorflow<=2.4.1", "keras<=2.4.3"],
+    "docs": ["mistune>=0.8.1,<2.0.0", "sphinx", "sphinxcontrib.bibtex", "m2r2"],
+}
+
+with open("README.md", "r", encoding="utf-8") as fh:
+    long_description = fh.read()
+
+
+setup(
+    name="dosma",
+    version=get_version(),
+    author="Arjun Desai",
+    url="https://github.com/ad12/DOSMA",
+    project_urls={"Documentation": "https://dosma.readthedocs.io/"},
+    description="An AI-powered open-source medical image analysis toolbox",
+    long_description=long_description,
+    long_description_content_type="text/markdown",
+    packages=find_packages(exclude=("configs", "tests", "tests.*")),
+    package_data={"dosma": get_resources()},
+    python_requires=">=3.6",
+    install_requires=REQUIRED,
+    license="GNU",
+    classifiers=[
+        "Programming Language :: Python :: 3",
+        "License :: OSI Approved :: GNU General Public License v3 (GPLv3)",
+        "Operating System :: OS Independent",
+    ],
+    extras_require=EXTRAS,
+    # $ setup.py publish support.
+    cmdclass={
+        "upload": UploadCommand,
+    },
+)