#!/usr/bin/env python3
import sys

import setuptools
import setuptools.command.test


def get_requirements(filename):
    """Read requirements from file."""
    with open(filename, mode="rt", encoding="utf-8") as f:
        for line in f:
            # TODO: Will not work with #egg-info
            requirement = line.partition("#")[0].strip()
            if not requirement:
                continue
            yield requirement


def get_textfile(filename):
    """Get contents from a text file."""
    with open(filename, mode="rt", encoding="utf-8") as f:
        return f.read().lstrip()


def get_packages():
    """List of (sub)packages to install."""
    return setuptools.find_packages(".", include=("setra_client", "setra_client.*"))


class PyTest(setuptools.command.test.test):
    """Run tests using pytest.

    From `http://doc.pytest.org/en/latest/goodpractices.html`.

    """

    user_options = [("pytest-args=", "a", "Arguments to pass to pytest")]

    def initialize_options(self):
        super().initialize_options()
        self.pytest_args = []

    def run_tests(self):
        import shlex
        import pytest

        args = self.pytest_args
        if args:
            args = shlex.split(args)
        errno = pytest.main(args)
        raise SystemExit(errno)


def run_setup():
    setup_requirements = ["setuptools_scm"]
    test_requirements = list(get_requirements("requirements-test.txt"))
    install_requirements = list(get_requirements("requirements.txt"))

    if {"build_sphinx", "upload_docs"}.intersection(sys.argv):
        setup_requirements.extend(get_requirements("docs/requirements.txt"))
        setup_requirements.extend(install_requirements)

    setuptools.setup(
        name="setra-client",
        description="Client for the SETRA API",
        long_description=get_textfile("README.md"),
        long_description_content_type="text/markdown",
        url="https://git.app.uib.no/it-bott-integrasjoner/setra-client",
        author="BOTT-INT",
        author_email="bnt-int@usit.uio.no",
        use_scm_version=True,
        packages=get_packages(),
        package_data={"setra_client": ["py.typed"]},
        setup_requires=setup_requirements,
        install_requires=install_requirements,
        tests_require=test_requirements,
        cmdclass={
            "test": PyTest,
        },
        classifiers=[
            "Development Status :: 3 - Alpha",
            "Intended Audience :: Developers",
            "Topic :: Software Development :: Libraries",
            "Programming Language :: Python :: 3 :: Only",
            "Programming Language :: Python :: 3.8",
        ],
        keywords="SETRA API client",
    )


if __name__ == "__main__":
    run_setup()