Skip to content

Commit b7b530c

Browse files
chore: raise requires-python to >=3.12, revert 3.10/3.11 workarounds
1 parent ff81c4c commit b7b530c

9 files changed

Lines changed: 15 additions & 185 deletions

File tree

.github/workflows/ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ jobs:
1515
runs-on: ubuntu-latest
1616
strategy:
1717
matrix:
18-
python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
18+
python-version: ["3.12", "3.13", "3.14"]
1919
steps:
2020
- uses: actions/checkout@v4
2121
- uses: astral-sh/setup-uv@v6

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ license = "MIT"
77
authors = [
88
{ name = "Henrique Bastos", email = "henrique@bastos.net" }
99
]
10-
requires-python = ">=3.10"
10+
requires-python = ">=3.12"
1111
dependencies = [
1212
"pydantic>=2.0",
1313
"typer>=0.9",

src/beans/api.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# Python imports
2-
from datetime import datetime, timezone
2+
from datetime import UTC, datetime
33

44
# Internal imports
55
from beans.models import (
@@ -54,7 +54,7 @@ def close_bean(store: Store, bean_id, reason=None, force=False) -> Bean:
5454
raise OpenChildrenError(
5555
f"Cannot close {bean_id}: {count} open {'child' if count == 1 else 'children'} remain"
5656
)
57-
fields = {"status": "closed", "closed_at": datetime.now(timezone.utc).isoformat()}
57+
fields = {"status": "closed", "closed_at": datetime.now(UTC).isoformat()}
5858
if reason:
5959
fields["close_reason"] = reason
6060
if store.update(bean_id, **fields) == 0:

src/beans/config.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import json
33
import os
44
from pathlib import Path
5+
from typing import Self
56

67
# Pip imports
78
from pydantic import BaseModel, Field
@@ -49,7 +50,7 @@ def remove_type(self, name) -> bool:
4950
return len(self.types) < before
5051

5152
@classmethod
52-
def from_path(cls, path) -> "Config":
53+
def from_path(cls, path) -> Self:
5354
"""Load from existing file, or create empty if file doesn't exist."""
5455
path = Path(path)
5556
if not path.exists():

src/beans/models.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# Python imports
2-
from datetime import datetime, timezone
2+
from datetime import UTC, datetime
33
from functools import partial
44
import re
55
import secrets
@@ -77,7 +77,7 @@ class Bean(BaseModel):
7777
assignee: str | None = None
7878
created_by: str | None = None
7979
ref_id: str | None = None
80-
created_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
80+
created_at: datetime = Field(default_factory=lambda: datetime.now(UTC))
8181
closed_at: datetime | None = None
8282
close_reason: str | None = None
8383

src/beans/store.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import json
55
from pathlib import Path
66
import sqlite3
7+
from typing import Self
78

89
# Internal imports
910
from beans.models import Bean, BeanNotFoundError, Dep
@@ -436,7 +437,7 @@ def remove_dep(self, from_id, to_id) -> int:
436437
return self.dep.remove(from_id, to_id)
437438

438439
@classmethod
439-
def from_path(cls, db_path: Path, dry_run=False) -> Store:
440+
def from_path(cls, db_path: Path, dry_run=False) -> Self:
440441
return cls(sqlite3.connect(db_path), dry_run=dry_run)
441442

442443
def close(self):

tests/test_models.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# Python imports
2-
from datetime import datetime, timezone
2+
from datetime import UTC, datetime
33
import re
44

55
from pydantic import ValidationError
@@ -9,7 +9,7 @@
99

1010
from beans.models import Bean, BeanId, Error
1111

12-
FIXED_TIME = datetime(2025, 1, 1, tzinfo=timezone.utc)
12+
FIXED_TIME = datetime(2025, 1, 1, tzinfo=UTC)
1313

1414

1515
class TestBeanDefaults:

tox.ini

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
[tox]
2-
env_list = py310, py311, py312, py313, py314
2+
env_list = py312, py313, py314
33
min_version = 4.0
44

55
[testenv]

uv.lock

Lines changed: 2 additions & 174 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)