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
4 changes: 2 additions & 2 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ jobs:
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: '3.10'
python-version: '3.14'
- name: Install UV
uses: astral-sh/setup-uv@v6
- name: Install Python deps
Expand All @@ -65,7 +65,7 @@ jobs:
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: '3.10'
python-version: '3.14'
- name: Replace source version
uses: qtoggle/actions-common/actions/replace-source-version@v1
with:
Expand Down
6 changes: 3 additions & 3 deletions docker/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
# Frontend builder image

# Always use BUILDPLATFORM for frontend-builder image, since it doesn't contain platform-specific binaries
FROM --platform=${BUILDPLATFORM:-linux/amd64} python:3.11.14-slim-bookworm AS frontend-builder
FROM --platform=${BUILDPLATFORM:-linux/amd64} python:3.14-slim-bookworm AS frontend-builder

Comment on lines 9 to 11
# Install OS deps
RUN apt-get update && \
Expand All @@ -25,7 +25,7 @@ RUN cd frontend && \

# Python builder image

FROM python:3.11.14-slim-bookworm AS python-builder
FROM python:3.14-slim-bookworm AS python-builder

# Copy source with frontend that has just been built in the previous stage
WORKDIR /tmp/build
Expand All @@ -43,7 +43,7 @@ RUN \

# Final image

FROM python:3.11.14-slim-bookworm AS qtoggleserver
FROM python:3.14-slim-bookworm AS qtoggleserver

# Copy our package that has just been built in the previous stage
COPY --from=python-builder /tmp/build/dist/qtoggleserver-*.tar.gz /tmp/qtoggleserver.tar.gz
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ description = "A fully fledged qToggle implementation written in Python"
authors = [
{name = "Calin Crisan", email = "ccrisan@gmail.com"},
]
requires-python = ">=3.11"
requires-python = ">=3.14"
readme = "README.md"
license = {text = "Apache 2.0"}
Comment on lines 6 to 10
dependencies = [
Expand Down
2 changes: 0 additions & 2 deletions qtoggleserver/core/api/__init__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
from __future__ import annotations

import functools
import logging

Expand Down
2 changes: 0 additions & 2 deletions qtoggleserver/core/events/base.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
from __future__ import annotations

import abc
import logging
import time
Expand Down
2 changes: 0 additions & 2 deletions qtoggleserver/core/expressions/__init__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
from __future__ import annotations

from .base import (
DEP_ASAP,
DEP_DAY,
Expand Down
2 changes: 0 additions & 2 deletions qtoggleserver/core/expressions/base.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
from __future__ import annotations

import abc

from enum import IntEnum
Expand Down
2 changes: 0 additions & 2 deletions qtoggleserver/core/expressions/ports.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
from __future__ import annotations

import abc
import re

Expand Down
2 changes: 0 additions & 2 deletions qtoggleserver/core/history.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
from __future__ import annotations

import asyncio
import logging
import time
Expand Down
2 changes: 0 additions & 2 deletions qtoggleserver/core/ports.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
from __future__ import annotations

import abc
import asyncio
import copy
Expand Down
2 changes: 0 additions & 2 deletions qtoggleserver/core/reverse.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
from __future__ import annotations

import asyncio
import logging
import re
Expand Down
2 changes: 0 additions & 2 deletions qtoggleserver/core/sessions.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
from __future__ import annotations

import asyncio
import logging
import time
Expand Down
2 changes: 0 additions & 2 deletions qtoggleserver/core/webhooks.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
from __future__ import annotations

import logging
import queue

Expand Down
2 changes: 0 additions & 2 deletions qtoggleserver/lib/ble.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
# ruff: noqa: ANN001, ANN002, ANN201, F821

from __future__ import annotations

import abc
import asyncio
import functools
Expand Down
2 changes: 1 addition & 1 deletion qtoggleserver/lib/polled.py
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ async def _poll_loop(self) -> None:
self._poll_wakeup.clear()
try:
await asyncio.wait_for(self._poll_wakeup.wait(), timeout=self._poll_interval)
except asyncio.TimeoutError:
except TimeoutError:
pass
except asyncio.CancelledError:
self.debug("polling task cancelled")
Expand Down
2 changes: 0 additions & 2 deletions qtoggleserver/peripherals/peripheral.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
from __future__ import annotations

import abc
import asyncio
import functools
Expand Down
2 changes: 0 additions & 2 deletions qtoggleserver/peripherals/peripheralport.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
from __future__ import annotations

import abc

from qtoggleserver.core import ports as core_ports
Expand Down
2 changes: 0 additions & 2 deletions qtoggleserver/slaves/api/funcs/devices.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
from __future__ import annotations

import asyncio
import inspect
import re
Expand Down
2 changes: 0 additions & 2 deletions qtoggleserver/slaves/devices.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
from __future__ import annotations

import asyncio
import hashlib
import logging
Expand Down
2 changes: 0 additions & 2 deletions qtoggleserver/slaves/discover/apclients.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
from __future__ import annotations

import asyncio
import json
import logging
Expand Down
2 changes: 0 additions & 2 deletions qtoggleserver/system/dhcp.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
from __future__ import annotations

import asyncio
import ctypes
import logging
Expand Down
2 changes: 0 additions & 2 deletions qtoggleserver/system/fwupdate.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
from __future__ import annotations

import abc
import logging

Expand Down
3 changes: 2 additions & 1 deletion qtoggleserver/utils/asyncio.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import asyncio
import logging

from typing import Any, Awaitable, Coroutine
from collections.abc import Awaitable, Coroutine
from typing import Any


logger = logging.getLogger(__name__)
Expand Down
4 changes: 2 additions & 2 deletions tests/unit/qtoggleserver/core/test_sessions.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ class MockEvent:

REQUIRED_ACCESS = 0

def __init__(self, name: str, duplicate_of: "MockEvent | list[MockEvent] | None" = None) -> None:
def __init__(self, name: str, duplicate_of: MockEvent | list[MockEvent] | None = None) -> None:
self.name = name
if duplicate_of is None:
self._duplicate_of: list[MockEvent] = []
Expand All @@ -21,7 +21,7 @@ def __init__(self, name: str, duplicate_of: "MockEvent | list[MockEvent] | None"
else:
self._duplicate_of = [duplicate_of]

def is_duplicate(self, other: "MockEvent") -> bool:
def is_duplicate(self, other: MockEvent) -> bool:
return other in self._duplicate_of or self in other._duplicate_of

def __repr__(self) -> str:
Expand Down
Loading
Loading