Skip to content

Commit d20da11

Browse files
authored
Merge pull request #877 from msaizar/remove-ann001
Remove ANN001 from pyproject.toml
2 parents d2fdcd9 + 7d02c26 commit d20da11

23 files changed

+137
-75
lines changed

examples/airblog/airblog.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,14 +39,14 @@ def get_tags() -> dict[str, int]:
3939
return tags
4040

4141

42-
def NavBar(request):
42+
def NavBar(request: air.Request):
4343
return air.Nav(
4444
air.A("Home", href=request.url_for("index")),
4545
air.A("Tags", href=tags.url()),
4646
)
4747

4848

49-
def BlogPostPreview(article, request):
49+
def BlogPostPreview(article: dict, request: air.Request):
5050
return air.Aside(
5151
air.H3(
5252
air.A(

examples/airblog/test_airblog.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import multiprocessing
66
import socket
77
import time
8+
from multiprocessing.queues import Queue
89

910
import pytest
1011
import uvicorn
@@ -26,7 +27,7 @@ def get_free_port() -> int:
2627
return port
2728

2829

29-
def run_server(port_queue):
30+
def run_server(port_queue: Queue[int]) -> None:
3031
"Runs the AirBlog server on a free port and communicates the port back via a queue."
3132
# Get an available port number from the operating system
3233
port = get_free_port()
@@ -81,15 +82,15 @@ def test_index_route_renders():
8182

8283

8384
# END-TO-END TEST - Tests full application flow with real browser
84-
def test_navigate_to_article_via_click(page: Page, live_server):
85+
def test_navigate_to_article_via_click(page: Page, live_server: int) -> None:
8586
page.goto(f"http://localhost:{live_server}")
8687
page.click("text=Hello World")
8788
expect(page).to_have_url(f"http://localhost:{live_server}/article/hello-world")
8889
expect(page.locator("h1")).to_contain_text("Hello World")
8990

9091

9192
# ACCESSIBILITY TEST - Verifies proper semantic structure
92-
def test_page_accessibility(page: Page, live_server):
93+
def test_page_accessibility(page: Page, live_server: int) -> None:
9394
page.goto(f"http://localhost:{live_server}")
9495
expect(page.locator("h1")).to_be_visible()
9596
expect(page.locator("nav")).to_be_visible()

examples/instrument.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
"""
77

88
from pyinstrument import Profiler
9+
from starlette.middleware.base import RequestResponseEndpoint
910

1011
import air
1112
from air import Children, Html
@@ -14,7 +15,7 @@
1415

1516

1617
@app.middleware("http")
17-
async def profile_request(request: air.Request, call_next):
18+
async def profile_request(request: air.Request, call_next: RequestResponseEndpoint):
1819
profiling = request.query_params.get("profile", False)
1920
if profiling:
2021
profiler = Profiler()

examples/mvpcss_hxboost.py

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

55

66
@app.page
7-
async def index(is_htmx=air.is_htmx_request):
7+
async def index(*, is_htmx: bool = air.is_htmx_request):
88
return air.layouts.mvpcss(
99
air.Title("Home"),
1010
air.Article(
@@ -15,7 +15,7 @@ async def index(is_htmx=air.is_htmx_request):
1515

1616

1717
@app.page
18-
async def dashboard(is_htmx=air.is_htmx_request):
18+
async def dashboard(*, is_htmx: bool = air.is_htmx_request):
1919
return air.layouts.mvpcss(
2020
air.Title("Dashboard"),
2121
air.Article(air.H1("Dashboard"), air.P(air.A("Go home", href="/")), hx_boost="true"),

examples/src/background__BackgroundTasks.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
app = air.Air()
66

77

8-
def write_notification(email: str, message=""):
8+
def write_notification(email: str, message: str = "") -> None:
99
with pathlib.Path("log.txt").open(mode="w") as email_file:
1010
content = f"notification for {email}: {message}"
1111
email_file.write(content)

examples/src/forms__AirForm__widget.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
from collections.abc import Sequence
2+
3+
from pydantic import BaseModel
4+
15
import air
26
from air.forms import default_form_widget
37

@@ -12,7 +16,14 @@ class ContactModel(air.AirModel):
1216
message: str
1317

1418

15-
def contact_widget(*, model, data, errors, includes):
19+
def contact_widget(
20+
*,
21+
model: type[BaseModel],
22+
data: dict | None = None,
23+
errors: list | None = None,
24+
includes: Sequence[str] | None = None,
25+
):
26+
1627
base_html = default_form_widget(
1728
model=model,
1829
data=data,

examples/src/models__AirModel__to_form.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
from collections.abc import Sequence
2+
3+
from pydantic import BaseModel
4+
15
import air
26
from air.forms import default_form_widget
37

@@ -10,7 +14,12 @@ class ContactModel(air.AirModel):
1014
phone: str | None = None
1115

1216

13-
def custom_widget(model, data=None, errors=None, includes=None):
17+
def custom_widget(
18+
model: type[BaseModel],
19+
data: dict | None = None,
20+
errors: list | None = None,
21+
includes: Sequence[str] | None = None,
22+
):
1423
return air.Div(
1524
air.P("Custom form styling:"),
1625
air.Raw(default_form_widget(model, data, errors, includes)),

pyproject.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -352,7 +352,6 @@ ignore = [
352352
"PLC0414", # keep explicit alias
353353
# TODO -> Remove the rules below this line
354354
"RUF029", # Function is declared `async`, but doesn't `await` or use `async` features.
355-
"ANN001", # https://docs.astral.sh/ruff/rules/missing-type-function-argument
356355
"ANN201", # https://docs.astral.sh/ruff/rules/missing-return-type-undocumented-public-function
357356
"ANN202", # https://docs.astral.sh/ruff/rules/missing-return-type-private-function
358357
"ANN401", # https://docs.astral.sh/ruff/rules/any-type

src/air/background.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ class BackgroundTasks(FastAPIBackgroundTasks):
2020
app = air.Air()
2121
2222
23-
def write_notification(email: str, message=""):
23+
def write_notification(email: str, message: str = "") -> None:
2424
with pathlib.Path("log.txt").open(mode="w") as email_file:
2525
content = f"notification for {email}: {message}"
2626
email_file.write(content)

src/air/forms.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,10 @@ def widget(self) -> Callable:
189189
190190
Example:
191191
192+
from collections.abc import Sequence
193+
194+
from pydantic import BaseModel
195+
192196
import air
193197
from air.forms import default_form_widget
194198
@@ -203,7 +207,14 @@ class ContactModel(air.AirModel):
203207
message: str
204208
205209
206-
def contact_widget(*, model, data, errors, includes):
210+
def contact_widget(
211+
*,
212+
model: type[BaseModel],
213+
data: dict | None = None,
214+
errors: list | None = None,
215+
includes: Sequence[str] | None = None,
216+
):
217+
207218
base_html = default_form_widget(
208219
model=model,
209220
data=data,

0 commit comments

Comments
 (0)