Skip to content

Commit 1092836

Browse files
committed
style: ran 'find -name *.py -not -path ./src/diracx/client/* -exec pyupgrade --py311-plus {} +'
1 parent 258f633 commit 1092836

File tree

7 files changed

+28
-64
lines changed

7 files changed

+28
-64
lines changed

src/diracx/cli/__init__.py

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import json
55
import os
66
from datetime import datetime, timedelta, timezone
7-
from typing import Optional
87

98
from typer import Option
109

@@ -22,10 +21,8 @@
2221
@app.async_command()
2322
async def login(
2423
vo: str,
25-
group: Optional[str] = None,
26-
property: Optional[list[str]] = Option(
27-
None, help="Override the default(s) with one or more properties"
28-
),
24+
group: str | None = None,
25+
property: list[str] | None = Option(None, help="Override the default(s) with one or more properties"),
2926
):
3027
scopes = [f"vo:{vo}"]
3128
if group:
@@ -61,9 +58,7 @@ async def login(
6158
raise RuntimeError("Device authorization flow expired")
6259

6360
CREDENTIALS_PATH.parent.mkdir(parents=True, exist_ok=True)
64-
expires = datetime.now(tz=timezone.utc) + timedelta(
65-
seconds=response.expires_in - EXPIRES_GRACE_SECONDS
66-
)
61+
expires = datetime.now(tz=timezone.utc) + timedelta(seconds=response.expires_in - EXPIRES_GRACE_SECONDS)
6762
credential_data = {
6863
"access_token": response.access_token,
6964
# TODO: "refresh_token":
@@ -82,7 +77,7 @@ async def logout():
8277

8378

8479
@app.callback()
85-
def callback(output_format: Optional[str] = None):
80+
def callback(output_format: str | None = None):
8681
if "DIRACX_OUTPUT_FORMAT" not in os.environ:
8782
output_format = output_format or "rich"
8883
if output_format is not None:

src/diracx/cli/internal.py

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
from __future__ import absolute_import
2-
31
import json
42
from pathlib import Path
53

@@ -47,11 +45,7 @@ def generate_cs(
4745
IdP=IdpConfig(URL=idp_url, ClientID=idp_client_id),
4846
DefaultGroup=user_group,
4947
Users={},
50-
Groups={
51-
user_group: GroupConfig(
52-
JobShare=None, Properties=["NormalUser"], Quota=None, Users=[]
53-
)
54-
},
48+
Groups={user_group: GroupConfig(JobShare=None, Properties=["NormalUser"], Quota=None, Users=[])},
5549
)
5650
config = Config(
5751
Registry={vo: registry},
@@ -105,7 +99,5 @@ def add_user(
10599
config_data = json.loads(config.json(exclude_unset=True))
106100
yaml_path.write_text(yaml.safe_dump(config_data))
107101
repo.index.add([yaml_path.relative_to(repo_path)])
108-
repo.index.commit(
109-
f"Added user {sub} ({preferred_username}) to vo {vo} and user_group {user_group}"
110-
)
102+
repo.index.commit(f"Added user {sub} ({preferred_username}) to vo {vo} and user_group {user_group}")
111103
typer.echo(f"Successfully added user to {config_repo}", err=True)

src/diracx/core/config/schema.py

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import os
44
from datetime import datetime
5-
from typing import Any, Optional
5+
from typing import Any
66

77
from pydantic import BaseModel as _BaseModel
88
from pydantic import EmailStr, PrivateAttr, root_validator
@@ -22,9 +22,7 @@ def legacy_adaptor(cls, v):
2222
# though ideally we should parse the type hints properly.
2323
for field, hint in cls.__annotations__.items():
2424
# Convert comma separated lists to actual lists
25-
if hint in {"list[str]", "list[SecurityProperty]"} and isinstance(
26-
v.get(field), str
27-
):
25+
if hint in {"list[str]", "list[SecurityProperty]"} and isinstance(v.get(field), str):
2826
v[field] = [x.strip() for x in v[field].split(",") if x.strip()]
2927
# If the field is optional and the value is "None" convert it to None
3028
if "| None" in hint and field in v:
@@ -49,12 +47,12 @@ class GroupConfig(BaseModel):
4947
AutoAddVOMS: bool = False
5048
AutoUploadPilotProxy: bool = False
5149
AutoUploadProxy: bool = False
52-
JobShare: Optional[int]
50+
JobShare: int | None
5351
Properties: list[SecurityProperty]
54-
Quota: Optional[int]
52+
Quota: int | None
5553
Users: list[str]
5654
AllowBackgroundTQs: bool = False
57-
VOMSRole: Optional[str]
55+
VOMSRole: str | None
5856
AutoSyncVOMS: bool = False
5957

6058

src/diracx/core/extensions.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
1-
from __future__ import absolute_import
2-
31
__all__ = ("select_from_extension",)
42

53
import os
64
from collections import defaultdict
5+
from collections.abc import Iterator
76
from importlib.metadata import EntryPoint, entry_points
87
from importlib.util import find_spec
9-
from typing import Iterator
108

119

1210
def extensions_by_priority() -> Iterator[str]:
@@ -17,9 +15,7 @@ def extensions_by_priority() -> Iterator[str]:
1715
yield module_name
1816

1917

20-
def select_from_extension(
21-
*, group: str, name: str | None = None
22-
) -> Iterator[EntryPoint]:
18+
def select_from_extension(*, group: str, name: str | None = None) -> Iterator[EntryPoint]:
2319
"""Select entry points by group and name, in order of priority.
2420
2521
Similar to ``importlib.metadata.entry_points.select`` except only modules

src/diracx/core/properties.py

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
import inspect
77
import operator
8-
from typing import Callable
8+
from collections.abc import Callable
99

1010
from diracx.core.extensions import select_from_extension
1111

@@ -14,9 +14,7 @@ class SecurityProperty(str):
1414
@classmethod
1515
def available_properties(cls) -> set[SecurityProperty]:
1616
properties = set()
17-
for entry_point in select_from_extension(
18-
group="diracx", name="properties_module"
19-
):
17+
for entry_point in select_from_extension(group="diracx", name="properties_module"):
2018
properties_module = entry_point.load()
2119
for _, obj in inspect.getmembers(properties_module):
2220
if isinstance(obj, SecurityProperty):
@@ -26,23 +24,17 @@ def available_properties(cls) -> set[SecurityProperty]:
2624
def __repr__(self) -> str:
2725
return f"{self.__class__.__name__}({self})"
2826

29-
def __and__(
30-
self, value: SecurityProperty | UnevaluatedProperty
31-
) -> UnevaluatedExpression:
27+
def __and__(self, value: SecurityProperty | UnevaluatedProperty) -> UnevaluatedExpression:
3228
if not isinstance(value, UnevaluatedProperty):
3329
value = UnevaluatedProperty(value)
3430
return UnevaluatedProperty(self) & value
3531

36-
def __or__(
37-
self, value: SecurityProperty | UnevaluatedProperty
38-
) -> UnevaluatedExpression:
32+
def __or__(self, value: SecurityProperty | UnevaluatedProperty) -> UnevaluatedExpression:
3933
if not isinstance(value, UnevaluatedProperty):
4034
value = UnevaluatedProperty(value)
4135
return UnevaluatedProperty(self) | value
4236

43-
def __xor__(
44-
self, value: SecurityProperty | UnevaluatedProperty
45-
) -> UnevaluatedExpression:
37+
def __xor__(self, value: SecurityProperty | UnevaluatedProperty) -> UnevaluatedExpression:
4638
if not isinstance(value, UnevaluatedProperty):
4739
value = UnevaluatedProperty(value)
4840
return UnevaluatedProperty(self) ^ value

src/diracx/db/utils.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,10 @@
55
import contextlib
66
import os
77
from abc import ABCMeta
8+
from collections.abc import AsyncIterator
89
from datetime import datetime, timedelta, timezone
910
from functools import partial
10-
from typing import TYPE_CHECKING, AsyncIterator, Self
11+
from typing import TYPE_CHECKING, Self
1112

1213
from pydantic import parse_obj_as
1314
from sqlalchemy import Column as RawColumn

src/diracx/routers/__init__.py

Lines changed: 8 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,9 @@
33
import inspect
44
import logging
55
import os
6+
from collections.abc import AsyncGenerator, Iterable
67
from functools import partial
7-
from typing import AsyncContextManager, AsyncGenerator, Iterable, TypeVar
8+
from typing import AsyncContextManager, TypeVar
89

910
import dotenv
1011
from fastapi import APIRouter, Depends, Request
@@ -59,8 +60,7 @@ def create_app_inner(
5960
available_db_classes: set[type[BaseDB]] = set()
6061
for db_name, db_url in database_urls.items():
6162
db_classes: list[type[BaseDB]] = [
62-
entry_point.load()
63-
for entry_point in select_from_extension(group="diracx.dbs", name=db_name)
63+
entry_point.load() for entry_point in select_from_extension(group="diracx.dbs", name=db_name)
6464
]
6565
assert db_classes, f"Could not find {db_name=}"
6666
# The first DB is the highest priority one
@@ -79,9 +79,7 @@ def create_app_inner(
7979
# Without this AutoREST generates different client sources for each ordering
8080
for system_name in sorted(enabled_systems):
8181
assert system_name not in routers
82-
for entry_point in select_from_extension(
83-
group="diracx.services", name=system_name
84-
):
82+
for entry_point in select_from_extension(group="diracx.services", name=system_name):
8583
routers[system_name] = entry_point.load()
8684
break
8785
else:
@@ -92,16 +90,12 @@ def create_app_inner(
9290
# Ensure required settings are available
9391
for cls in find_dependents(router, ServiceSettingsBase):
9492
if cls not in available_settings_classes:
95-
raise NotImplementedError(
96-
f"Cannot enable {system_name=} as it requires {cls=}"
97-
)
93+
raise NotImplementedError(f"Cannot enable {system_name=} as it requires {cls=}")
9894

9995
# Ensure required DBs are available
10096
missing_dbs = set(find_dependents(router, BaseDB)) - available_db_classes
10197
if missing_dbs:
102-
raise NotImplementedError(
103-
f"Cannot enable {system_name=} as it requires {missing_dbs=}"
104-
)
98+
raise NotImplementedError(f"Cannot enable {system_name=} as it requires {missing_dbs=}")
10599

106100
# Add the router to the application
107101
dependencies = []
@@ -155,18 +149,14 @@ def create_app() -> DiracFastAPI:
155149

156150

157151
def dirac_error_handler(request: Request, exc: DiracError) -> Response:
158-
return JSONResponse(
159-
status_code=exc.http_status_code, content={"detail": exc.detail}
160-
)
152+
return JSONResponse(status_code=exc.http_status_code, content={"detail": exc.detail})
161153

162154

163155
def http_response_handler(request: Request, exc: DiracHttpResponse) -> Response:
164156
return JSONResponse(status_code=exc.status_code, content=exc.data)
165157

166158

167-
def find_dependents(
168-
obj: APIRouter | Iterable[Dependant], cls: type[T]
169-
) -> Iterable[type[T]]:
159+
def find_dependents(obj: APIRouter | Iterable[Dependant], cls: type[T]) -> Iterable[type[T]]:
170160
if isinstance(obj, APIRouter):
171161
# TODO: Support dependencies of the router itself
172162
# yield from find_dependents(obj.dependencies, cls)

0 commit comments

Comments
 (0)