Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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