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: 4 additions & 4 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# Generated from:
# https://github.com/zopefoundation/meta/tree/master/config/pure-python
# Generated with zope.meta (https://zopemeta.readthedocs.io/) from:
# https://github.com/zopefoundation/meta/tree/master/src/zope/meta/pure-python
#
# EditorConfig Configuration file, for more details see:
# http://EditorConfig.org
# https://EditorConfig.org
# EditorConfig is a convention description, that could be interpreted
# by multiple editors to enforce common coding conventions for specific
# file types
Expand All @@ -12,7 +12,7 @@
root = true


[*] # For All Files
[*]
# Unix-style newlines with a newline ending every file
end_of_line = lf
insert_final_newline = true
Expand Down
10 changes: 5 additions & 5 deletions .github/workflows/pre-commit.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Generated from:
# https://github.com/zopefoundation/meta/tree/master/config/pure-python
# Generated with zope.meta (https://zopemeta.readthedocs.io/) from:
# https://github.com/zopefoundation/meta/tree/master/src/zope/meta/pure-python
name: pre-commit

on:
Expand All @@ -21,10 +21,10 @@ jobs:
name: linting
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- uses: actions/checkout@v6
- uses: actions/setup-python@v6
with:
python-version: 3.x
python-version: '3.13'
- uses: pre-commit/action@2c7b3805fd2a0fd8c1884dcaebf91fc102a13ecd #v3.0.1
with:
extra_args: --all-files --show-diff-on-failure
Expand Down
19 changes: 8 additions & 11 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Generated from:
# https://github.com/zopefoundation/meta/tree/master/config/pure-python
# Generated with zope.meta (https://zopemeta.readthedocs.io/) from:
# https://github.com/zopefoundation/meta/tree/master/src/zope/meta/pure-python
name: tests

on:
Expand All @@ -24,36 +24,33 @@ jobs:
config:
# [Python version, tox env]
- ["3.11", "release-check"]
- ["3.9", "py39"]
- ["3.10", "py310"]
- ["3.11", "py311"]
- ["3.12", "py312"]
- ["3.13", "py313"]
- ["pypy-3.10", "pypy3"]
- ["3.14", "py314"]
- ["pypy-3.11", "pypy3"]
- ["3.11", "coverage"]

runs-on: ${{ matrix.os[1] }}
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name
name: ${{ matrix.config[1] }}
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
with:
persist-credentials: false
- name: Install uv + caching
uses: astral-sh/setup-uv@v6
# astral/setup-uv@7.3.0
uses: astral-sh/setup-uv@eac588ad8def6316056a12d4907a9d4d84ff7a3b
with:
enable-cache: true
cache-dependency-glob: |
setup.*
tox.ini
python-version: ${{ matrix.matrix.config[0] }}
python-version: ${{ matrix.config[0] }}
github-token: ${{ secrets.GITHUB_TOKEN }}
- name: Test
if: ${{ !startsWith(runner.os, 'Mac') }}
run: uvx --with tox-uv tox -e ${{ matrix.config[1] }}
- name: Test (macOS)
if: ${{ startsWith(runner.os, 'Mac') }}
run: uvx --with tox-uv tox -e ${{ matrix.config[1] }}-universal2
- name: Coverage
if: matrix.config[1] == 'coverage'
run: |
Expand Down
5 changes: 3 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Generated from:
# https://github.com/zopefoundation/meta/tree/master/config/pure-python
# Generated with zope.meta (https://zopemeta.readthedocs.io/) from:
# https://github.com/zopefoundation/meta/tree/master/src/zope/meta/pure-python
*.dll
*.egg-info/
*.profraw
Expand Down Expand Up @@ -28,5 +28,6 @@ lib64
log/
parts/
pyvenv.cfg
share/
testing.log
var/
7 changes: 4 additions & 3 deletions .meta.toml
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# Generated from:
# https://github.com/zopefoundation/meta/tree/master/config/pure-python
# Generated with zope.meta (https://zopemeta.readthedocs.io/) from:
# https://github.com/zopefoundation/meta/tree/master/src/zope/meta/pure-python
[meta]
template = "pure-python"
commit-id = "7d59ab0f"
commit-id = "adfc1a22"

[python]
with-pypy = true
Expand All @@ -11,6 +11,7 @@ with-windows = false
with-future-python = false
with-macos = false
with-docs = false
with-free-threaded-python = false

[coverage]
fail-under = 95
Expand Down
12 changes: 6 additions & 6 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
# Generated from:
# https://github.com/zopefoundation/meta/tree/master/config/pure-python
# Generated with zope.meta (https://zopemeta.readthedocs.io/) from:
# https://github.com/zopefoundation/meta/tree/master/src/zope/meta/pure-python
minimum_pre_commit_version: '3.6'
repos:
- repo: https://github.com/pycqa/isort
rev: "6.0.1"
rev: "7.0.0"
hooks:
- id: isort
- repo: https://github.com/hhatto/autopep8
Expand All @@ -12,16 +12,16 @@ repos:
- id: autopep8
args: [--in-place, --aggressive, --aggressive]
- repo: https://github.com/asottile/pyupgrade
rev: v3.19.1
rev: v3.21.2
hooks:
- id: pyupgrade
args: [--py39-plus]
args: [--py310-plus]
- repo: https://github.com/isidentical/teyit
rev: 0.4.3
hooks:
- id: teyit
- repo: https://github.com/PyCQA/flake8
rev: "7.2.0"
rev: "7.3.0"
hooks:
- id: flake8
additional_dependencies:
Expand Down
6 changes: 5 additions & 1 deletion CHANGES.rst
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,11 @@ Changelog
5.1 (unreleased)
----------------

- Nothing changed yet.
- Move package metadata from setup.py to pyproject.toml.

- Add support for Python 3.14.

- Drop support for Python 3.9.


5.0 (2025-06-18)
Expand Down
4 changes: 2 additions & 2 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<!--
Generated from:
https://github.com/zopefoundation/meta/tree/master/config/pure-python
Generated with zope.meta (https://zopemeta.readthedocs.io/) from:
https://github.com/zopefoundation/meta/tree/master/src/zope/meta/pure-python
-->
# Contributing to zopefoundation projects

Expand Down
4 changes: 2 additions & 2 deletions MANIFEST.in
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Generated from:
# https://github.com/zopefoundation/meta/tree/master/config/pure-python
# Generated with zope.meta (https://zopemeta.readthedocs.io/) from:
# https://github.com/zopefoundation/meta/tree/master/src/zope/meta/pure-python
include *.md
include *.rst
include *.txt
Expand Down
80 changes: 76 additions & 4 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,13 +1,81 @@
# Generated from:
# https://github.com/zopefoundation/meta/tree/master/config/pure-python

# Generated with zope.meta (https://zopemeta.readthedocs.io/) from:
# https://github.com/zopefoundation/meta/tree/master/src/zope/meta/pure-python
[build-system]
requires = [
"setuptools == 78.1.1",
"setuptools >= 78.1.1,< 81",
"wheel",
]
build-backend = "setuptools.build_meta"


[project]
name = "grokcore.layout"
version = "5.1.dev0"
description = "A layout component package for Grok."
license = "ZPL-2.1"
classifiers = [
"Development Status :: 6 - Mature",
"Environment :: Web Environment",
"Intended Audience :: Developers",
"Programming Language :: Python",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
"Programming Language :: Python :: Implementation",
"Programming Language :: Python :: Implementation :: CPython",
"Programming Language :: Python :: Implementation :: PyPy",
"Framework :: Zope :: 3",
]
dynamic = ["readme"]
requires-python = ">=3.10"
authors = [
{name = "Grok Team",email = "zope-dev@zope.dev"},
]
maintainers = [
{name = "Plone Foundation and contributors",email = "zope-dev@zope.dev"},
]
dependencies = [
"grokcore.component >= 2.5",
"grokcore.security >= 1.6",
"grokcore.view >= 3.0.3",
"martian >= 0.14",
"zope.authentication",
"zope.component >= 3.9.1",
"zope.errorview",
"zope.interface",
"zope.publisher",
]
keywords = [
"grok",
"layout",
"zope3",
"pagelet",
"theming",
]

[project.optional-dependencies]
test = [
"zope.annotation",
"zope.app.wsgi[test]",
"zope.container",
"zope.login",
"zope.schema",
"zope.security",
"zope.session",
"zope.site",
"zope.testbrowser",
"zope.testing",
"zope.traversing",
]

[project.urls]
Source = "https://github.com/zopefoundation/grokcore.layout"
Issues = "https://github.com/zopefoundation/grokcore.layout/issues"
Changelog = "https://raw.githubusercontent.com/zopefoundation/grokcore.layout/master/CHANGES.rst"

[tool.coverage.run]
branch = true
source = ["grokcore.layout"]
Expand All @@ -30,3 +98,7 @@ exclude_lines = [

[tool.coverage.html]
directory = "parts/htmlcov"

[tool.setuptools.dynamic]
readme = {file = ["README.rst", "CHANGES.rst"]}

4 changes: 2 additions & 2 deletions setup.cfg
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Generated from:
# https://github.com/zopefoundation/meta/tree/master/config/pure-python
# Generated with zope.meta (https://zopemeta.readthedocs.io/) from:
# https://github.com/zopefoundation/meta/tree/master/src/zope/meta/pure-python

[flake8]
doctests = 1
Expand Down
72 changes: 2 additions & 70 deletions setup.py
Original file line number Diff line number Diff line change
@@ -1,73 +1,5 @@
import os

from setuptools import setup


readme_filename = os.path.join('src', 'grokcore', 'layout', 'README.rst')


long_description = (
open(readme_filename).read() +
'\n\n' +
open('CHANGES.rst').read())


test_requires = [
'zope.annotation',
'zope.app.wsgi[test]',
'zope.container',
'zope.login',
'zope.schema',
'zope.security',
'zope.session',
'zope.site',
'zope.testbrowser',
'zope.testing',
'zope.traversing',
]


setup(
name='grokcore.layout',
version='5.1.dev0',
description="A layout component package for Grok.",
long_description=long_description,
classifiers=[
'Development Status :: 6 - Mature',
'Environment :: Web Environment',
'Intended Audience :: Developers',
'License :: OSI Approved :: Zope Public License',
'Programming Language :: Python',
'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.9',
'Programming Language :: Python :: 3.10',
'Programming Language :: Python :: 3.11',
'Programming Language :: Python :: 3.12',
'Programming Language :: Python :: 3.13',
'Programming Language :: Python :: Implementation',
'Programming Language :: Python :: Implementation :: CPython',
'Programming Language :: Python :: Implementation :: PyPy',
'Framework :: Zope :: 3',
],
keywords='grok layout zope3 pagelet theming',
author='Grok Team',
author_email='zope-dev@zope.dev',
url='https://github.com/zopefoundation/grokcore.layout',
license='ZPL-2.1',
include_package_data=True,
zip_safe=False,
python_requires='>=3.9',
extras_require={'test': test_requires},
install_requires=[
'grokcore.component >= 2.5',
'grokcore.security >= 1.6',
'grokcore.view >= 3.0.3',
'martian >= 0.14',
'setuptools',
'zope.authentication',
'zope.component >= 3.9.1',
'zope.errorview',
'zope.interface',
'zope.publisher',
],
)
# See pyproject.toml for package metadata
setup()
9 changes: 5 additions & 4 deletions src/grokcore/layout/tests/test_functional.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
import doctest
import importlib.resources
import unittest

from pkg_resources import resource_listdir

import zope.app.wsgi.testlayer
import zope.testbrowser.wsgi

Expand All @@ -19,7 +18,8 @@ class Layer(


def suiteFromPackage(name):
files = resource_listdir(__name__, f'{name}')
parent = __name__.rsplit('.', 1)[0]
files = importlib.resources.files(parent).joinpath(name).iterdir()
suite = unittest.TestSuite()
getRootFolder = layer.getRootFolder
globs = dict(
Expand All @@ -31,7 +31,8 @@ def suiteFromPackage(name):
doctest.REPORT_NDIFF
)

for filename in files:
for filepath in files:
filename = filepath.name
if filename == '__init__.py':
continue

Expand Down
Loading
Loading