Skip to content

Commit 9eb752c

Browse files
committed
chore: drop Python 3.10 support
1 parent 5dc8212 commit 9eb752c

8 files changed

Lines changed: 7 additions & 92 deletions

File tree

‎.github/workflows/tests.yaml‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ jobs:
2828
- '3.13'
2929
- '3.12'
3030
- '3.11'
31-
- '3.10'
3231
steps:
3332
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
3433
- name: Install uv

‎.pre-commit-config.yaml‎

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,4 @@ repos:
1919
rev: 57b21406f092110c18776e39b0bda50d37c945c8 # frozen: v2.4.3
2020
hooks:
2121
- id: codespell
22-
language: python
23-
additional_dependencies:
24-
- tomli==2.4.1
2522
args: [--write-changes]

‎pyproject.toml‎

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ keywords = ["scim", "scim2", "provisioning", "rfc7643", "rfc7644"]
1616
classifiers = [
1717
"Intended Audience :: Developers",
1818
"Development Status :: 4 - Beta",
19-
"Programming Language :: Python :: 3.10",
2019
"Programming Language :: Python :: 3.11",
2120
"Programming Language :: Python :: 3.12",
2221
"Programming Language :: Python :: 3.13",
@@ -28,7 +27,7 @@ classifiers = [
2827
"Operating System :: OS Independent",
2928
]
3029

31-
requires-python = ">= 3.10"
30+
requires-python = ">= 3.11"
3231
dependencies = [
3332
"scim2-filter-parser>=0.7.0",
3433
"scim2-models>=0.8.2",
@@ -115,7 +114,6 @@ doctest_optionflags= "ALLOW_UNICODE IGNORE_EXCEPTION_DETAIL ELLIPSIS"
115114
requires = ["tox>=4.19"]
116115
env_list = [
117116
"style",
118-
"py310",
119117
"py311",
120118
"py312",
121119
"py313",

‎scim2_server/backend.py‎

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,7 @@ def create_resource(
259259
) -> Resource | None:
260260
resource = resource.model_copy(deep=True)
261261
resource.id = uuid.uuid4().hex
262-
utcnow = datetime.datetime.now(datetime.timezone.utc)
262+
utcnow = datetime.datetime.now(datetime.UTC)
263263
resource.meta = Meta(
264264
resource_type=resource_type.name,
265265
created=utcnow,
@@ -307,9 +307,7 @@ def update_resource(
307307
found_res_idx = self._get_resource_idx(resource_type, resource.id)
308308
if found_res_idx is not None:
309309
updated_resource = type(resource).model_validate(resource.model_dump())
310-
self._touch_resource(
311-
updated_resource, datetime.datetime.now(datetime.timezone.utc)
312-
)
310+
self._touch_resource(updated_resource, datetime.datetime.now(datetime.UTC))
313311

314312
self._check_uniqueness(updated_resource)
315313
self.resources[found_res_idx] = updated_resource

‎scim2_server/utils.py‎

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
import datetime
22
import importlib.resources
33
import json
4-
import re
5-
import sys
64
from typing import Any
75

86
from pydantic import EmailStr
@@ -159,9 +157,6 @@ def parse_value(field_root_type: type, value: Any) -> Any:
159157
return not value.lower() == "false"
160158

161159
if field_root_type is datetime.datetime and isinstance(value, str):
162-
# ISO 8601 datetime format (notably with the Z suffix) are only supported from Python 3.11
163-
if sys.version_info < (3, 11): # pragma: no cover
164-
return datetime.datetime.fromisoformat(re.sub(r"Z$", "+00:00", value))
165160
return datetime.datetime.fromisoformat(value)
166161

167162
if field_root_type is EmailStr and isinstance(value, str):

‎tests/integration/test_scim_application.py‎

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -999,17 +999,13 @@ def test_resource_search_post(self, wsgi, first_fake_user):
999999
assert r.status_code == 404
10001000

10011001
def test_resource_meta_dates(self, wsgi, fake_user_data):
1002-
@time_machine.travel(
1003-
datetime.datetime(2024, 3, 14, 6, 00, tzinfo=datetime.timezone.utc)
1004-
)
1002+
@time_machine.travel(datetime.datetime(2024, 3, 14, 6, 00, tzinfo=datetime.UTC))
10051003
def create_user():
10061004
r = wsgi.post("/v2/Users", json=fake_user_data[1])
10071005
assert r.status_code == 201
10081006
return r.json()
10091007

1010-
@time_machine.travel(
1011-
datetime.datetime(2024, 3, 16, 8, 30, tzinfo=datetime.timezone.utc)
1012-
)
1008+
@time_machine.travel(datetime.datetime(2024, 3, 16, 8, 30, tzinfo=datetime.UTC))
10131009
def update_user(user_id):
10141010
r = wsgi.put(f"/v2/Users/{user_id}", json={"userName": "Foo"})
10151011
assert r.status_code == 200

‎tests/test_operators.py‎

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -286,9 +286,7 @@ class Foo(Resource):
286286

287287
f = Foo()
288288
AddOperator("dt", "2010-01-23T04:56:22Z")(f)
289-
assert f.dt == datetime.datetime(
290-
2010, 1, 23, 4, 56, 22, tzinfo=datetime.timezone.utc
291-
)
289+
assert f.dt == datetime.datetime(2010, 1, 23, 4, 56, 22, tzinfo=datetime.UTC)
292290

293291
def test_add_operator_extension_simple(self):
294292
u = User[EnterpriseUser]()

‎uv.lock‎

Lines changed: 1 addition & 67 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)