diff --git a/.github/workflows/check_wheel_availability.yaml b/.github/workflows/check_wheel_availability.yaml index 75dc4264c5f0..13d64bb4b885 100644 --- a/.github/workflows/check_wheel_availability.yaml +++ b/.github/workflows/check_wheel_availability.yaml @@ -43,7 +43,7 @@ jobs: matrix: arm - name: Intel matrix: intel - python-version: ["3.9", "3.10", "3.11", "3.12"] + python-version: ["3.10", "3.11", "3.12"] exclude: - os: matrix: windows diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml index 6d0b7f78b11c..41e06d640262 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -41,7 +41,6 @@ jobs: - name: Intel matrix: intel python: - - major_dot_minor: "3.9" - major_dot_minor: "3.10" - major_dot_minor: "3.11" - major_dot_minor: "3.12" diff --git a/.github/workflows/test-install-scripts.yml b/.github/workflows/test-install-scripts.yml index f33e4b0c2912..732e3a714df7 100644 --- a/.github/workflows/test-install-scripts.yml +++ b/.github/workflows/test-install-scripts.yml @@ -214,7 +214,9 @@ jobs: - name: Prepare Amazon Linux if: ${{ matrix.distribution.type == 'amazon' }} run: | - yum install --assumeyes git + dnf update -y + dnf search python3.12 + dnf install git python3.12 -y - name: Prepare Arch if: ${{ matrix.distribution.type == 'arch' }} @@ -242,7 +244,9 @@ jobs: - name: Prepare Rocky if: ${{ matrix.distribution.type == 'rocky' }} run: | - yum install --assumeyes git python39 + dnf update -y + dnf search python3.12 + dnf install git python3.12 -y - name: Prepare Ubuntu if: ${{ matrix.distribution.type == 'ubuntu' }} @@ -251,7 +255,7 @@ jobs: run: | apt-get --yes update apt-get install --yes git lsb-release - MINIMUM=3.9 + MINIMUM=3.10 if ! apt-get satisfy --yes "python3-venv (>= ${MINIMUM})" then apt-get install --yes python${MINIMUM}-venv diff --git a/.github/workflows/test-single.yml b/.github/workflows/test-single.yml index 8b28b63c3a55..6e7007202d01 100644 --- a/.github/workflows/test-single.yml +++ b/.github/workflows/test-single.yml @@ -70,15 +70,6 @@ jobs: - matrix: ${{ inputs.arch }} emoji: ${{ inputs.arch-emoji }} python: - - name: "3.9" - file_name: "3.9" - action: "3.9" - apt: "3.9" - install_sh: "3.9" - matrix: "3.9" - exclude_from: - limited: True - main: True - name: "3.10" file_name: "3.10" action: "3.10" diff --git a/.github/workflows/upload-pypi-source.yml b/.github/workflows/upload-pypi-source.yml index 94a563349484..980cddeced08 100644 --- a/.github/workflows/upload-pypi-source.yml +++ b/.github/workflows/upload-pypi-source.yml @@ -59,7 +59,6 @@ jobs: emoji: 🌀 matrix: intel python: - - major_dot_minor: "3.9" - major_dot_minor: "3.10" - major_dot_minor: "3.11" - major_dot_minor: "3.12" diff --git a/Install.ps1 b/Install.ps1 index 0fd2f96555e9..015440221ae3 100644 --- a/Install.ps1 +++ b/Install.ps1 @@ -46,7 +46,7 @@ if ($null -eq (Get-Command py -ErrorAction SilentlyContinue)) Exit 1 } -$supportedPythonVersions = "3.12", "3.11", "3.10", "3.9" +$supportedPythonVersions = "3.12", "3.11", "3.10" if ("$env:INSTALL_PYTHON_VERSION" -ne "") { $pythonVersion = $env:INSTALL_PYTHON_VERSION diff --git a/README.md b/README.md index 90409b1db5aa..32d80b03b89a 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ Chia is a modern cryptocurrency built from scratch, designed to be efficient, de Please check out the [Chia website][link-chia], the [Intro to Chia][link-intro], and [FAQ][link-faq] for information on this project. -Python 3.9+ is required. Make sure your default python version is >=3.9 by typing `python3`. +Python 3.10+ is required. Make sure your default python version is >=3.10 by typing `python3`. If you are behind a NAT, it can be difficult for peers outside your subnet to reach you when they start up. You can enable [UPnP][link-upnp] on your router or add a NAT (for IPv4 but not IPv6) and firewall rules to allow TCP port 8444 access to your peer. diff --git a/chia/_tests/cmds/test_dev_gh.py b/chia/_tests/cmds/test_dev_gh.py index 163388fb6d88..1eac03cc3d51 100644 --- a/chia/_tests/cmds/test_dev_gh.py +++ b/chia/_tests/cmds/test_dev_gh.py @@ -114,7 +114,7 @@ async def test_successfully_dispatches( assert by_name["macos-intel"]["conclusion"] == "skipped" assert by_name["windows"]["conclusion"] == "skipped" - versions = ["3.9", "3.10", "3.11", "3.12"] + versions = ["3.10", "3.11", "3.12"] runs_by_name: dict[str, list[str]] = {name: [] for name in ["ubuntu", "macos-arm"]} for name in by_name: platform, _, rest = name.partition(" / ") diff --git a/chia/_tests/util/test_priority_mutex.py b/chia/_tests/util/test_priority_mutex.py index e835a7b6e1b7..abb19f47e855 100644 --- a/chia/_tests/util/test_priority_mutex.py +++ b/chia/_tests/util/test_priority_mutex.py @@ -381,7 +381,7 @@ def sane(requests: list[Request]) -> bool: return False ordered = sorted(requests) - return all(a.before(b) for a, b in zip(ordered, ordered[1:])) + return all(a.before(b) for a, b in itertools.pairwise(ordered)) @dataclass diff --git a/chia/cmds/cmd_classes.py b/chia/cmds/cmd_classes.py index e52e1421066d..062b2906b1cc 100644 --- a/chia/cmds/cmd_classes.py +++ b/chia/cmds/cmd_classes.py @@ -5,7 +5,6 @@ import dataclasses import inspect import pathlib -import sys from dataclasses import MISSING, dataclass, field, fields from typing import ( Any, @@ -45,12 +44,6 @@ async def run(self) -> None: ... def option(*param_decls: str, **kwargs: Any) -> Any: - if sys.version_info >= (3, 10): - default_default = MISSING - else: # versions < 3.10 don't know about kw_only and they complain about lacks of defaults - # Can't get coverage on this because we only test on one version - default_default = None # pragma: no cover - return field( metadata=dict( option_args=dict( @@ -58,7 +51,7 @@ def option(*param_decls: str, **kwargs: Any) -> Any: **kwargs, ), ), - default=kwargs.get("default", default_default), + default=kwargs.get("default", MISSING), ) @@ -270,16 +263,10 @@ def chia_command( def _chia_command(cls: type[ChiaCommand]) -> type[ChiaCommand]: # The type ignores here are largely due to the fact that the class information is not preserved after being # passed through the dataclass wrapper. Not sure what to do about this right now. - if sys.version_info >= (3, 10): - wrapped_cls: type[ChiaCommand] = dataclass( - frozen=True, - kw_only=True, - )(cls) - else: # pragma: no cover - # stuff below 3.10 doesn't know about kw_only - wrapped_cls: type[ChiaCommand] = dataclass( - frozen=True, - )(cls) + wrapped_cls: type[ChiaCommand] = dataclass( + frozen=True, + kw_only=True, + )(cls) metadata = Metadata( command=click.command( @@ -316,9 +303,6 @@ def get_chia_command_metadata(cls: type[ChiaCommand]) -> Metadata: @dataclass_transform(frozen_default=True) def command_helper(cls: type[Any]) -> type[Any]: - if sys.version_info >= (3, 10): - new_cls = dataclass(frozen=True, kw_only=True)(cls) - else: # stuff below 3.10 doesn't support kw_only - new_cls = dataclass(frozen=True)(cls) # pragma: no cover + new_cls = dataclass(frozen=True, kw_only=True)(cls) setattr(new_cls, COMMAND_HELPER_ATTRIBUTE_NAME, True) return new_cls diff --git a/chia/wallet/conditions.py b/chia/wallet/conditions.py index 5b12b1c4ad21..0e4ee3d6ffb3 100644 --- a/chia/wallet/conditions.py +++ b/chia/wallet/conditions.py @@ -1472,9 +1472,7 @@ def parse_timelock_info(conditions: Iterable[Condition]) -> ConditionValidTimes: elif isinstance(condition, Timelock): timelock = condition else: - # Something about python 3.9 makes this be not covered but on 3.10+ it is covered - # https://github.com/nedbat/coveragepy/issues/1530 - continue # pragma: no cover + continue properties_left = properties.copy() min_not_max: bool = True diff --git a/chia/wallet/wallet_request_types.py b/chia/wallet/wallet_request_types.py index 47cff080e6b9..49b0c4da1f78 100644 --- a/chia/wallet/wallet_request_types.py +++ b/chia/wallet/wallet_request_types.py @@ -1,13 +1,12 @@ from __future__ import annotations -import sys from dataclasses import dataclass, field from typing import Any, BinaryIO, Optional, final from chia_rs import Coin, G1Element, G2Element, PrivateKey from chia_rs.sized_bytes import bytes32 from chia_rs.sized_ints import uint8, uint16, uint32, uint64 -from typing_extensions import Self, dataclass_transform +from typing_extensions import Self from chia.data_layer.data_layer_wallet import Mirror from chia.data_layer.singleton_record import SingletonRecord @@ -40,14 +39,6 @@ from chia.wallet.wallet_spend_bundle import WalletSpendBundle -@dataclass_transform(frozen_default=True, kw_only_default=True) -def kw_only_dataclass(cls: type[Any]) -> type[Any]: - if sys.version_info >= (3, 10): - return dataclass(frozen=True, kw_only=True)(cls) - else: - return dataclass(frozen=True)(cls) # pragma: no cover - - def default_raise() -> Any: # pragma: no cover raise RuntimeError("This should be impossible to hit and is just for < 3.10 compatibility") @@ -241,7 +232,7 @@ class GetWalletBalances(Streamable): # utility for GetWalletBalanceResponse(s) @streamable -@kw_only_dataclass +@dataclass(frozen=True, kw_only=True) class BalanceResponse(Balance): wallet_id: uint32 = field(default_factory=default_raise) wallet_type: uint8 = field(default_factory=default_raise) @@ -1236,7 +1227,7 @@ class ExecuteSigningInstructionsResponse(Streamable): # field(default_factory=default_raise) # (this is for < 3.10 compatibility) @streamable -@kw_only_dataclass +@dataclass(frozen=True, kw_only=True) class TransactionEndpointRequest(Streamable): fee: uint64 = uint64(0) push: Optional[bool] = None @@ -1357,7 +1348,7 @@ class PushTransactionsResponse(TransactionEndpointResponse): @streamable -@kw_only_dataclass +@dataclass(frozen=True, kw_only=True) class SplitCoins(TransactionEndpointRequest): wallet_id: uint32 = field(default_factory=default_raise) number_of_coins: uint16 = field(default_factory=default_raise) @@ -1372,7 +1363,7 @@ class SplitCoinsResponse(TransactionEndpointResponse): @streamable -@kw_only_dataclass +@dataclass(frozen=True, kw_only=True) class CombineCoins(TransactionEndpointRequest): wallet_id: uint32 = field(default_factory=default_raise) number_of_coins: uint16 = uint16(500) @@ -1389,7 +1380,7 @@ class CombineCoinsResponse(TransactionEndpointResponse): @streamable -@kw_only_dataclass +@dataclass(frozen=True, kw_only=True) class DIDMessageSpend(TransactionEndpointRequest): wallet_id: uint32 = field(default_factory=default_raise) coin_announcements: list[bytes] = field(default_factory=list) @@ -1403,7 +1394,7 @@ class DIDMessageSpendResponse(TransactionEndpointResponse): @streamable -@kw_only_dataclass +@dataclass(frozen=True, kw_only=True) class DIDUpdateMetadata(TransactionEndpointRequest): wallet_id: uint32 = field(default_factory=default_raise) metadata: dict[str, str] = field(default_factory=dict) @@ -1417,7 +1408,7 @@ class DIDUpdateMetadataResponse(TransactionEndpointResponse): @streamable -@kw_only_dataclass +@dataclass(frozen=True, kw_only=True) class DIDTransferDID(TransactionEndpointRequest): wallet_id: uint32 = field(default_factory=default_raise) inner_address: str = field(default_factory=default_raise) @@ -1437,7 +1428,7 @@ class DIDTransferDIDResponse(TransactionEndpointResponse): @streamable -@kw_only_dataclass +@dataclass(frozen=True, kw_only=True) class NFTMintNFTRequest(TransactionEndpointRequest): wallet_id: uint32 = field(default_factory=default_raise) royalty_address: Optional[str] = field(default_factory=default_raise) @@ -1463,7 +1454,7 @@ class NFTMintNFTResponse(TransactionEndpointResponse): @streamable -@kw_only_dataclass +@dataclass(frozen=True, kw_only=True) class NFTSetNFTDID(TransactionEndpointRequest): wallet_id: uint32 = field(default_factory=default_raise) nft_coin_id: bytes32 = field(default_factory=default_raise) @@ -1478,7 +1469,7 @@ class NFTSetNFTDIDResponse(TransactionEndpointResponse): @streamable -@kw_only_dataclass +@dataclass(frozen=True, kw_only=True) class NFTSetDIDBulk(TransactionEndpointRequest): nft_coin_list: list[NFTCoin] = field(default_factory=default_raise) did_id: Optional[str] = None @@ -1493,7 +1484,7 @@ class NFTSetDIDBulkResponse(TransactionEndpointResponse): @streamable -@kw_only_dataclass +@dataclass(frozen=True, kw_only=True) class NFTTransferBulk(TransactionEndpointRequest): nft_coin_list: list[NFTCoin] = field(default_factory=default_raise) target_address: str = field(default_factory=default_raise) @@ -1508,7 +1499,7 @@ class NFTTransferBulkResponse(TransactionEndpointResponse): @streamable -@kw_only_dataclass +@dataclass(frozen=True, kw_only=True) class CreateNewDL(TransactionEndpointRequest): root: bytes32 = field(default_factory=default_raise) @@ -1520,7 +1511,7 @@ class CreateNewDLResponse(TransactionEndpointResponse): @streamable -@kw_only_dataclass +@dataclass(frozen=True, kw_only=True) class DLUpdateRoot(TransactionEndpointRequest): launcher_id: bytes32 = field(default_factory=default_raise) new_root: bytes32 = field(default_factory=default_raise) @@ -1564,7 +1555,7 @@ def from_json_dict(cls, json_dict: dict[str, Any]) -> Self: @streamable -@kw_only_dataclass +@dataclass(frozen=True, kw_only=True) class DLUpdateMultiple(TransactionEndpointRequest): updates: DLUpdateMultipleUpdates = field(default_factory=default_raise) @@ -1580,7 +1571,7 @@ class DLUpdateMultipleResponse(TransactionEndpointResponse): @streamable -@kw_only_dataclass +@dataclass(frozen=True, kw_only=True) class DLNewMirror(TransactionEndpointRequest): launcher_id: bytes32 = field(default_factory=default_raise) amount: uint64 = field(default_factory=default_raise) @@ -1594,7 +1585,7 @@ class DLNewMirrorResponse(TransactionEndpointResponse): @streamable -@kw_only_dataclass +@dataclass(frozen=True, kw_only=True) class DLDeleteMirror(TransactionEndpointRequest): coin_id: bytes32 = field(default_factory=default_raise) diff --git a/install.sh b/install.sh index 5fe03c41ee02..61fe53da7bf7 100755 --- a/install.sh +++ b/install.sh @@ -59,7 +59,7 @@ if [ "$(uname -m)" = "armv7l" ]; then fi # You can specify preferred python version by exporting `INSTALL_PYTHON_VERSION` -# e.g. `export INSTALL_PYTHON_VERSION=3.9` +# e.g. `export INSTALL_PYTHON_VERSION=3.10` INSTALL_PYTHON_PATH= PYTHON_MAJOR_VER= PYTHON_MINOR_VER= @@ -72,7 +72,7 @@ OPENSSL_VERSION_INT= find_python() { set +e unset BEST_VERSION - for V in 312 3.12 311 3.11 310 3.10 39 3.9 3; do + for V in 312 3.12 311 3.11 310 3.10 3; do if command -v python$V >/dev/null; then if [ "$BEST_VERSION" = "" ]; then BEST_VERSION=$V @@ -136,7 +136,7 @@ if ! command -v "$INSTALL_PYTHON_PATH" >/dev/null; then fi if [ "$PYTHON_MAJOR_VER" -ne "3" ] || [ "$PYTHON_MINOR_VER" -lt "7" ] || [ "$PYTHON_MINOR_VER" -ge "13" ]; then - echo "Chia requires Python version >= 3.9 and < 3.13.0" >&2 + echo "Chia requires Python version >= 3.10 and < 3.13.0" >&2 echo "Current Python version = $INSTALL_PYTHON_VERSION" >&2 # If Arch, direct to Arch Wiki if type pacman >/dev/null 2>&1 && [ -f "/etc/arch-release" ]; then diff --git a/poetry.lock b/poetry.lock index c8b21fc25110..c002a585e236 100644 --- a/poetry.lock +++ b/poetry.lock @@ -286,7 +286,7 @@ description = "Timeout context manager for asyncio programs" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "python_version < \"3.11\"" +markers = "python_version == \"3.10\"" files = [ {file = "async-timeout-4.0.3.tar.gz", hash = "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f"}, {file = "async_timeout-4.0.3-py3-none-any.whl", hash = "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028"}, @@ -538,10 +538,7 @@ files = [ [package.dependencies] jmespath = ">=0.7.1,<2.0.0" python-dateutil = ">=2.1,<3.0.0" -urllib3 = [ - {version = ">=1.25.4,<1.27", markers = "python_version < \"3.10\""}, - {version = ">=1.25.4,<2.2.0 || >2.2.0,<3", markers = "python_version >= \"3.10\""}, -] +urllib3 = {version = ">=1.25.4,<2.2.0 || >2.2.0,<3", markers = "python_version >= \"3.10\""} [package.extras] crt = ["awscrt (==0.27.6)"] @@ -1395,7 +1392,7 @@ description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "python_version < \"3.11\"" +markers = "python_version == \"3.10\"" files = [ {file = "exceptiongroup-1.1.3-py3-none-any.whl", hash = "sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3"}, {file = "exceptiongroup-1.1.3.tar.gz", hash = "sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9"}, @@ -1639,9 +1636,6 @@ files = [ {file = "importlib_resources-6.5.2.tar.gz", hash = "sha256:185f87adef5bcc288449d98fb4fba07cea78bc036455dd44c5fc4a2fe78fed2c"}, ] -[package.dependencies] -zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} - [package.extras] check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] cover = ["pytest-cov"] @@ -1979,7 +1973,7 @@ description = "Mach-O header analysis and editing" optional = true python-versions = "*" groups = ["main"] -markers = "extra == \"dev\" and sys_platform == \"darwin\" and python_version <= \"3.12\"" +markers = "extra == \"dev\" and python_version <= \"3.12\" and sys_platform == \"darwin\"" files = [ {file = "macholib-1.16.3-py2.py3-none-any.whl", hash = "sha256:0e315d7583d38b8c77e815b1ecbdbf504a8258d8b3e17b61165c6feb60d18f2c"}, {file = "macholib-1.16.3.tar.gz", hash = "sha256:07ae9e15e8e4cd9a788013d81f5908b3609aa76f9b1421bae9c4d7606ec86a30"}, @@ -2343,26 +2337,6 @@ files = [ {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, ] -[[package]] -name = "networkx" -version = "3.2.1" -description = "Python package for creating and manipulating graphs and networks" -optional = true -python-versions = ">=3.9" -groups = ["main"] -markers = "python_version < \"3.10\" and extra == \"dev\"" -files = [ - {file = "networkx-3.2.1-py3-none-any.whl", hash = "sha256:f18c69adc97877c42332c170849c96cefa91881c99a7cb3e95b7c659ebdc1ec2"}, - {file = "networkx-3.2.1.tar.gz", hash = "sha256:9f1bb5cf3409bf324e0a722c20bdb4c20ee39bf1c30ce8ae499c8502b0b5e0c6"}, -] - -[package.extras] -default = ["matplotlib (>=3.5)", "numpy (>=1.22)", "pandas (>=1.4)", "scipy (>=1.9,!=1.11.0,!=1.11.1)"] -developer = ["changelist (==0.4)", "mypy (>=1.1)", "pre-commit (>=3.2)", "rtoml"] -doc = ["nb2plots (>=0.7)", "nbconvert (<7.9)", "numpydoc (>=1.6)", "pillow (>=9.4)", "pydata-sphinx-theme (>=0.14)", "sphinx (>=7)", "sphinx-gallery (>=0.14)", "texext (>=0.6.7)"] -extra = ["lxml (>=4.6)", "pydot (>=1.4.2)", "pygraphviz (>=1.11)", "sympy (>=1.10)"] -test = ["pytest (>=7.2)", "pytest-cov (>=4.0)"] - [[package]] name = "networkx" version = "3.4.2" @@ -2370,7 +2344,7 @@ description = "Python package for creating and manipulating graphs and networks" optional = true python-versions = ">=3.10" groups = ["main"] -markers = "python_version >= \"3.10\" and extra == \"dev\" and python_version < \"3.12\"" +markers = "python_version < \"3.12\" and extra == \"dev\"" files = [ {file = "networkx-3.4.2-py3-none-any.whl", hash = "sha256:df5d4365b724cf81b8c6a7312509d0c22386097011ad1abe274afd5e9d3bbc5f"}, {file = "networkx-3.4.2.tar.gz", hash = "sha256:307c3669428c5362aab27c8a1260aa8f47c4e91d3891f48be0141738d8d053e1"}, @@ -2451,7 +2425,7 @@ description = "Python PE parsing module" optional = true python-versions = ">=3.6.0" groups = ["main"] -markers = "extra == \"dev\" and sys_platform == \"win32\" and python_version <= \"3.12\"" +markers = "extra == \"dev\" and python_version <= \"3.12\" and sys_platform == \"win32\"" files = [ {file = "pefile-2023.2.7-py3-none-any.whl", hash = "sha256:da185cd2af68c08a6cd4481f7325ed600a88f6a813bad9dea07ab3ef73d8d8d6"}, {file = "pefile-2023.2.7.tar.gz", hash = "sha256:82e6114004b3d6911c77c3953e3838654b04511b8b66e8583db70c65998017dc"}, @@ -2806,7 +2780,6 @@ files = [ [package.dependencies] altgraph = "*" -importlib_metadata = {version = ">=4.6", markers = "python_version < \"3.10\""} macholib = {version = ">=1.8", markers = "sys_platform == \"darwin\""} packaging = ">=22.0" pefile = {version = ">=2022.5.30,<2024.8.26 || >2024.8.26", markers = "sys_platform == \"win32\""} @@ -2832,7 +2805,6 @@ files = [ ] [package.dependencies] -importlib_metadata = {version = ">=4.6", markers = "python_version < \"3.10\""} packaging = ">=22.0" setuptools = ">=42.0.0" @@ -3397,26 +3369,6 @@ files = [ {file = "sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88"}, ] -[[package]] -name = "stdlib-list" -version = "0.11.1" -description = "A list of Python Standard Libraries (2.7 through 3.13)." -optional = true -python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"dev\" and python_version < \"3.10\"" -files = [ - {file = "stdlib_list-0.11.1-py3-none-any.whl", hash = "sha256:9029ea5e3dfde8cd4294cfd4d1797be56a67fc4693c606181730148c3fd1da29"}, - {file = "stdlib_list-0.11.1.tar.gz", hash = "sha256:95ebd1d73da9333bba03ccc097f5bac05e3aa03e6822a0c0290f87e1047f1857"}, -] - -[package.extras] -dev = ["build", "stdlib-list[doc,lint,test]"] -doc = ["furo", "sphinx"] -lint = ["mypy", "ruff"] -support = ["sphobjinv"] -test = ["coverage[toml]", "pytest", "pytest-cov"] - [[package]] name = "tach" version = "0.29.0" @@ -3446,7 +3398,6 @@ prompt-toolkit = ">=3.0,<4.0" pydot = ">=2,<4" pyyaml = ">=6.0,<7.0" rich = ">=13.0,<14.0" -stdlib-list = {version = ">=0.10.0", markers = "python_full_version < \"3.10.0\""} tomli = ">=1.2.2" tomli-w = ">=1.0,<2.0" @@ -3460,7 +3411,7 @@ description = "A lil' TOML parser" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "extra == \"dev\" or python_version < \"3.11\"" +markers = "extra == \"dev\" or python_version == \"3.10\"" files = [ {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, @@ -3543,24 +3494,6 @@ files = [ {file = "typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466"}, ] -[[package]] -name = "urllib3" -version = "1.26.19" -description = "HTTP library with thread-safe connection pooling, file post, and more." -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" -groups = ["main"] -markers = "python_version < \"3.10\"" -files = [ - {file = "urllib3-1.26.19-py2.py3-none-any.whl", hash = "sha256:37a0344459b199fce0e80b0d3569837ec6b6937435c5244e7fd73fa6006830f3"}, - {file = "urllib3-1.26.19.tar.gz", hash = "sha256:3e3d753a8618b86d7de333b4223005f68720bcd6a7d2bcb9fbd2229ec7c1e429"}, -] - -[package.extras] -brotli = ["brotli (==1.0.9) ; os_name != \"nt\" and python_version < \"3\" and platform_python_implementation == \"CPython\"", "brotli (>=1.0.9) ; python_version >= \"3\" and platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; (os_name != \"nt\" or python_version >= \"3\") and platform_python_implementation != \"CPython\"", "brotlipy (>=0.6.0) ; os_name == \"nt\" and python_version < \"3\""] -secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress ; python_version == \"2.7\"", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] -socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] - [[package]] name = "urllib3" version = "2.2.2" @@ -3568,7 +3501,6 @@ description = "HTTP library with thread-safe connection pooling, file post, and optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version >= \"3.10\"" files = [ {file = "urllib3-2.2.2-py3-none-any.whl", hash = "sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472"}, {file = "urllib3-2.2.2.tar.gz", hash = "sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168"}, @@ -3958,5 +3890,5 @@ upnp = ["miniupnpc"] [metadata] lock-version = "2.1" -python-versions = ">=3.9, <4, !=3.9.0, !=3.9.1" -content-hash = "650f0c98ff03cf897ee793ebb1e26bee8ae7b3c99bab5295fee7736bc19e346f" +python-versions = ">=3.10, <4" +content-hash = "ba6edf6f808031df930df35a9a40c46896e9a78aab96b896e1fc4150cf7a59f4" diff --git a/pyproject.toml b/pyproject.toml index 3d8486a9faeb..426c69435d8b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -2,8 +2,7 @@ name = "chia-blockchain" dynamic = [ "dependencies", "version" ] description = "Chia blockchain full node, farmer, timelord, and wallet." -# banning 3.9.0 and 3.9.1 for simplicity aligning with https://github.com/pyca/cryptography/pull/12045 -requires-python = ">=3.9, <4, !=3.9.0, !=3.9.1" +requires-python = ">=3.10, <4" authors = [ {name="Mariano Sorgente", email="mariano@chia.net"} ] @@ -107,8 +106,8 @@ lxml = { version = ">=5.2.2", optional = true } miniupnpc = {version = ">=2.3.2, <3", source = "chia", optional = true} # big-o = {version = "0.11.0", optional = true} # numpy = [ -# {version="<=1.24.4", python = "<3.9", optional = true}, -# {version=">=1.26.4", python = ">=3.9", optional = true}] +# {version="<=1.24.4", python = "<3.10", optional = true}, +# {version=">=1.26.4", python = ">=3.10", optional = true}] ruff = { version = ">=0.8.1", optional = true } [project.optional-dependencies] diff --git a/ruff.toml b/ruff.toml index 2b29977f9794..4f3deecc3518 100644 --- a/ruff.toml +++ b/ruff.toml @@ -99,6 +99,11 @@ ignore = [ "S101", # assert "S404", # suspicious-subprocess-import "S607", # start-process-with-partial-path + + # TODO: Remove these - it's a lot of errors + "UP045", + "UP007", + "UP035" ] [lint.per-file-ignores]