Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions .github/workflows/_checks.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -41,13 +41,13 @@ jobs:
name: Lint check
uses: apify/workflows/.github/workflows/python_lint_check.yaml@main
with:
python_versions: '["3.10", "3.11", "3.12", "3.13", "3.14"]'
python_versions: '["3.10", "3.11", "3.12", "3.13", "3.14", "3.15"]'

type_check:
name: Type check
uses: apify/workflows/.github/workflows/python_type_check.yaml@main
with:
python_versions: '["3.10", "3.11", "3.12", "3.13", "3.14"]'
python_versions: '["3.10", "3.11", "3.12", "3.13", "3.14", "3.15"]'

markdown_lint_check:
name: Markdown lint check
Expand Down Expand Up @@ -135,9 +135,9 @@ jobs:
uses: apify/workflows/.github/workflows/python_unit_tests.yaml@main
secrets: inherit
with:
python_versions: '["3.10", "3.11", "3.12", "3.13", "3.14"]'
python_versions: '["3.10", "3.11", "3.12", "3.13", "3.14", "3.15"]'
operating_systems: '["ubuntu-latest", "windows-latest", "macos-latest"]'
python_version_for_codecov: "3.14"
python_version_for_codecov: "3.15"
operating_system_for_codecov: ubuntu-latest
tests_concurrency: "8"

Expand Down
5 changes: 4 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ classifiers = [
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
"Programming Language :: Python :: 3.15",
"Topic :: Software Development :: Libraries",
]
keywords = [
Expand Down Expand Up @@ -124,7 +125,8 @@ dev = [
# drops Python 3.10 (https://github.com/apify/crawlee-python/issues/1721), remove this constraint.
"apify_client<3.0.0", # For e2e tests.
"build<2.0.0", # For e2e tests.
"fakeredis[probabilistic,json,lua]<3.0.0",
"fakeredis[probabilistic,json,lua]<3.0.0; python_version != '3.15' or sys_platform != 'win32'",
"fakeredis[probabilistic,json]<3.0.0; python_version == '3.15' and sys_platform == 'win32'",
"filelock<5.0.0", # For e2e tests.
"poethepoet<1.0.0",
"pre-commit<5.0.0",
Expand Down Expand Up @@ -325,6 +327,7 @@ apify-client = false
apify-shared = false
apify_fingerprint_datapoints = false
crawlee = false
impit = false

# Run tasks with: uv run poe <task>
[tool.poe.tasks]
Expand Down
5 changes: 5 additions & 0 deletions tests/unit/storage_clients/_redis/test_redis_rq_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import asyncio
import json
from datetime import timedelta
from importlib.util import find_spec
from typing import TYPE_CHECKING
from unittest.mock import AsyncMock, MagicMock, Mock, patch

Expand All @@ -22,6 +23,10 @@
from crawlee.storage_clients._redis import RedisRequestQueueClient


# The Redis RQ client runs Lua scripts, which `fakeredis` executes only with `lupa` installed.
pytestmark = pytest.mark.skipif(find_spec('lupa') is None, reason='`lupa` is not installed')


@pytest.fixture(params=['default', 'bloom'])
async def rq_client(
redis_client: FakeAsyncRedis,
Expand Down
11 changes: 11 additions & 0 deletions tests/unit/storages/conftest.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from __future__ import annotations

from importlib.util import find_spec
from typing import TYPE_CHECKING

import pytest
Expand All @@ -19,6 +20,16 @@
from fakeredis import FakeAsyncRedis


def pytest_collection_modifyitems(items: list[pytest.Item]) -> None:
"""Skip the Redis request queue cases when `lupa` is missing, since the Redis RQ client runs Lua scripts."""
if find_spec('lupa') is not None:
return
for item in items:
callspec = getattr(item, 'callspec', None)
if item.path.name == 'test_request_queue.py' and callspec and callspec.params.get('storage_client') == 'redis':
item.add_marker(pytest.mark.skip(reason='`lupa` is not installed'))


@pytest.fixture(params=['memory', 'file_system', 'sql', 'redis'])
async def storage_client(
request: pytest.FixtureRequest,
Expand Down
Loading
Loading