From 3cda3b577ea63b70f5b30c19a075bd8965902e26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Jan=C3=9Fen?= Date: Sun, 26 Nov 2023 16:43:44 +0100 Subject: [PATCH] Switch to pyproject.toml --- .ci_support/release.py | 61 ++++++++++++++++++++++++++++++++++++ .github/workflows/deploy.yml | 11 +++---- pyfileindex/__init__.py | 8 ++--- pyproject.toml | 48 ++++++++++++++++++++++++++++ setup.cfg | 12 ------- setup.py | 38 ++-------------------- 6 files changed, 118 insertions(+), 60 deletions(-) create mode 100644 .ci_support/release.py create mode 100644 pyproject.toml delete mode 100644 setup.cfg diff --git a/.ci_support/release.py b/.ci_support/release.py new file mode 100644 index 0000000..7962075 --- /dev/null +++ b/.ci_support/release.py @@ -0,0 +1,61 @@ +def get_setup_version_and_pattern(setup_content): + depend_lst, version_lst = [], [] + for l in setup_content: + if '==' in l: + lst = l.split('[')[-1].split(']')[0].replace(' ', '').replace('"', '').replace("'", '').split(',') + for dep in lst: + if dep != '\n': + version_lst.append(dep.split('==')[1]) + depend_lst.append(dep.split('==')[0]) + + version_high_dict = {d: v for d, v in zip(depend_lst, version_lst)} + return version_high_dict + + +def get_env_version(env_content): + read_flag = False + depend_lst, version_lst = [], [] + for l in env_content: + if 'dependencies:' in l: + read_flag = True + elif read_flag: + lst = l.replace('-', '').replace(' ', '').replace('\n', '').split("=") + if len(lst) == 2: + depend_lst.append(lst[0]) + version_lst.append(lst[1]) + return {d:v for d, v in zip(depend_lst, version_lst)} + + +def update_dependencies(setup_content, version_low_dict, version_high_dict): + version_combo_dict = {} + for dep, ver in version_high_dict.items(): + if dep in version_low_dict.keys() and version_low_dict[dep] != ver: + version_combo_dict[dep] = dep + ">=" + version_low_dict[dep] + ",<=" + ver + else: + version_combo_dict[dep] = dep + "==" + ver + + setup_content_new = "" + pattern_dict = {d:d + "==" + v for d, v in version_high_dict.items()} + for l in setup_content: + for k, v in pattern_dict.items(): + if v in l: + l = l.replace(v, version_combo_dict[k]) + setup_content_new +=l + return setup_content_new + + +if __name__ == "__main__": + with open('pyproject.toml', "r") as f: + setup_content = f.readlines() + + with open('environment.yml', "r") as f: + env_content = f.readlines() + + setup_content_new = update_dependencies( + setup_content=setup_content, + version_low_dict=get_env_version(env_content=env_content), + version_high_dict=get_setup_version_and_pattern(setup_content=setup_content), + ) + + with open('pyproject.toml', "w") as f: + f.writelines(setup_content_new) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index f567fa4..ebdea96 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -23,13 +23,12 @@ jobs: with: python-version: "3.11" - name: Install dependencies - run: >- - python -m pip install --user --upgrade setuptools wheel + run: python -m pip install --user --upgrade setuptools wheel - name: Convert dependencies - run: >- - sed -i 's/==/>=/g' setup.py; cat setup.py + run: | + cp .ci_support/environment-old.yml environment.yml + python .ci_support/release.py; cat pyproject.toml - name: Build - run: >- - python setup.py sdist bdist_wheel + run: python setup.py sdist bdist_wheel - name: Publish distribution 📦 to PyPI uses: pypa/gh-action-pypi-publish@release/v1 diff --git a/pyfileindex/__init__.py b/pyfileindex/__init__.py index 19f2691..af5f3bd 100644 --- a/pyfileindex/__init__.py +++ b/pyfileindex/__init__.py @@ -1,8 +1,4 @@ -__version__ = "0.0.1" -__all__ = [] - -from ._version import get_versions +from . import _version from .pyfileindex import PyFileIndex -__version__ = get_versions()["version"] -del get_versions +__version__ = _version.get_versions()["version"] diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..60dceec --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,48 @@ +[build-system] +requires = ["setuptools"] +build-backend = "setuptools.build_meta" + +[project] +name = "pyfileindex" +description = "pyfileindex - pythonic file system index" +authors = [ + { name = "Jan Janssen", email = "janssen@mpie.de" }, +] +readme = "README.md" +license = { file = "LICENSE" } +keywords = ["pyiron"] +requires-python = ">=3.8" +classifiers = [ + "Development Status :: 5 - Production/Stable", + "Topic :: Scientific/Engineering :: Physics", + "License :: OSI Approved :: BSD License", + "Intended Audience :: Science/Research", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", +] +dependencies = [ + "pandas==2.1.3", + "scandir==1.10.0", +] +dynamic = ["version"] + +[project.urls] +Homepage = "https://github.com/pyiron/pyfileindex" +Documentation = "https://github.com/pyiron/pyfileindex" +Repository = "https://github.com/pyiron/pyfileindex" + +[tool.setuptools] +packages = ["pyfileindex"] + +[tool.setuptools.dynamic] +version = {attr = "pyfileindex.__version__"} + +[tool.versioneer] +VCS = "git" +style = "pep440-pre" +versionfile_source = "pyfileindex/_version.py" +parentdir_prefix = "pyfileindex" +tag_prefix = "pyfileindex-" diff --git a/setup.cfg b/setup.cfg deleted file mode 100644 index 7a61140..0000000 --- a/setup.cfg +++ /dev/null @@ -1,12 +0,0 @@ - -# See the docstring in versioneer.py for instructions. Note that you must -# re-run 'versioneer.py setup' after changing this section, and commit the -# resulting files. - -[versioneer] -VCS = git -style = pep440-pre -versionfile_source = pyfileindex/_version.py -#versionfile_build = -tag_prefix = pyfileindex- -parentdir_prefix = pyfileindex diff --git a/setup.py b/setup.py index a22bd4a..fc1f76c 100644 --- a/setup.py +++ b/setup.py @@ -1,37 +1,3 @@ -""" -Setuptools based setup module -""" -from setuptools import setup, find_packages -import versioneer +from setuptools import setup -setup( - name='pyfileindex', - version=versioneer.get_version(), - description='pyfileindex - pythonic file system index', - long_description='pyfileindex creates a dynamic file system index inside a pandas DataFrame.', - - url='https://github.com/pyfileindex/pyfileindex', - author='Jan Janssen', - author_email='janssen@mpie.de', - license='BSD', - - classifiers=['Development Status :: 5 - Production/Stable', - 'Topic :: Scientific/Engineering :: Physics', - 'License :: OSI Approved :: BSD License', - 'Intended Audience :: Science/Research', - 'Operating System :: OS Independent', - 'Programming Language :: Python :: 3.7', - 'Programming Language :: Python :: 3.8', - 'Programming Language :: Python :: 3.9', - 'Programming Language :: Python :: 3.10', - 'Programming Language :: Python :: 3.11' - ], - - keywords='pyfileindex', - packages=find_packages(exclude=["*tests*", "*binder*", "*notebooks*"]), - install_requires=[ - 'pandas==2.1.3', - 'scandir==1.10.0' - ], - cmdclass=versioneer.get_cmdclass(), - ) +setup() \ No newline at end of file