From c2402f405fb1453e0ee78a07fca24539d66e586f Mon Sep 17 00:00:00 2001 From: David Douard <david.douard@sdfa3.org> Date: Fri, 24 Nov 2023 18:15:13 +0100 Subject: [PATCH] Migrate to copier-based swh-py-template --- .copier-answers.yml | 11 ++++ .gitignore | 16 +++--- .pre-commit-config.yaml | 23 +++++---- AUTHORS | 3 ++ MANIFEST.in | 8 --- docs/Makefile | 2 +- mypy.ini | 8 +-- pyproject.toml | 86 ++++++++++++++++++++++++++++++ setup.py | 112 ---------------------------------------- swh/__init__.py | 3 -- tox.ini | 51 +++++++----------- 11 files changed, 144 insertions(+), 179 deletions(-) create mode 100644 .copier-answers.yml create mode 100644 AUTHORS delete mode 100644 MANIFEST.in delete mode 100755 setup.py delete mode 100644 swh/__init__.py diff --git a/.copier-answers.yml b/.copier-answers.yml new file mode 100644 index 00000000..3c7bb49f --- /dev/null +++ b/.copier-answers.yml @@ -0,0 +1,11 @@ +# Changes here will be overwritten by Copier +_commit: v0.1.5 +_src_path: https://gitlab.softwareheritage.org/swh/devel/swh-py-template.git +description: Software Heritage lister +distribution_name: swh-lister +have_cli: true +have_workers: true +package_root: swh/lister +project_name: swh.lister +python_minimal_version: '3.7' +readme_format: rst diff --git a/.gitignore b/.gitignore index 999e8688..035b1395 100644 --- a/.gitignore +++ b/.gitignore @@ -1,14 +1,12 @@ +*.egg-info/ *.pyc -*.sw? -*~ -/.coverage -/.coverage.* +.coverage .eggs/ +.hypothesis +.mypy_cache +.tox __pycache__ build/ dist/ -*.egg-info -version.txt -.tox/ -.mypy_cache/ -/.hypothesis/ +docs/README.rst +docs/README.md diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 63607d6f..22f277c1 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,13 +1,23 @@ repos: - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.3.0 + rev: v4.4.0 hooks: - id: trailing-whitespace - id: check-json - id: check-yaml + - repo: https://github.com/python/black + rev: 23.1.0 + hooks: + - id: black + + - repo: https://github.com/PyCQA/isort + rev: 5.12.0 + hooks: + - id: isort + - repo: https://github.com/pycqa/flake8 - rev: 5.0.4 + rev: 6.0.0 hooks: - id: flake8 additional_dependencies: [flake8-bugbear==22.9.23] @@ -31,12 +41,3 @@ repos: language: system types: [python] - - repo: https://github.com/PyCQA/isort - rev: 5.11.5 - hooks: - - id: isort - - - repo: https://github.com/python/black - rev: 22.10.0 - hooks: - - id: black diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 00000000..d5bc532d --- /dev/null +++ b/AUTHORS @@ -0,0 +1,3 @@ +Copyright (C) 2019-2023 The Software Heritage developers + +See http://www.softwareheritage.org/ for more information. diff --git a/MANIFEST.in b/MANIFEST.in deleted file mode 100644 index 2f90a77b..00000000 --- a/MANIFEST.in +++ /dev/null @@ -1,8 +0,0 @@ -include Makefile -include README -include requirements*.txt -include version.txt -include conftest.py -include swh/lister/cran/list_all_packages.R -recursive-include swh/lister/*/tests/data/ * -recursive-include swh py.typed diff --git a/docs/Makefile b/docs/Makefile index c30c50ab..85f23e85 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -1 +1 @@ -include ../../swh-docs/Makefile.sphinx +include swh-docs/Makefile.sphinx diff --git a/mypy.ini b/mypy.ini index baa6ce50..da4d2d88 100644 --- a/mypy.ini +++ b/mypy.ini @@ -1,6 +1,9 @@ [mypy] namespace_packages = True warn_unused_ignores = True +explicit_package_bases = True +# ^ Needed for mypy to detect py.typed from swh packages installed +# in editable mode # 3rd party libraries without stubs (yet) @@ -34,9 +37,6 @@ ignore_missing_imports = True [mypy-pyreadr.*] ignore_missing_imports = True -[mypy-pytest.*] -ignore_missing_imports = True - [mypy-pytest_postgresql.*] ignore_missing_imports = True @@ -63,3 +63,5 @@ ignore_missing_imports = True [mypy-defusedxml.*] ignore_missing_imports = True +# [mypy-add_your_lib_here.*] +# ignore_missing_imports = True diff --git a/pyproject.toml b/pyproject.toml index 69b8f4dd..dd1b0c21 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,3 +1,89 @@ +[project] +name = "swh.lister" +authors = [ + {name="Software Heritage developers", email="swh-devel@inria.fr"}, +] + +description = "Software Heritage lister" +readme = {file = "README.rst", content-type = "text/x-rst"} +requires-python = ">=3.7" +classifiers = [ + "Programming Language :: Python :: 3", + "Intended Audience :: Developers", + "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", + "Operating System :: OS Independent", + "Development Status :: 5 - Production/Stable", +] +dynamic = ["version", "dependencies", "optional-dependencies"] + +[tool.setuptools.packages.find] +include = ["swh.*"] + +[tool.setuptools.dynamic] +dependencies = {file = ["requirements.txt", "requirements-swh.txt"]} + +[tool.setuptools.dynamic.optional-dependencies] +testing = {file = ["requirements-test.txt"]} + +[project.entry-points."swh.cli.subcommands"] +"swh.lister" = "swh.lister.cli" + +[project.entry-points."swh.workers"] +"swh.lister.arch" = "swh.lister.arch:register" +"swh.lister.aur" = "swh.lister.aur:register" +"swh.lister.bitbucket" = "swh.lister.bitbucket:register" +"swh.lister.bower" = "swh.lister.bower:register" +"swh.lister.cgit" = "swh.lister.cgit:register" +"swh.lister.conda" = "swh.lister.conda:register" +"swh.lister.cpan" = "swh.lister.cpan:register" +"swh.lister.cran" = "swh.lister.cran:register" +"swh.lister.crates" = "swh.lister.crates:register" +"swh.lister.debian" = "swh.lister.debian:register" +"swh.lister.dlang" = "swh.lister.dlang:register" +"swh.lister.gitea" = "swh.lister.gitea:register" +"swh.lister.github" = "swh.lister.github:register" +"swh.lister.gitiles" = "swh.lister.gitiles:register" +"swh.lister.gitlab" = "swh.lister.gitlab:register" +"swh.lister.gitweb" = "swh.lister.gitweb:register" +"swh.lister.gnu" = "swh.lister.gnu:register" +"swh.lister.golang" = "swh.lister.golang:register" +"swh.lister.gogs" = "swh.lister.gogs:register" +"swh.lister.hackage" = "swh.lister.hackage:register" +"swh.lister.hex" = "swh.lister.hex:register" +"swh.lister.julia" = "swh.lister.julia:register" +"swh.lister.launchpad" = "swh.lister.launchpad:register" +"swh.lister.nixguix" = "swh.lister.nixguix:register" +"swh.lister.npm" = "swh.lister.npm:register" +"swh.lister.nuget" = "swh.lister.nuget:register" +"swh.lister.opam" = "swh.lister.opam:register" +"swh.lister.packagist" = "swh.lister.packagist:register" +"swh.lister.pagure" = "swh.lister.pagure:register" +"swh.lister.phabricator" = "swh.lister.phabricator:register" +"swh.lister.pubdev" = "swh.lister.pubdev:register" +"swh.lister.puppet" = "swh.lister.puppet:register" +"swh.lister.pypi" = "swh.lister.pypi:register" +"swh.lister.rpm" = "swh.lister.rpm:register" +"swh.lister.rubygems" = "swh.lister.rubygems:register" +"swh.lister.sourceforge" = "swh.lister.sourceforge:register" +"swh.lister.stagit" = "swh.lister.stagit:register" +"swh.lister.tuleap" = "swh.lister.tuleap:register" +"swh.lister.maven" = "swh.lister.maven:register" +"swh.lister.bioconductor" = "swh.lister.bioconductor:register" + +[project.urls] +"Homepage" = "https://gitlab.softwareheritage.org/swh/devel/swh-lister" +"Bug Reports" = "https://gitlab.softwareheritage.org/swh/devel/swh-lister/-/issues" +"Funding" = "https://www.softwareheritage.org/donate" +"Documentation" = "https://docs.softwareheritage.org/devel/swh-lister/" +"Source" = "https://gitlab.softwareheritage.org/swh/devel/swh-lister.git" + +[build-system] +requires = ["setuptools", "setuptools-scm"] +build-backend = "setuptools.build_meta" + +[tool.setuptools_scm] +fallback_version = "0.0.1" + [tool.black] target-version = ['py37'] diff --git a/setup.py b/setup.py deleted file mode 100755 index cb4b008f..00000000 --- a/setup.py +++ /dev/null @@ -1,112 +0,0 @@ -#!/usr/bin/env python3 -# Copyright (C) 2015-2023 The Software Heritage developers -# See the AUTHORS file at the top-level directory of this distribution -# License: GNU General Public License version 3, or any later version -# See top-level LICENSE file for more information - -from io import open -from os import path - -from setuptools import find_packages, setup - -here = path.abspath(path.dirname(__file__)) - -# Get the long description from the README file -with open(path.join(here, "README.rst"), encoding="utf-8") as f: - long_description = f.read() - - -def parse_requirements(name=None): - if name: - reqf = "requirements-%s.txt" % name - else: - reqf = "requirements.txt" - - requirements = [] - if not path.exists(reqf): - return requirements - - with open(reqf) as f: - for line in f.readlines(): - line = line.strip() - if not line or line.startswith("#"): - continue - requirements.append(line) - return requirements - - -setup( - name="swh.lister", - description="Software Heritage lister", - long_description=long_description, - long_description_content_type="text/x-rst", - python_requires=">=3.7", - author="Software Heritage developers", - author_email="swh-devel@inria.fr", - url="https://forge.softwareheritage.org/diffusion/DLSGH/", - packages=find_packages(), - install_requires=parse_requirements() + parse_requirements("swh"), - tests_require=parse_requirements("test"), - setup_requires=["setuptools-scm"], - extras_require={"testing": parse_requirements("test")}, - use_scm_version=True, - include_package_data=True, - entry_points=""" - [swh.cli.subcommands] - lister=swh.lister.cli - [swh.workers] - lister.arch=swh.lister.arch:register - lister.aur=swh.lister.aur:register - lister.bitbucket=swh.lister.bitbucket:register - lister.bower=swh.lister.bower:register - lister.cgit=swh.lister.cgit:register - lister.conda=swh.lister.conda:register - lister.cpan=swh.lister.cpan:register - lister.cran=swh.lister.cran:register - lister.crates=swh.lister.crates:register - lister.debian=swh.lister.debian:register - lister.dlang=swh.lister.dlang:register - lister.gitea=swh.lister.gitea:register - lister.github=swh.lister.github:register - lister.gitiles=swh.lister.gitiles:register - lister.gitlab=swh.lister.gitlab:register - lister.gitweb=swh.lister.gitweb:register - lister.gnu=swh.lister.gnu:register - lister.golang=swh.lister.golang:register - lister.gogs=swh.lister.gogs:register - lister.hackage=swh.lister.hackage:register - lister.hex=swh.lister.hex:register - lister.julia=swh.lister.julia:register - lister.launchpad=swh.lister.launchpad:register - lister.nixguix=swh.lister.nixguix:register - lister.npm=swh.lister.npm:register - lister.nuget=swh.lister.nuget:register - lister.opam=swh.lister.opam:register - lister.packagist=swh.lister.packagist:register - lister.pagure=swh.lister.pagure:register - lister.phabricator=swh.lister.phabricator:register - lister.pubdev=swh.lister.pubdev:register - lister.puppet=swh.lister.puppet:register - lister.pypi=swh.lister.pypi:register - lister.rpm=swh.lister.rpm:register - lister.rubygems=swh.lister.rubygems:register - lister.sourceforge=swh.lister.sourceforge:register - lister.stagit=swh.lister.stagit:register - lister.tuleap=swh.lister.tuleap:register - lister.maven=swh.lister.maven:register - lister.bioconductor=swh.lister.bioconductor:register - """, - classifiers=[ - "Programming Language :: Python :: 3", - "Intended Audience :: Developers", - "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", - "Operating System :: OS Independent", - "Development Status :: 5 - Production/Stable", - ], - project_urls={ - "Bug Reports": "https://forge.softwareheritage.org/maniphest", - "Funding": "https://www.softwareheritage.org/donate", - "Source": "https://forge.softwareheritage.org/source/swh-lister", - "Documentation": "https://docs.softwareheritage.org/devel/swh-lister/", - }, -) diff --git a/swh/__init__.py b/swh/__init__.py deleted file mode 100644 index b36383a6..00000000 --- a/swh/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -from pkgutil import extend_path - -__path__ = extend_path(__path__, __name__) diff --git a/tox.ini b/tox.ini index 83ee868a..0df11b76 100644 --- a/tox.ini +++ b/tox.ini @@ -1,22 +1,27 @@ [tox] -requires = - tox>4 -envlist=black,flake8,mypy,py3 +minversion = 4 +envlist = + black + flake8 + mypy + py3 [testenv] extras = testing deps = - swh.core[http] >= 0.0.61 - swh.scheduler[testing] >= 0.5.0 - amqp != 5.0.4 pytest-cov - dev: ipdb commands = - pytest \ - !dev: --cov={envsitepackagesdir}/swh/lister/ --cov-branch \ - --doctest-modules \ - {envsitepackagesdir}/swh/lister/ {posargs} + pytest --doctest-modules \ + --import-mode importlib \ + --rootdir {envsitepackagesdir} \ + --cov={envsitepackagesdir}/swh/lister \ + --cov-branch \ + {envsitepackagesdir}/swh/lister \ + {posargs} +# --rootdir and --import-mode are required to make tests that depends +# on the test file to be a proper submodule of the swh namespace after +# migration to PEP420 (implicit namespace). [testenv:black] skip_install = true @@ -47,32 +52,14 @@ commands = # breaking doc build [testenv:sphinx] allowlist_externals = make -usedevelop = true extras = testing deps = - # fetch and install swh-docs in develop mode - -e git+https://gitlab.softwareheritage.org/swh/devel/swh-docs.git\#egg=swh.docs + # fetch and install swh-docs + git+https://gitlab.softwareheritage.org/swh/devel/swh-docs.git\#egg=swh.docs setenv = SWH_PACKAGE_DOC_TOX_BUILD = 1 # turn warnings into errors SPHINXOPTS = -W commands = - make -I ../.tox/sphinx/src/swh-docs/swh/ -C docs - -# build documentation only inside swh-environment using local state -# of swh-docs package -[testenv:sphinx-dev] -allowlist_externals = make -usedevelop = true -extras = - testing -deps = - # install swh-docs in develop mode - -e ../swh-docs -setenv = - SWH_PACKAGE_DOC_TOX_BUILD = 1 - # turn warnings into errors - SPHINXOPTS = -W -commands = - make -I ../.tox/sphinx-dev/src/swh-docs/swh/ -C docs + make -I {env_dir}/share/ -C docs -- GitLab