mirror of
https://github.com/Second-Hand-Friends/kleinanzeigen-bot.git
synced 2026-03-12 02:31:45 +01:00
build: upgrade to Python 3.14 (#636)
Co-authored-by: Jens <1742418+1cu@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
parent
799ec447af
commit
dadd08aedb
2
.actrc
2
.actrc
@@ -6,4 +6,4 @@
|
|||||||
-W .github/workflows/build.yml
|
-W .github/workflows/build.yml
|
||||||
-j build
|
-j build
|
||||||
--matrix os:ubuntu-latest
|
--matrix os:ubuntu-latest
|
||||||
--matrix PYTHON_VERSION:3.13.5
|
--matrix PYTHON_VERSION:3.14
|
||||||
|
|||||||
8
.github/workflows/build.yml
vendored
8
.github/workflows/build.yml
vendored
@@ -74,16 +74,16 @@ jobs:
|
|||||||
PYTHON_VERSION: "3.10"
|
PYTHON_VERSION: "3.10"
|
||||||
PUBLISH_RELEASE: false
|
PUBLISH_RELEASE: false
|
||||||
- os: macos-13 # X86
|
- os: macos-13 # X86
|
||||||
PYTHON_VERSION: "3.13.5"
|
PYTHON_VERSION: "3.14"
|
||||||
PUBLISH_RELEASE: true
|
PUBLISH_RELEASE: true
|
||||||
- os: macos-latest # ARM
|
- os: macos-latest # ARM
|
||||||
PYTHON_VERSION: "3.13.5"
|
PYTHON_VERSION: "3.14"
|
||||||
PUBLISH_RELEASE: true
|
PUBLISH_RELEASE: true
|
||||||
- os: ubuntu-latest
|
- os: ubuntu-latest
|
||||||
PYTHON_VERSION: "3.13.5"
|
PYTHON_VERSION: "3.14"
|
||||||
PUBLISH_RELEASE: true
|
PUBLISH_RELEASE: true
|
||||||
- os: windows-latest
|
- os: windows-latest
|
||||||
PYTHON_VERSION: "3.13.5"
|
PYTHON_VERSION: "3.14"
|
||||||
PUBLISH_RELEASE: true
|
PUBLISH_RELEASE: true
|
||||||
|
|
||||||
runs-on: ${{ matrix.os }} # https://github.com/actions/runner-images#available-images
|
runs-on: ${{ matrix.os }} # https://github.com/actions/runner-images#available-images
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ EOF
|
|||||||
######################
|
######################
|
||||||
|
|
||||||
# https://hub.docker.com/_/python/tags?name=3-slim
|
# https://hub.docker.com/_/python/tags?name=3-slim
|
||||||
FROM python:3.13-slim AS build-image
|
FROM python:3.14-slim AS build-image
|
||||||
|
|
||||||
ARG DEBIAN_FRONTEND=noninteractive
|
ARG DEBIAN_FRONTEND=noninteractive
|
||||||
ARG LC_ALL=C
|
ARG LC_ALL=C
|
||||||
|
|||||||
10
pdm.lock
generated
10
pdm.lock
generated
@@ -5,10 +5,10 @@
|
|||||||
groups = ["default", "dev"]
|
groups = ["default", "dev"]
|
||||||
strategy = ["inherit_metadata"]
|
strategy = ["inherit_metadata"]
|
||||||
lock_version = "4.5.0"
|
lock_version = "4.5.0"
|
||||||
content_hash = "sha256:eecf66c65d3597b333bec94ec2b8efa5fba4f96d772c466ab6023550b8d7dd3a"
|
content_hash = "sha256:76ff52a743ae07eb656f450998dd67f0bc441ce4e1c73d550c4b63434eca6541"
|
||||||
|
|
||||||
[[metadata.targets]]
|
[[metadata.targets]]
|
||||||
requires_python = ">=3.10,<3.14"
|
requires_python = ">=3.10,<3.15"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "altgraph"
|
name = "altgraph"
|
||||||
@@ -754,6 +754,12 @@ files = [
|
|||||||
{file = "mypy-1.18.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a431a6f1ef14cf8c144c6b14793a23ec4eae3db28277c358136e79d7d062f62d"},
|
{file = "mypy-1.18.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a431a6f1ef14cf8c144c6b14793a23ec4eae3db28277c358136e79d7d062f62d"},
|
||||||
{file = "mypy-1.18.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7ab28cc197f1dd77a67e1c6f35cd1f8e8b73ed2217e4fc005f9e6a504e46e7ba"},
|
{file = "mypy-1.18.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7ab28cc197f1dd77a67e1c6f35cd1f8e8b73ed2217e4fc005f9e6a504e46e7ba"},
|
||||||
{file = "mypy-1.18.2-cp313-cp313-win_amd64.whl", hash = "sha256:0e2785a84b34a72ba55fb5daf079a1003a34c05b22238da94fcae2bbe46f3544"},
|
{file = "mypy-1.18.2-cp313-cp313-win_amd64.whl", hash = "sha256:0e2785a84b34a72ba55fb5daf079a1003a34c05b22238da94fcae2bbe46f3544"},
|
||||||
|
{file = "mypy-1.18.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:62f0e1e988ad41c2a110edde6c398383a889d95b36b3e60bcf155f5164c4fdce"},
|
||||||
|
{file = "mypy-1.18.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:8795a039bab805ff0c1dfdb8cd3344642c2b99b8e439d057aba30850b8d3423d"},
|
||||||
|
{file = "mypy-1.18.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6ca1e64b24a700ab5ce10133f7ccd956a04715463d30498e64ea8715236f9c9c"},
|
||||||
|
{file = "mypy-1.18.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d924eef3795cc89fecf6bedc6ed32b33ac13e8321344f6ddbf8ee89f706c05cb"},
|
||||||
|
{file = "mypy-1.18.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:20c02215a080e3a2be3aa50506c67242df1c151eaba0dcbc1e4e557922a26075"},
|
||||||
|
{file = "mypy-1.18.2-cp314-cp314-win_amd64.whl", hash = "sha256:749b5f83198f1ca64345603118a6f01a4e99ad4bf9d103ddc5a3200cc4614adf"},
|
||||||
{file = "mypy-1.18.2-py3-none-any.whl", hash = "sha256:22a1748707dd62b58d2ae53562ffc4d7f8bcc727e8ac7cbc69c053ddc874d47e"},
|
{file = "mypy-1.18.2-py3-none-any.whl", hash = "sha256:22a1748707dd62b58d2ae53562ffc4d7f8bcc727e8ac7cbc69c053ddc874d47e"},
|
||||||
{file = "mypy-1.18.2.tar.gz", hash = "sha256:06a398102a5f203d7477b2923dda3634c36727fa5c237d8f859ef90c42a9924b"},
|
{file = "mypy-1.18.2.tar.gz", hash = "sha256:06a398102a5f203d7477b2923dda3634c36727fa5c237d8f859ef90c42a9924b"},
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ classifiers = [ # https://pypi.org/classifiers/
|
|||||||
"Programming Language :: Python :: 3",
|
"Programming Language :: Python :: 3",
|
||||||
"Programming Language :: Python :: 3.10"
|
"Programming Language :: Python :: 3.10"
|
||||||
]
|
]
|
||||||
requires-python = ">=3.10,<3.14"
|
requires-python = ">=3.10,<3.15"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"certifi",
|
"certifi",
|
||||||
"colorama",
|
"colorama",
|
||||||
|
|||||||
@@ -249,6 +249,9 @@ class WebScrapingMixin:
|
|||||||
self.browser = await nodriver.start(cfg)
|
self.browser = await nodriver.start(cfg)
|
||||||
LOG.info("New Browser session is %s", self.browser.websocket_url)
|
LOG.info("New Browser session is %s", self.browser.websocket_url)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
# Clean up any resources that were created during setup
|
||||||
|
self._cleanup_session_resources()
|
||||||
|
|
||||||
error_msg = str(e)
|
error_msg = str(e)
|
||||||
if "root" in error_msg.lower():
|
if "root" in error_msg.lower():
|
||||||
LOG.error("Failed to start browser. This error often occurs when:")
|
LOG.error("Failed to start browser. This error often occurs when:")
|
||||||
@@ -418,6 +421,12 @@ class WebScrapingMixin:
|
|||||||
p.kill() # terminate orphaned browser processes
|
p.kill() # terminate orphaned browser processes
|
||||||
self.browser = None # pyright: ignore[reportAttributeAccessIssue]
|
self.browser = None # pyright: ignore[reportAttributeAccessIssue]
|
||||||
|
|
||||||
|
def _cleanup_session_resources(self) -> None:
|
||||||
|
"""Clean up any resources that were created during session setup."""
|
||||||
|
# Reset browser and page references
|
||||||
|
self.browser = None # pyright: ignore[reportAttributeAccessIssue]
|
||||||
|
self.page = None # pyright: ignore[reportAttributeAccessIssue]
|
||||||
|
|
||||||
def get_compatible_browser(self) -> str:
|
def get_compatible_browser(self) -> str:
|
||||||
match platform.system():
|
match platform.system():
|
||||||
case "Linux":
|
case "Linux":
|
||||||
|
|||||||
@@ -787,7 +787,7 @@ class TestWebScrapingBrowserConfiguration:
|
|||||||
|
|
||||||
monkeypatch.setattr(nodriver, "start", mock_start_fail)
|
monkeypatch.setattr(nodriver, "start", mock_start_fail)
|
||||||
monkeypatch.setattr(nodriver.core.config, "Config", DummyConfig) # type: ignore[unused-ignore,reportAttributeAccessIssue]
|
monkeypatch.setattr(nodriver.core.config, "Config", DummyConfig) # type: ignore[unused-ignore,reportAttributeAccessIssue]
|
||||||
monkeypatch.setattr(os.path, "exists", lambda p: True)
|
# Don't mock os.path.exists globally - let the file operations work normally
|
||||||
|
|
||||||
# Attempt to create a session
|
# Attempt to create a session
|
||||||
scraper = WebScrapingMixin()
|
scraper = WebScrapingMixin()
|
||||||
|
|||||||
Reference in New Issue
Block a user