mirror of
https://github.com/Second-Hand-Friends/kleinanzeigen-bot.git
synced 2026-03-12 02:31:45 +01:00
## ℹ️ Description *Replace custom RemoteObject serialization wrapper with direct NoDriver 0.47+ RemoteObject API usage for better performance and maintainability.* - **Motivation**: The custom wrapper was unnecessary complexity when NoDriver 0.47+ provides direct RemoteObject API - **Context**: Upgrading from NoDriver 0.39 to 0.47 introduced RemoteObject, and we want to use it as intended - **Goal**: Future-proof implementation using the standard NoDriver patterns ## 📋 Changes Summary - Replace custom serialization wrapper with direct RemoteObject API usage - Implement proper RemoteObject detection and conversion in web_execute() - Add comprehensive _convert_remote_object_value() method for recursive conversion - Handle key/value list format from deep_serialized_value.value - Add type guards and proper type checking for RemoteObject instances - Maintain internal API stability while using RemoteObject as intended - Add 19 comprehensive test cases covering all conversion scenarios - Application tested and working with real ad download, update and publish ### ⚙️ Type of Change - [x] ✨ New feature (adds new functionality without breaking existing usage) - [x] 🐞 Bug fix (non-breaking change which fixes an issue) ## ✅ Checklist - [x] I have reviewed my changes to ensure they meet the project's standards. - [x] I have tested my changes and ensured that all tests pass (pdm run test). - [x] I have formatted the code (pdm run format). - [x] I have verified that linting passes (pdm run lint). - [x] I have updated documentation where necessary. By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.
38 lines
1.3 KiB
Python
38 lines
1.3 KiB
Python
# SPDX-FileCopyrightText: © Sebastian Thomschke and contributors
|
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
# SPDX-ArtifactOfProjectHomePage: https://github.com/Second-Hand-Friends/kleinanzeigen-bot/
|
|
import platform
|
|
from typing import cast
|
|
|
|
import nodriver
|
|
import pytest
|
|
|
|
from kleinanzeigen_bot.utils.misc import ensure
|
|
from kleinanzeigen_bot.utils.web_scraping_mixin import WebScrapingMixin
|
|
|
|
# Configure logging for integration tests
|
|
# The main bot already handles nodriver logging via silence_nodriver_logs fixture
|
|
# and pytest handles verbosity with -v flag automatically
|
|
|
|
|
|
async def atest_init() -> None:
|
|
web_scraping_mixin = WebScrapingMixin()
|
|
if platform.system() == "Linux":
|
|
# required for Ubuntu 24.04 or newer
|
|
cast(list[str], web_scraping_mixin.browser_config.arguments).append("--no-sandbox")
|
|
|
|
browser_path = web_scraping_mixin.get_compatible_browser()
|
|
ensure(browser_path is not None, "Browser not auto-detected")
|
|
|
|
web_scraping_mixin.close_browser_session()
|
|
try:
|
|
await web_scraping_mixin.create_browser_session()
|
|
finally:
|
|
web_scraping_mixin.close_browser_session()
|
|
|
|
|
|
@pytest.mark.flaky(reruns = 4, reruns_delay = 5)
|
|
@pytest.mark.itest
|
|
def test_init() -> None:
|
|
nodriver.loop().run_until_complete(atest_init()) # type: ignore[attr-defined]
|