From d78c1342200def5d21c87dea3e900d5e1bc9b544 Mon Sep 17 00:00:00 2001 From: Bryce Boe Date: Thu, 23 Jan 2025 11:09:24 -0800 Subject: [PATCH] Drop support for python 3.8 and add 3.13 support --- .pre-commit-config.yaml | 6 +----- CHANGES.rst | 10 +++++++--- README.rst | 4 ---- examples/obtain_refresh_token.py | 1 + examples/read_only_auth_trophies.py | 1 + examples/script_auth_friend_list.py | 1 + prawcore/__init__.py | 2 +- prawcore/const.py | 3 ++- prawcore/rate_limit.py | 4 +++- prawcore/sessions.py | 13 +++++-------- pre_push.py | 2 +- pyproject.toml | 18 +++++------------- tools/set_version.py | 4 ++-- 13 files changed, 30 insertions(+), 39 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 6d966ca..3d2e612 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -29,11 +29,7 @@ repos: - id: ruff args: [ --exit-non-zero-on-fix, --fix ] files: ^(prawcore/.*.py)$ - - - repo: https://github.com/psf/black - hooks: - - id: black - rev: 24.10.0 + - id: ruff-format - repo: https://github.com/LilSpazJoekp/docstrfmt hooks: diff --git a/CHANGES.rst b/CHANGES.rst index 0c0fa39..90ca57f 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -6,14 +6,18 @@ prawcore follows `semantic versioning `_. Unreleased ---------- +**Changed** + +- Drop support for Python 3.8, which was end-of-life on 2024-10-07. + 2.4.0 (2023/10/01) ------------------ **Changed** -- Drop support for Python 3.6, which is end-of-life on 2021-12-23. +- Drop support for Python 3.6, which was end-of-life on 2021-12-23. - Updated rate limit algorithm to better handle Reddit's new rate limits. -- Drop support for Python 3.7, which is end-of-life on 2023-06-27. +- Drop support for Python 3.7, which was end-of-life on 2023-06-27. 2.3.0 (2021-07-26) ------------------ @@ -75,7 +79,7 @@ Unreleased **Changed** -- Drop support for Python 3.5, which is end-of-life on 2020-09-13. +- Drop support for Python 3.5, which was end-of-life on 2020-09-13. 1.4.0 (2020-05-28) ------------------ diff --git a/README.rst b/README.rst index 640f929..a820bfb 100644 --- a/README.rst +++ b/README.rst @@ -35,10 +35,6 @@ prawcore :alt: pre-commit :target: https://github.com/pre-commit/pre-commit -.. image:: https://img.shields.io/badge/code%20style-black-000000.svg - :alt: Black code style - :target: https://github.com/psf/black - prawcore is a low-level communication layer used by PRAW 4+. Installation diff --git a/examples/obtain_refresh_token.py b/examples/obtain_refresh_token.py index 7048422..0ae6f46 100755 --- a/examples/obtain_refresh_token.py +++ b/examples/obtain_refresh_token.py @@ -9,6 +9,7 @@ application OAuth2 credentials. """ + import os import random import socket diff --git a/examples/read_only_auth_trophies.py b/examples/read_only_auth_trophies.py index 5ff859b..3d71d96 100755 --- a/examples/read_only_auth_trophies.py +++ b/examples/read_only_auth_trophies.py @@ -6,6 +6,7 @@ require an access token to make authenticated requests to Reddit. """ + import os import sys diff --git a/examples/script_auth_friend_list.py b/examples/script_auth_friend_list.py index 7fd0c49..0081b8c 100755 --- a/examples/script_auth_friend_list.py +++ b/examples/script_auth_friend_list.py @@ -7,6 +7,7 @@ password. """ + import os import sys diff --git a/prawcore/__init__.py b/prawcore/__init__.py index 65fce52..71c8216 100644 --- a/prawcore/__init__.py +++ b/prawcore/__init__.py @@ -1,4 +1,4 @@ -""""Low-level communication layer for PRAW 4+.""" +"""Low-level communication layer for PRAW 4+.""" import logging diff --git a/prawcore/const.py b/prawcore/const.py index e72561f..1173efc 100644 --- a/prawcore/const.py +++ b/prawcore/const.py @@ -7,7 +7,8 @@ REVOKE_TOKEN_PATH = "/api/v1/revoke_token" # noqa: S105 TIMEOUT = float( os.environ.get( - "PRAWCORE_TIMEOUT", os.environ.get("prawcore_timeout", 16) # noqa: SIM112 + "PRAWCORE_TIMEOUT", + os.environ.get("prawcore_timeout", 16), # noqa: SIM112 ) ) WINDOW_SIZE = 600 diff --git a/prawcore/rate_limit.py b/prawcore/rate_limit.py index 4ddbb08..a21bd95 100644 --- a/prawcore/rate_limit.py +++ b/prawcore/rate_limit.py @@ -4,9 +4,11 @@ import logging import time -from typing import TYPE_CHECKING, Any, Callable, Mapping +from typing import TYPE_CHECKING, Any, Callable if TYPE_CHECKING: + from collections.abc import Mapping + from requests.models import Response log = logging.getLogger(__package__) diff --git a/prawcore/sessions.py b/prawcore/sessions.py index 480624f..3e2a28c 100644 --- a/prawcore/sessions.py +++ b/prawcore/sessions.py @@ -205,11 +205,8 @@ def _make_request( ) return response, None except RequestException as exception: - if ( - not retry_strategy_state.should_retry_on_failure() - or not isinstance( # noqa: E501 - exception.original_exception, self.RETRY_EXCEPTIONS - ) + if not retry_strategy_state.should_retry_on_failure() or not isinstance( # noqa: E501 + exception.original_exception, self.RETRY_EXCEPTIONS ): raise return None, exception.original_exception @@ -266,9 +263,9 @@ def _request_with_retries( raise self.STATUS_EXCEPTIONS[response.status_code](response) if response.status_code == codes["no_content"]: return None - assert ( - response.status_code in self.SUCCESS_STATUSES - ), f"Unexpected status code: {response.status_code}" + assert response.status_code in self.SUCCESS_STATUSES, ( + f"Unexpected status code: {response.status_code}" + ) if response.headers.get("content-length") == "0": return "" try: diff --git a/pre_push.py b/pre_push.py index 6002666..5912f37 100755 --- a/pre_push.py +++ b/pre_push.py @@ -64,7 +64,7 @@ def main(): "-n", "--unstatic", action="store_true", - help="Do not run static tests (black/flake8/pydocstyle)", + help="Do not run static tests (ruff)", default=False, ) parser.add_argument( diff --git a/pyproject.toml b/pyproject.toml index 0b9c53b..d8c2453 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -12,11 +12,11 @@ classifiers = [ "Natural Language :: English", "Programming Language :: Python", "Programming Language :: Python :: 3", - "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" + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13" ] dependencies = [ "requests >=2.6.0, <3.0" @@ -29,7 +29,7 @@ maintainers = [ ] name = "prawcore" readme = "README.rst" -requires-python = "~=3.8" +requires-python = "~=3.9" [project.optional-dependencies] ci = ["coveralls"] @@ -40,7 +40,7 @@ dev = [ ] lint = [ "pre-commit", - "ruff ==0.1.*" + "ruff ==0.9.*" ] test = [ "betamax >=0.8, <0.9", @@ -52,16 +52,8 @@ test = [ "Issue Tracker" = "https://github.com/praw-dev/prawcore/issues" "Source Code" = "https://github.com/praw-dev/prawcore" -[tool.black] -extend_exclude = '/(\.venv.*)/' -line-length = 88 - -[tool.isort] -profile = 'black' -skip_glob = '.venv*' - [tool.ruff] -target-version = "py38" +target-version = "py39" include = [ "prawcore/*.py" ] diff --git a/tools/set_version.py b/tools/set_version.py index 293e5e2..5780f36 100755 --- a/tools/set_version.py +++ b/tools/set_version.py @@ -25,7 +25,7 @@ def add_unreleased_to_changelog(): return False with open("CHANGES.rst", "w") as fp: - fp.write(f"{new_header}{content[len(CHANGELOG_HEADER):]}") + fp.write(f"{new_header}{content[len(CHANGELOG_HEADER) :]}") return True @@ -84,7 +84,7 @@ def update_changelog(version): version_header = f"{version_line}{'-' * len(version_line[:-1])}\n\n" with open("CHANGES.rst", "w") as fp: - fp.write(f"{CHANGELOG_HEADER}{version_header}{content[len(expected_header):]}") + fp.write(f"{CHANGELOG_HEADER}{version_header}{content[len(expected_header) :]}") return True