From 348942be30a2f2b8bc4805588a815952ee728c51 Mon Sep 17 00:00:00 2001 From: Vasek Sraier Date: Wed, 27 Oct 2021 11:57:06 +0200 Subject: [PATCH] added autogenerated setup.py --- manager/pyproject.toml | 1 + manager/scripts/codecheck | 11 ++++++ manager/scripts/create_setup.py | 61 +++++++++++++++++++++++++++++++++ manager/scripts/run | 2 +- manager/setup.py | 45 ++++++++++++++++++++++++ 5 files changed, 119 insertions(+), 1 deletion(-) create mode 100644 manager/scripts/create_setup.py create mode 100644 manager/setup.py diff --git a/manager/pyproject.toml b/manager/pyproject.toml index 8d089c133..71c9a51a9 100644 --- a/manager/pyproject.toml +++ b/manager/pyproject.toml @@ -53,6 +53,7 @@ clean = """ dist .tox """ +gen-setuppy = { shell = "python scripts/create_setup.py > setup.py", help = "Generate setup.py file for backwards compatibility" } tox = { cmd = "tox", help = "Run tests in tox" } integration = {cmd = "python integration/runner.py", help = "Run integration tests" } configure-vscode = {cmd = "scripts/configure-vscode", help = "Create VSCode configuration for debugging, virtual envs etc" } diff --git a/manager/scripts/codecheck b/manager/scripts/codecheck index 31a7ebd41..0be9f93f0 100755 --- a/manager/scripts/codecheck +++ b/manager/scripts/codecheck @@ -40,10 +40,21 @@ pyright knot_resolver_manager check_rv $? echo + +# check that setup.py is not behind pyproject.toml +echo -e "${yellow}Checking setup.py${reset}" +python scripts/create_setup.py | diff - setup.py +check_rv $? +echo + # fancy messages at the end :) if test "$aggregate_rv" -eq "0"; then echo -e "${green}Everything looks great!${reset} 🥳🎉🥰" else + echo -e "${red}Failure.${reset}" + echo -e "${red}These commands might help you:${reset}" + echo -e "${red}\tpoe format${reset}" + echo -e "${red}\tpoe gen-setuppy${reset}" echo -e "${red}That's not great. Could you please fix that?${reset} 😲😟" fi diff --git a/manager/scripts/create_setup.py b/manager/scripts/create_setup.py new file mode 100644 index 000000000..bf1366c08 --- /dev/null +++ b/manager/scripts/create_setup.py @@ -0,0 +1,61 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +# Original source: +# https://github.com/sdss/flicamera/blob/main/create_setup.py +# We modified the script so that it outputs the setup.py to stdout +# +# @Author: José Sánchez-Gallego (gallegoj@uw.edu) +# @Date: 2019-12-18 +# @Filename: create_setup.py +# @License: BSD 3-clause (http://www.opensource.org/licenses/BSD-3-Clause) + +# This is a temporary solution for the fact that pip install . fails with +# poetry when there is no setup.py and an extension needs to be compiled. +# See https://github.com/python-poetry/poetry/issues/1516. Running this +# script creates a setup.py filled out with information generated by +# poetry when parsing the pyproject.toml. + +import os +import sys +from distutils.version import StrictVersion + + +# If there is a global installation of poetry, prefer that. +lib = os.path.expanduser("~/.poetry/lib") +vendors = os.path.join(lib, "poetry", "_vendor") +current_vendors = os.path.join( + vendors, "py{}".format(".".join(str(v) for v in sys.version_info[:2])) +) + +sys.path.insert(0, lib) +sys.path.insert(0, current_vendors) + +try: + try: + from poetry.core.factory import Factory + from poetry.core.masonry.builders.sdist import SdistBuilder + except (ImportError, ModuleNotFoundError): + from poetry.masonry.builders.sdist import SdistBuilder + from poetry.factory import Factory + from poetry.__version__ import __version__ +except (ImportError, ModuleNotFoundError) as ee: + raise ImportError( + f"install poetry by doing pip install poetry to use this script: {ee}" + ) + + +# Generate a Poetry object that knows about the metadata in pyproject.toml +factory = Factory() +poetry = factory.create_poetry(os.path.dirname(__file__)) + +# Use the SdistBuilder to genrate a blob for setup.py +if StrictVersion(__version__) >= StrictVersion("1.1.0b1"): + sdist_builder = SdistBuilder(poetry, None) +else: + sdist_builder = SdistBuilder(poetry, None, None) + +setuppy_blob = sdist_builder.build_setup() + +sys.stdout.buffer.write(setuppy_blob) +sys.stdout.buffer.write(b"\n# This setup.py was autogenerated using poetry.\n") diff --git a/manager/scripts/run b/manager/scripts/run index fdd5839eb..39438df15 100755 --- a/manager/scripts/run +++ b/manager/scripts/run @@ -7,4 +7,4 @@ source $src_dir/_env.sh echo Knot Manager API is accessible on http://localhost:5000 echo ------------------------------------------------------- -poetry run python -m knot_resolver_manager $@ \ No newline at end of file +poetry run python -m knot_resolver_manager -c etc/knot-resolver/config.yml $@ diff --git a/manager/setup.py b/manager/setup.py new file mode 100644 index 000000000..7ca64d84f --- /dev/null +++ b/manager/setup.py @@ -0,0 +1,45 @@ +# -*- coding: utf-8 -*- +from setuptools import setup + +packages = \ +['knot_resolver_manager', + 'knot_resolver_manager.client', + 'knot_resolver_manager.compat', + 'knot_resolver_manager.datamodel', + 'knot_resolver_manager.kresd_controller', + 'knot_resolver_manager.kresd_controller.supervisord', + 'knot_resolver_manager.kresd_controller.systemd', + 'knot_resolver_manager.utils'] + +package_data = \ +{'': ['*']} + +install_requires = \ +['Jinja2>=2.11.3,<3.0.0', + 'PyGObject>=3.38.0,<4.0.0', + 'PyYAML>=5.4.1,<6.0.0', + 'aiohttp>=3.6.12,<4.0.0', + 'click>=7.1.2,<8.0.0', + 'pydbus>=0.6.0,<0.7.0', + 'requests>=2.25.1,<3.0.0'] + +setup_kwargs = { + 'name': 'knot-resolver-manager', + 'version': '0.1.0', + 'description': 'A central management tool for multiple instances of Knot Resolver', + 'long_description': None, + 'author': 'Vašek Šraier', + 'author_email': 'git@vakabus.cz', + 'maintainer': None, + 'maintainer_email': None, + 'url': None, + 'packages': packages, + 'package_data': package_data, + 'install_requires': install_requires, + 'python_requires': '>=3.6.8,<4.0.0', +} + + +setup(**setup_kwargs) + +# This setup.py was autogenerated using poetry. -- 2.47.3