Skip to content

Commit 7a819b1

Browse files
committed
Drop support for Python 3.9
1 parent cd12527 commit 7a819b1

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+343
-377
lines changed

.github/workflows/tests.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ jobs:
2323
strategy:
2424
max-parallel: 4
2525
matrix:
26-
python-version: [ "3.9", "3.10", "3.11", "3.12", "3.13" ]
26+
python-version: [ "3.10", "3.11", "3.12", "3.13" ]
2727
flask-version: [ "Flask>=2.0,<3.0", "Flask>=3.0" ]
2828
env:
2929
PYTHONPATH: .

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ The key features are:
3737

3838
## Requirements
3939

40-
Python 3.9+
40+
Python 3.10+
4141

4242
flask-openapi3 is dependent on the following libraries:
4343

docs/index.zh.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232

3333
## 依赖
3434

35-
Python 3.9+
35+
Python 3.10+
3636

3737
flask-openapi3 依赖以下库:
3838

examples/api_blueprint_demo.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
# @Author : llc
33
# @Time : 2021/6/6 14:05
44

5-
from typing import Optional
65

76
from pydantic import BaseModel, Field
87

@@ -37,7 +36,7 @@ class Unauthorized(BaseModel):
3736

3837

3938
class BookBody(BaseModel):
40-
age: Optional[int] = Field(..., ge=2, le=4, description="Age")
39+
age: int | None = Field(..., ge=2, le=4, description="Age")
4140
author: str = Field(None, min_length=2, max_length=4, description="Author")
4241

4342

examples/api_view_demo.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
# -*- coding: utf-8 -*-
22
# @Author : llc
33
# @Time : 2022/10/18 9:00
4-
from typing import Optional
54

65
from pydantic import BaseModel, Field
76

@@ -22,11 +21,11 @@ class BookPath(BaseModel):
2221

2322

2423
class BookQuery(BaseModel):
25-
age: Optional[int] = Field(None, description="Age")
24+
age: int | None = Field(None, description="Age")
2625

2726

2827
class BookBody(BaseModel):
29-
age: Optional[int] = Field(..., ge=2, le=4, description="Age")
28+
age: int | None = Field(..., ge=2, le=4, description="Age")
3029
author: str = Field(None, min_length=2, max_length=4, description="Author")
3130

3231

examples/async_demo.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
# @Author : llc
33
# @Time : 2022/11/30 14:55
44

5-
from typing import Optional
65

76
from pydantic import BaseModel, Field
87

@@ -17,11 +16,11 @@ class Query(BaseModel):
1716

1817

1918
class BookQuery(BaseModel):
20-
age: Optional[int] = Field(None, description="Age")
19+
age: int | None = Field(None, description="Age")
2120

2221

2322
class BookBody(BaseModel):
24-
age: Optional[int] = Field(..., ge=2, le=4, description="Age")
23+
age: int | None = Field(..., ge=2, le=4, description="Age")
2524
author: str = Field(None, min_length=2, max_length=4, description="Author")
2625

2726

examples/rest_demo.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
# @Author : llc
33
# @Time : 2021/4/28 11:24
44
from http import HTTPStatus
5-
from typing import Optional
65

76
from pydantic import BaseModel, Field
87

@@ -45,25 +44,25 @@ class BookPath(BaseModel):
4544

4645

4746
class BookQuery(BaseModel):
48-
age: Optional[int] = Field(None, description="Age")
47+
age: int | None = Field(None, description="Age")
4948
s_list: list[str] = Field(None, alias="s_list[]", description="some array")
5049

5150

5251
class BookBody(BaseModel):
53-
age: Optional[int] = Field(..., ge=2, le=4, description="Age")
52+
age: int | None = Field(..., ge=2, le=4, description="Age")
5453
author: str = Field(None, min_length=2, max_length=4, description="Author")
5554

5655

5756
class BookBodyWithID(BaseModel):
5857
bid: int = Field(..., description="book id")
59-
age: Optional[int] = Field(None, ge=2, le=4, description="Age")
58+
age: int | None = Field(None, ge=2, le=4, description="Age")
6059
author: str = Field(None, min_length=2, max_length=4, description="Author")
6160

6261

6362
class BookResponse(BaseModel):
6463
code: int = Field(0, description="Status Code")
6564
message: str = Field("ok", description="Exception Information")
66-
data: Optional[BookBodyWithID]
65+
data: BookBodyWithID | None
6766

6867

6968
@app.get(

flask_openapi3/blueprint.py

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
# @Author : llc
33
# @Time : 2022/4/1 16:54
44
import inspect
5-
from typing import Any, Callable, Optional
5+
from typing import Any, Callable
66

77
from flask import Blueprint
88

@@ -28,9 +28,9 @@ def __init__(
2828
name: str,
2929
import_name: str,
3030
*,
31-
abp_tags: Optional[list[Tag]] = None,
32-
abp_security: Optional[list[dict[str, list[str]]]] = None,
33-
abp_responses: Optional[ResponseDict] = None,
31+
abp_tags: list[Tag] | None = None,
32+
abp_security: list[dict[str, list[str]]] | None = None,
33+
abp_responses: ResponseDict | None = None,
3434
doc_ui: bool = True,
3535
operation_id_callback: Callable = get_operation_id_for_path,
3636
**kwargs: Any,
@@ -111,16 +111,16 @@ def _collect_openapi_info(
111111
rule: str,
112112
func: Callable,
113113
*,
114-
tags: Optional[list[Tag]] = None,
115-
summary: Optional[str] = None,
116-
description: Optional[str] = None,
117-
external_docs: Optional[ExternalDocumentation] = None,
118-
operation_id: Optional[str] = None,
119-
responses: Optional[ResponseDict] = None,
120-
deprecated: Optional[bool] = None,
121-
security: Optional[list[dict[str, list[Any]]]] = None,
122-
servers: Optional[list[Server]] = None,
123-
openapi_extensions: Optional[dict[str, Any]] = None,
114+
tags: list[Tag] | None = None,
115+
summary: str | None = None,
116+
description: str | None = None,
117+
external_docs: ExternalDocumentation | None = None,
118+
operation_id: str | None = None,
119+
responses: ResponseDict | None = None,
120+
deprecated: bool | None = None,
121+
security: list[dict[str, list[Any]]] | None = None,
122+
servers: list[Server] | None = None,
123+
openapi_extensions: dict[str, Any] | None = None,
124124
doc_ui: bool = True,
125125
method: str = HTTPMethod.GET,
126126
) -> ParametersTuple:

flask_openapi3/models/__init__.py

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -57,13 +57,13 @@ class APISpec(BaseModel):
5757

5858
openapi: str
5959
info: Info
60-
servers: Optional[list[Server]] = None
60+
servers: list[Server] | None = None
6161
paths: Paths
62-
components: Optional[Components] = None
63-
security: Optional[list[SecurityRequirement]] = None
64-
tags: Optional[list[Tag]] = None
65-
externalDocs: Optional[ExternalDocumentation] = None
66-
webhooks: Optional[dict[str, Union[PathItem, Reference]]] = None
62+
components: Components | None = None
63+
security: list[SecurityRequirement] | None = None
64+
tags: list[Tag] | None = None
65+
externalDocs: ExternalDocumentation | None = None
66+
webhooks: dict[str, PathItem | Reference] | None = None
6767

6868
model_config = {"extra": "allow"}
6969

@@ -73,15 +73,15 @@ class OAuthConfig(BaseModel):
7373
https://github.com/swagger-api/swagger-ui/blob/master/docs/usage/oauth2.md#oauth-20-configuration
7474
"""
7575

76-
clientId: Optional[str] = None
77-
clientSecret: Optional[str] = None
78-
realm: Optional[str] = None
79-
appName: Optional[str] = None
80-
scopeSeparator: Optional[str] = None
81-
scopes: Optional[str] = None
82-
additionalQueryStringParams: Optional[dict[str, str]] = None
83-
useBasicAuthenticationWithAccessCodeGrant: Optional[bool] = False
84-
usePkceWithAuthorizationCodeGrant: Optional[bool] = False
76+
clientId: str | None = None
77+
clientSecret: str | None = None
78+
realm: str | None = None
79+
appName: str | None = None
80+
scopeSeparator: str | None = None
81+
scopes: str | None = None
82+
additionalQueryStringParams: dict[str, str] | None = None
83+
useBasicAuthenticationWithAccessCodeGrant: bool | None = False
84+
usePkceWithAuthorizationCodeGrant: bool | None = False
8585

8686

8787
class RawModel(Request):

flask_openapi3/models/components.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# -*- coding: utf-8 -*-
22
# @Author : llc
33
# @Time : 2023/7/4 9:36
4-
from typing import Any, Optional, Union
4+
from typing import Any
55

66
from pydantic import BaseModel, Field
77

@@ -23,15 +23,15 @@ class Components(BaseModel):
2323
https://spec.openapis.org/oas/v3.1.0#components-object
2424
"""
2525

26-
schemas: Optional[dict[str, Union[Reference, Schema]]] = Field(None)
27-
responses: Optional[dict[str, Union[Response, Reference]]] = None
28-
parameters: Optional[dict[str, Union[Parameter, Reference]]] = None
29-
examples: Optional[dict[str, Union[Example, Reference]]] = None
30-
requestBodies: Optional[dict[str, Union[RequestBody, Reference]]] = None
31-
headers: Optional[dict[str, Union[Header, Reference]]] = None
32-
securitySchemes: Optional[dict[str, Union[SecurityScheme, dict[str, Any]]]] = None
33-
links: Optional[dict[str, Union[Link, Reference]]] = None
34-
callbacks: Optional[dict[str, Union[Callback, Reference]]] = None
35-
pathItems: Optional[dict[str, Union[PathItem, Reference]]] = None
26+
schemas: dict[str, Reference | Schema] | None = Field(None)
27+
responses: dict[str, Response | Reference] | None = None
28+
parameters: dict[str, Parameter | Reference] | None = None
29+
examples: dict[str, Example | Reference] | None = None
30+
requestBodies: dict[str, RequestBody | Reference] | None = None
31+
headers: dict[str, Header | Reference] | None = None
32+
securitySchemes: dict[str, SecurityScheme | dict[str, Any]] | None = None
33+
links: dict[str, Link | Reference] | None = None
34+
callbacks: dict[str, Callback | Reference] | None = None
35+
pathItems: dict[str, PathItem | Reference] | None = None
3636

3737
model_config = {"extra": "allow"}

0 commit comments

Comments
 (0)