Skip to content

Commit

Permalink
Merge pull request #117 from templateflow/maint/pep517-update
Browse files Browse the repository at this point in the history
MAINT: Finalize migration of package build to PEP517/8
  • Loading branch information
oesteban authored Mar 15, 2024
2 parents 5a17078 + 60c1430 commit 435037d
Show file tree
Hide file tree
Showing 13 changed files with 225 additions and 129 deletions.
8 changes: 7 additions & 1 deletion .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,11 @@ jobs:
- checkout:
path: /tmp/src/templateflow

- run:
name: Generate requirements.txt
command: |
python /tmp/src/templateflow/.maint/update_requirements.py
- restore_cache:
keys:
- deps-v10-{{ checksum "/tmp/src/templateflow/requirements.txt"}}-{{ epoch }}
Expand Down Expand Up @@ -168,7 +173,8 @@ jobs:
name: Build only this commit
command: |
export PATH="$HOME/.conda/bin:$PATH"
python setup.py --version
python -m pip install "setuptools_scm>=8"
python -m setuptools_scm
make -C docs SPHINXOPTS="-W" BUILDDIR="$HOME/html" CURBRANCH="${CIRCLE_TAG}" html
- store_artifacts:
path: ~/html
Expand Down
8 changes: 8 additions & 0 deletions .github/workflows/pythonpackage.yml
Original file line number Diff line number Diff line change
Expand Up @@ -131,3 +131,11 @@ jobs:
find ${TEMPLATEFLOW_HOME} >> /tmp/.install-2.txt
diff /tmp/.install.txt /tmp/.install-2.txt
exit $?
flake8:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v4
- run: pipx run flake8-pyproject templateflow/
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
# setuptools_scm
templateflow/_version.py

# circleci hash checking
requirements.txt
min-requirements.txt

# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
Expand Down
File renamed without changes.
45 changes: 45 additions & 0 deletions .maint/update_requirements.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
#!/usr/bin/env python3
from copy import copy
from pathlib import Path

from packaging.requirements import Requirement, SpecifierSet

try:
from tomllib import loads # Python +3.11
except ImportError:
from pip._vendor.tomli import loads

repo_root = Path(__file__).parent.parent
pyproject = repo_root / 'pyproject.toml'
reqs = repo_root / 'requirements.txt'
min_reqs = repo_root / 'min-requirements.txt'

requirements = [
Requirement(req)
for req in loads(pyproject.read_text())['project']['dependencies']
]

script_name = Path(__file__).relative_to(repo_root)


def to_min(req):
if req.specifier:
req = copy(req)
try:
min_spec = [spec for spec in req.specifier if spec.operator in ('>=', '~=')][0]
except IndexError:
return req
min_spec._spec = ('==',) + min_spec._spec[1:]
req.specifier = SpecifierSet(str(min_spec))
return req


lines = [f'# Auto-generated by {script_name}', '']

# Write requirements
lines[1:-1] = [str(req) for req in requirements]
reqs.write_text('\n'.join(lines))

# Write minimum requirements
lines[1:-1] = [str(to_min(req)) for req in requirements]
min_reqs.write_text('\n'.join(lines))
3 changes: 2 additions & 1 deletion MANIFEST.in
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,6 @@ recursive-exclude docs/ *

recursive-exclude .circleci/ *
recursive-exclude .github/ *
recursive-exclude .maint/ *

exclude .gitignore .gitattributes .git_archival.txt .travis.yml .zenodo.json codecov.yml update_changes.sh
exclude .gitignore .gitattributes .git_archival.txt .travis.yml .zenodo.json codecov.yml
160 changes: 154 additions & 6 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,16 +1,164 @@
[build-system]
requires = [
"setuptools >= 45",
"setuptools_scm >= 6.2",
"nipreps-versions",
"setuptools>=64",
"setuptools_scm>=8",
]
build-backend = "setuptools.build_meta"

[tool.setuptools_scm]
write_to = "templateflow/_version.py"
write_to_template = """\
version_file = "templateflow/_version.py"
version_file_template = """\
\"\"\"Version file, automatically generated by setuptools_scm.\"\"\"
__version__ = "{version}"
"""
fallback_version = "0.0"
version_scheme = "nipreps-calver"
# version_scheme = "nipreps-calver"

[project]
name = "templateflow"
description = "TemplateFlow Python Client - TemplateFlow is the Zone of neuroimaging templates."
readme = "README.rst"
authors = [{name = "The NiPreps Developers", email = "nipreps@gmail.com"}]
classifiers = [
"Development Status :: 3 - Alpha",
"Intended Audience :: Science/Research",
"Topic :: Scientific/Engineering :: Image Recognition",
"License :: OSI Approved :: Apache Software License",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
]
license = {file = "LICENSE"}
requires-python = ">=3.8"
dependencies = [
"pybids >= 0.15.2",
"importlib_resources >= 5.7; python_version < '3.11'",
"requests",
"tqdm",
]
dynamic = ["version"]

[project.urls]
Archive = "https://github.com/templateflow/templateflow"
"Bug Tracker" = "https://github.com/templateflow/python-client/issues"
Home = "https://www.templateflow.org"
Documentation = "https://www.templateflow.org/python-client/"
"Source Code" = "https://github.com/templateflow/python-client"

[project.optional-dependencies]
test = [
"pytest",
"pytest-xdist",
"pytest-cov == 2.5.1",
"coverage",
]
datalad = [
"datalad ~= 0.12.0"
]
doc = [
"nbsphinx",
"packaging",
"pydot>=1.2.3",
"pydotplus",
"sphinx-argparse",
"sphinx ~= 4.0",
"sphinx_rtd_theme >= 0.4.3",
"sphinxcontrib-apidoc",
"sphinx_multiversion",
]
# Aliases
tests = ["templateflow[test]"]
docs = ["templateflow[doc]"]
all = ["templateflow[datalad,doc,test]"]

#
# Developer tool configurations
#

[tool.black]
line-length = 99
skip-string-normalization = true

[tool.isort]
profile = 'black'

[tool.flake8]
max-line-length = "99"
doctests = "False"
exclude = "*build/"
ignore = ["W503", "E203"]
per-file-ignores = [
"**/__init__.py : F401",
"docs/conf.py : E265",
]

[tool.pytest.ini_options]
norecursedirs = [".git"]
addopts = "-svx --doctest-modules"
doctest_optionflags = "ALLOW_UNICODE NORMALIZE_WHITESPACE ELLIPSIS"
env = "PYTHONHASHSEED=0"
filterwarnings = ["ignore::DeprecationWarning"]
junit_family = "xunit2"

[tool.coverage.run]
branch = true
concurrency = 'multiprocessing'
omit = [
'*/tests/*',
'*/conftest.py',
'templateflow/_version.py'
]

[tool.coverage.report]
# Regexes for lines to exclude from consideration
exclude_lines = [
'raise NotImplementedError',
'warnings\.warn',
]

[tool.ruff]
line-length = 99

[tool.ruff.lint]
extend-select = [
"F",
"E",
"W",
"I",
"UP",
"YTT",
"S",
"BLE",
"B",
"A",
# "CPY",
"C4",
"DTZ",
"T10",
# "EM",
"EXE",
"FA",
"ISC",
"ICN",
"PT",
"Q",
]
extend-ignore = [
"S311", # We are not using random for cryptographic purposes
"ISC001",
"S603",
]

[tool.ruff.lint.flake8-quotes]
inline-quotes = "single"

[tool.ruff.lint.extend-per-file-ignores]
"*/test_*.py" = ["S101"]
"fmriprep/utils/debug.py" = ["A002", "T100"]
"docs/conf.py" = ["A001"]
"docs/sphinxext/github_link.py" = ["BLE001"]

[tool.ruff.format]
quote-style = "single"
8 changes: 0 additions & 8 deletions requirements.txt

This file was deleted.

103 changes: 0 additions & 103 deletions setup.cfg

This file was deleted.

7 changes: 0 additions & 7 deletions setup.py

This file was deleted.

Loading

0 comments on commit 435037d

Please sign in to comment.