Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add python 3.12 support #2171

Merged
merged 4 commits into from
Apr 18, 2024
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.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
260 changes: 177 additions & 83 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -67,28 +67,51 @@ common: &common
orbs:
win: circleci/windows@5.0.0

windows_steps: &windows_steps
executor:
name: win/default
shell: bash.exe
working_directory: C:\Users\circleci\project\py-evm
steps:
- checkout
- restore_cache:
keys:
- cache-v1-{{ arch }}-{{ .Environment.CIRCLE_JOB }}-{{ checksum "setup.py" }}-{{ checksum "tox.ini" }}
- run:
name: install dependencies
command: |
python -m pip install --upgrade pip
python -m pip install tox
- run:
name: run tox
command: python -m tox run -r
- save_cache:
paths:
- .tox
key: cache-v1-{{ arch }}-{{ .Environment.CIRCLE_JOB }}-{{ checksum "setup.py" }}-{{ checksum "tox.ini" }}
windows-wheel-steps:
windows-wheel-setup: &windows-wheel-setup
executor:
name: win/default
shell: bash.exe
working_directory: C:\Users\circleci\project\py-evm
environment:
TOXENV: windows-wheel
restore-cache-step: &restore-cache-step
restore_cache:
keys:
- cache-v1-{{ arch }}-{{ .Environment.CIRCLE_JOB }}-{{ checksum "setup.py" }}-{{ checksum "tox.ini" }}
install-pyenv-step: &install-pyenv-step
run:
name: install pyenv
command: |
pip install pyenv-win --target $HOME/.pyenv
echo 'export PYENV="$HOME/.pyenv/pyenv-win/"' >> $BASH_ENV
echo 'export PYENV_ROOT="$HOME/.pyenv/pyenv-win/"' >> $BASH_ENV
echo 'export PYENV_USERPROFILE="$HOME/.pyenv/pyenv-win/"' >> $BASH_ENV
echo 'export PATH="$PATH:$HOME/.pyenv/pyenv-win/bin"' >> $BASH_ENV
echo 'export PATH="$PATH:$HOME/.pyenv/pyenv-win/shims"' >> $BASH_ENV
source $BASH_ENV
pyenv update
install-latest-python-step: &install-latest-python-step
run:
name: install latest python version and tox
command: |
LATEST_VERSION=$(pyenv install --list | grep -E "${MINOR_VERSION}\.[0-9]+$" | tail -1)
echo "installing python version $LATEST_VERSION"
pyenv install $LATEST_VERSION
pyenv global $LATEST_VERSION
python3 -m pip install --upgrade pip
python3 -m pip install tox
run-tox-step: &run-tox-step
run:
name: run tox
command: |
echo 'running tox with' $(python3 --version)
python3 -m tox run -r
save-cache-step: &save-cache-step
save_cache:
paths:
- .tox
key: cache-v1-{{ arch }}-{{ .Environment.CIRCLE_JOB }}-{{ checksum "setup.py" }}-{{ checksum "tox.ini" }}

docs: &docs
docker:
Expand All @@ -108,90 +131,90 @@ jobs:
environment:
TOXENV: docs

py311-native-blockchain-berlin:
py312-native-blockchain-berlin:
<<: *common
docker:
- image: cimg/python:3.11
- image: cimg/python:3.12
environment:
TOXENV: py311-native-blockchain-berlin
py311-native-blockchain-byzantium:
TOXENV: py312-native-blockchain-berlin
py312-native-blockchain-byzantium:
<<: *common
docker:
- image: cimg/python:3.11
- image: cimg/python:3.12
environment:
TOXENV: py311-native-blockchain-byzantium
py311-native-blockchain-cancun:
TOXENV: py312-native-blockchain-byzantium
py312-native-blockchain-cancun:
<<: *common
docker:
- image: cimg/python:3.11
- image: cimg/python:3.12
environment:
TOXENV: py311-native-blockchain-cancun
py311-native-blockchain-constantinople:
TOXENV: py312-native-blockchain-cancun
py312-native-blockchain-constantinople:
<<: *common
docker:
- image: cimg/python:3.11
- image: cimg/python:3.12
environment:
TOXENV: py311-native-blockchain-constantinople
py311-native-blockchain-frontier:
TOXENV: py312-native-blockchain-constantinople
py312-native-blockchain-frontier:
<<: *common
docker:
- image: cimg/python:3.11
- image: cimg/python:3.12
environment:
TOXENV: py311-native-blockchain-frontier
py311-native-blockchain-homestead:
TOXENV: py312-native-blockchain-frontier
py312-native-blockchain-homestead:
<<: *common
docker:
- image: cimg/python:3.11
- image: cimg/python:3.12
environment:
TOXENV: py311-native-blockchain-homestead
py311-native-blockchain-istanbul:
TOXENV: py312-native-blockchain-homestead
py312-native-blockchain-istanbul:
<<: *common
docker:
- image: cimg/python:3.11
- image: cimg/python:3.12
environment:
TOXENV: py311-native-blockchain-istanbul
py311-native-blockchain-london:
TOXENV: py312-native-blockchain-istanbul
py312-native-blockchain-london:
<<: *common
docker:
- image: cimg/python:3.11
- image: cimg/python:3.12
environment:
TOXENV: py311-native-blockchain-london
py311-native-blockchain-paris:
TOXENV: py312-native-blockchain-london
py312-native-blockchain-paris:
<<: *common
docker:
- image: cimg/python:3.11
- image: cimg/python:3.12
environment:
TOXENV: py311-native-blockchain-paris
py311-native-blockchain-petersburg:
TOXENV: py312-native-blockchain-paris
py312-native-blockchain-petersburg:
<<: *common
docker:
- image: cimg/python:3.11
- image: cimg/python:3.12
environment:
TOXENV: py311-native-blockchain-petersburg
py311-native-blockchain-shanghai:
TOXENV: py312-native-blockchain-petersburg
py312-native-blockchain-shanghai:
<<: *common
docker:
- image: cimg/python:3.11
- image: cimg/python:3.12
environment:
TOXENV: py311-native-blockchain-shanghai
py311-native-blockchain-spurious_dragon:
TOXENV: py312-native-blockchain-shanghai
py312-native-blockchain-spurious_dragon:
<<: *common
docker:
- image: cimg/python:3.11
- image: cimg/python:3.12
environment:
TOXENV: py311-native-blockchain-spurious_dragon
py311-native-blockchain-tangerine_whistle:
TOXENV: py312-native-blockchain-spurious_dragon
py312-native-blockchain-tangerine_whistle:
<<: *common
docker:
- image: cimg/python:3.11
- image: cimg/python:3.12
environment:
TOXENV: py311-native-blockchain-tangerine_whistle
py311-native-blockchain-transition:
TOXENV: py312-native-blockchain-tangerine_whistle
py312-native-blockchain-transition:
<<: *common
docker:
- image: cimg/python:3.11
- image: cimg/python:3.12
environment:
TOXENV: py311-native-blockchain-transition
TOXENV: py312-native-blockchain-transition

py38-core:
<<: *common
Expand Down Expand Up @@ -364,56 +387,127 @@ jobs:
- image: cimg/python:3.11
environment:
TOXENV: py311-wheel
py311-wheel-windows:
<<: *windows_steps
environment:
TOXENV: py311-wheel-windows
py311-windows-wheel:
<<: *windows-wheel-setup
steps:
- checkout
- <<: *restore-cache-step
- <<: *install-pyenv-step
- run:
name: set minor version
command: echo "export MINOR_VERSION='3.11'" >> $BASH_ENV
- <<: *install-latest-python-step
- <<: *run-tox-step
- <<: *save-cache-step

py312-core:
<<: *common
docker:
- image: cimg/python:3.12
environment:
TOXENV: py312-core
py312-database:
<<: *common
docker:
- image: cimg/python:3.12
environment:
TOXENV: py312-database
py312-difficulty:
<<: *common
docker:
- image: cimg/python:3.12
environment:
TOXENV: py312-difficulty
py312-lint:
<<: *common
docker:
- image: cimg/python:3.12
environment:
TOXENV: py312-lint
py312-transactions:
<<: *common
docker:
- image: cimg/python:3.12
environment:
TOXENV: py312-transactions
py312-vm:
<<: *common
docker:
- image: cimg/python:3.12
environment:
TOXENV: py312-vm
py312-wheel:
<<: *common
docker:
- image: cimg/python:3.12
environment:
TOXENV: py312-wheel
py312-windows-wheel:
<<: *windows-wheel-setup
steps:
- checkout
- <<: *restore-cache-step
- <<: *install-pyenv-step
- run:
name: set minor version
command: echo "export MINOR_VERSION='3.12'" >> $BASH_ENV
- <<: *install-latest-python-step
- <<: *run-tox-step
- <<: *save-cache-step

workflows:
version: 2
test:
jobs:
- docs
- py311-native-blockchain-berlin
- py311-native-blockchain-byzantium
- py311-native-blockchain-cancun
- py311-native-blockchain-constantinople
- py311-native-blockchain-frontier
- py311-native-blockchain-homestead
- py311-native-blockchain-istanbul
- py311-native-blockchain-london
- py311-native-blockchain-paris
- py311-native-blockchain-petersburg
- py311-native-blockchain-shanghai
- py311-native-blockchain-spurious_dragon
- py311-native-blockchain-tangerine_whistle
- py311-native-blockchain-transition
- py312-native-blockchain-berlin
- py312-native-blockchain-byzantium
- py312-native-blockchain-cancun
- py312-native-blockchain-constantinople
- py312-native-blockchain-frontier
- py312-native-blockchain-homestead
- py312-native-blockchain-istanbul
- py312-native-blockchain-london
- py312-native-blockchain-paris
- py312-native-blockchain-petersburg
- py312-native-blockchain-shanghai
- py312-native-blockchain-spurious_dragon
- py312-native-blockchain-tangerine_whistle
- py312-native-blockchain-transition
- py38-core
- py39-core
- py310-core
- py311-core
- py312-core
- py38-database
- py39-database
- py310-database
- py311-database
- py312-database
- py38-difficulty
- py39-difficulty
- py310-difficulty
- py311-difficulty
- py312-difficulty
- py38-lint
- py39-lint
- py310-lint
- py311-lint
- py312-lint
- py38-transactions
- py39-transactions
- py310-transactions
- py311-transactions
- py312-transactions
- py38-vm
- py39-vm
- py310-vm
- py311-vm
- py312-vm
- py38-wheel
- py39-wheel
- py310-wheel
- py311-wheel
- py311-wheel-windows
- py312-wheel
- py311-windows-wheel
- py312-windows-wheel
2 changes: 1 addition & 1 deletion eth/validation.py
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,7 @@ def validate_unique(values: Iterable[Any], title: str = "Value") -> None:
)
raise ValidationError(
f"{title} does not contain unique items. Duplicates: "
f"{', '.join((str(value) for value in duplicates))}"
f"{', '.join(str(value) for value in duplicates)}"
)


Expand Down
1 change: 1 addition & 0 deletions newsfragments/2171.feature.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Add support for python 3.12.
3 changes: 2 additions & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@
],
"test": [
"factory-boy>=3.0.0",
"hypothesis>=5,<6",
"hypothesis>=6,<7",
"pytest>=7.0.0",
"pytest-asyncio>=0.20.0",
"pytest-cov>=4.0.0",
Expand Down Expand Up @@ -99,5 +99,6 @@
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
],
)
3 changes: 3 additions & 0 deletions tests/database/test_eth1_chaindb.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@
keccak,
)
from hypothesis import (
HealthCheck,
given,
settings,
strategies as st,
)
import pytest
Expand Down Expand Up @@ -284,6 +286,7 @@ def test_chaindb_persist_header(chaindb, header):


@given(seed=st.binary(min_size=32, max_size=32))
@settings(suppress_health_check=(HealthCheck.function_scoped_fixture,))
def test_chaindb_persist_header_unknown_parent(chaindb, header, seed):
n_header = header.copy(parent_hash=keccak(seed))
with pytest.raises(ParentNotFound):
Expand Down