From 1ed6de92b9769309b1d38fa8f471987fed559276 Mon Sep 17 00:00:00 2001
From: yakimka <ss.yakim@gmail.com>
Date: Sat, 28 Oct 2023 14:02:42 +0300
Subject: [PATCH] Add python 3.12 to workflow-ci.yml (#39)

* Add python 3.12 to workflow-ci.yml

* Update pre-commit deps

* Disable flake8-mock

* Add link to issue

* Add pyupgrade
---
 .github/workflows/workflow-ci.yml |  2 +-
 .pre-commit-config.yaml           | 21 +++++++++++++--------
 difflume/diffapp/differ.py        |  7 ++++++-
 difflume/diffapp/modules.py       |  2 +-
 difflume/tui/modals.py            |  4 +++-
 difflume/tui/screens.py           |  4 +++-
 difflume/tui/widgets.py           |  4 +++-
 7 files changed, 30 insertions(+), 14 deletions(-)

diff --git a/.github/workflows/workflow-ci.yml b/.github/workflows/workflow-ci.yml
index 7840cfa..c81eb8f 100644
--- a/.github/workflows/workflow-ci.yml
+++ b/.github/workflows/workflow-ci.yml
@@ -35,7 +35,7 @@ jobs:
     runs-on: ubuntu-latest
     strategy:
       matrix:
-        python-version: ['3.10', '3.11']
+        python-version: ['3.10', '3.11', '3.12']
 
     steps:
       - uses: actions/checkout@v4
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index c40354e..cf08491 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -13,6 +13,11 @@ repos:
     hooks:
       - id: check-github-workflows
       - id: check-dependabot
+  - repo: https://github.com/asottile/pyupgrade
+    rev: v3.15.0
+    hooks:
+      - id: pyupgrade
+        args: [--py310-plus]
   - repo: https://github.com/psf/black
     rev: 23.7.0
     hooks:
@@ -27,23 +32,23 @@ repos:
     hooks:
       - id: flake8
         additional_dependencies: [
-          # "flake8-assertive~=2.1.0"
-          # "flake8-future-annotations~=1.1.0",
           "dlint~=0.14.1",
           "flake8-async~=22.11.14",
           "flake8-bandit~=4.1.1",
-          "flake8-bugbear~=23.7.10",
+          "flake8-bugbear~=23.9.16",
           "flake8-comprehensions~=3.14.0",
           "flake8-eradicate~=1.5.0",
-          "flake8-mock==0.4",
+          # disabled because on 3.12 gets confused by E902 errors
+          # https://github.com/zupo/flake8-mock/issues/16
+#          "flake8-mock==0.4",
           "flake8-noqa~=1.3.2",
           "flake8-pie~=0.16.0",
           "flake8-pytest-style~=1.7.2",
           "flake8-self~=0.2.2",
-          "flake8-simplify~=0.20.0",
-          "flake8-type-checking~=2.4.1",
-          "flake8-typing-imports~=1.14.0",
+          "flake8-simplify~=0.21.0",
+          "flake8-type-checking~=2.5.1",
+          "flake8-typing-imports~=1.15.0",
           "flake8-unused-arguments~=0.0.13",
-          "flake8-warnings~=0.4.0",
+          "flake8-warnings~=0.4.1",
           "pep8-naming~=0.13.3",
         ]
diff --git a/difflume/diffapp/differ.py b/difflume/diffapp/differ.py
index 4206f86..e6a1f07 100644
--- a/difflume/diffapp/differ.py
+++ b/difflume/diffapp/differ.py
@@ -1,8 +1,13 @@
+from __future__ import annotations
+
 import difflib
 from collections import deque
 from dataclasses import dataclass
 from enum import Enum
-from typing import Generator, Iterable
+from typing import TYPE_CHECKING
+
+if TYPE_CHECKING:
+    from collections.abc import Generator, Iterable
 
 
 class DiffType(Enum):
diff --git a/difflume/diffapp/modules.py b/difflume/diffapp/modules.py
index a7a8879..1382c4f 100644
--- a/difflume/diffapp/modules.py
+++ b/difflume/diffapp/modules.py
@@ -123,7 +123,7 @@ def __init__(self, path: str) -> None:
 
     async def _read_text(self) -> str:
         try:
-            with open(self._path, "r") as f:
+            with open(self._path) as f:
                 return f.read()
         except (OSError, UnicodeDecodeError) as e:
             raise ReadError(f"Could not read file {self._path}") from e
diff --git a/difflume/tui/modals.py b/difflume/tui/modals.py
index 9fee2b5..38d9e42 100644
--- a/difflume/tui/modals.py
+++ b/difflume/tui/modals.py
@@ -2,7 +2,7 @@
 from __future__ import annotations
 
 import os
-from typing import TYPE_CHECKING, Generator
+from typing import TYPE_CHECKING
 
 from textual.binding import Binding
 from textual.containers import Center, ScrollableContainer
@@ -21,6 +21,8 @@
 from difflume.diffapp.modules import CouchDBModule, FSModule, URLModule
 
 if TYPE_CHECKING:
+    from collections.abc import Generator
+
     from textual import events
     from textual.app import ComposeResult
 
diff --git a/difflume/tui/screens.py b/difflume/tui/screens.py
index 484853d..1638187 100644
--- a/difflume/tui/screens.py
+++ b/difflume/tui/screens.py
@@ -4,7 +4,7 @@
 import contextlib
 import os
 from pathlib import Path
-from typing import TYPE_CHECKING, Generator, Literal
+from typing import TYPE_CHECKING, Literal
 
 from rich.highlighter import Highlighter, JSONHighlighter, ReprHighlighter
 from rich.style import Style
@@ -21,6 +21,8 @@
 from difflume.tui.widgets import LeftPanel, MiddlePanel, Panel, PanelType, RightPanel
 
 if TYPE_CHECKING:
+    from collections.abc import Generator
+
     from textual.app import ComposeResult
 
 
diff --git a/difflume/tui/widgets.py b/difflume/tui/widgets.py
index c51e954..020ff67 100644
--- a/difflume/tui/widgets.py
+++ b/difflume/tui/widgets.py
@@ -2,7 +2,7 @@
 from __future__ import annotations
 
 from enum import Enum
-from typing import TYPE_CHECKING, Generator
+from typing import TYPE_CHECKING
 
 from textual.binding import Binding
 from textual.containers import VerticalScroll
@@ -13,6 +13,8 @@
 from difflume.tui import modals
 
 if TYPE_CHECKING:
+    from collections.abc import Generator
+
     from rich.console import RenderableType
     from textual.app import ComposeResult