Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,13 @@ from fastapi import ( # noqa: F401
status,
)

from {{modelPackage}}.extra_models import TokenModel # noqa: F401
{{#imports}}
{{import}}
{{/imports}}
{{#securityImports.0}}from {{packageName}}.security_api import {{#securityImports}}get_token_{{.}}{{^-last}}, {{/-last}}{{/securityImports}}{{/securityImports.0}}
{{#securityImports.0}}
from {{modelPackage}}.extra_models import TokenModel # noqa: F401
from {{packageName}}.security_api import {{#securityImports}}get_token_{{.}}{{^-last}}, {{/-last}}{{/securityImports}}
{{/securityImports.0}}

router = APIRouter()

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -268,4 +268,23 @@ public void testEndpointArgumentCommaStaysOnSameLine() throws IOException {
Assert.assertFalse(content.contains("\n,\n"),
"comma wrapped onto its own line in: " + api);
}

@Test(description = "security imports are emitted only for APIs with authenticated operations (#23008)")
public void testSecurityImportsRequireAuthenticatedOperations() throws IOException {
final DefaultCodegen unauthenticatedCodegen = new PythonFastAPIServerCodegen();
final String unauthenticatedOutputPath = generateFiles(unauthenticatedCodegen, "src/test/resources/bugs/issue_23008.yaml");
final Path unauthenticatedApi = Paths.get(unauthenticatedOutputPath + "src/openapi_server/apis/default_api.py");

assertFileExists(unauthenticatedApi);
assertFileNotContains(unauthenticatedApi, "from openapi_server.models.extra_models import TokenModel");
assertFileNotContains(unauthenticatedApi, "from openapi_server.security_api import");

final DefaultCodegen authenticatedCodegen = new PythonFastAPIServerCodegen();
final String authenticatedOutputPath = generateFiles(authenticatedCodegen, "src/test/resources/3_0/python-fastapi/petstore.yaml");
final Path authenticatedApi = Paths.get(authenticatedOutputPath + "src/openapi_server/apis/pet_api.py");

assertFileExists(authenticatedApi);
assertFileContains(authenticatedApi, "from openapi_server.models.extra_models import TokenModel");
assertFileContains(authenticatedApi, "from openapi_server.security_api import get_token_");
}
}
26 changes: 26 additions & 0 deletions modules/openapi-generator/src/test/resources/bugs/issue_23008.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
openapi: 3.0.3
info:
title: Supporting-files reproduction
version: 1.0.0
paths:
/pets:
get:
operationId: listPets
responses:
"200":
description: A list of pets
content:
application/json:
schema:
type: array
items:
$ref: "#/components/schemas/Pet"
components:
schemas:
Pet:
type: object
required:
- name
properties:
name:
type: string
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,10 @@
status,
)

from openapi_server.models.extra_models import TokenModel # noqa: F401
from pydantic import Field
from typing import Any, Optional
from typing_extensions import Annotated


router = APIRouter()

ns_pkg = openapi_server.impl
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,13 @@
status,
)

from openapi_server.models.extra_models import TokenModel # noqa: F401
from pydantic import Field, StrictBytes, StrictStr, field_validator
from typing import Any, List, Optional, Tuple, Union
from typing_extensions import Annotated
from openapi_server.models.api_response import ApiResponse
from openapi_server.models.pet import Pet
from fastapi import File, UploadFile
from openapi_server.models.extra_models import TokenModel # noqa: F401
from openapi_server.security_api import get_token_petstore_auth, get_token_api_key

router = APIRouter()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,11 @@
status,
)

from openapi_server.models.extra_models import TokenModel # noqa: F401
from pydantic import Field, StrictInt
from typing import Any, Dict
from typing_extensions import Annotated
from openapi_server.models.order import Order
from openapi_server.models.extra_models import TokenModel # noqa: F401
from openapi_server.security_api import get_token_api_key

router = APIRouter()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,11 @@
status,
)

from openapi_server.models.extra_models import TokenModel # noqa: F401
from pydantic import Field, StrictStr, field_validator
from typing import Any, List
from typing_extensions import Annotated
from openapi_server.models.user import User
from openapi_server.models.extra_models import TokenModel # noqa: F401
from openapi_server.security_api import get_token_api_key

router = APIRouter()
Expand Down
Loading