Skip to content
Open
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
6 changes: 6 additions & 0 deletions src/openapi_python_generator/generate_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,12 @@ def write_data(
# Write the api_config.py file.
write_code(Path(output) / "api_config.py", data.api_config.content, formatter)

# Write static files (if any).
for static_file in data.static_files:
write_code(
Path(output) / f"{static_file.file_name}.py", static_file.content, formatter
)

# Write the __init__.py file.
write_code(
Path(output) / "__init__.py",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@
from openapi_python_generator.language_converters.python.service_generator import (
generate_services,
)
from openapi_python_generator.language_converters.python.static_file_generator import (
generate_static_files,
)
from openapi_python_generator.models import ConversionResult, LibraryConfig

# Type alias for both OpenAPI versions
Expand Down Expand Up @@ -46,9 +49,11 @@ def generator(
services = []

api_config = generate_api_config(data, env_token_name, pydantic_version)
static_files = generate_static_files()

return ConversionResult(
models=models,
services=services,
api_config=api_config,
static_files=static_files,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
"""Generator for static files that are copied to the generated client."""

from typing import List

from ...models import StaticFile


def generate_static_files() -> List[StaticFile]:
"""
Generate static files that will be copied to the generated client.

Returns:
List of StaticFile objects containing file names and content.
"""
return []
6 changes: 6 additions & 0 deletions src/openapi_python_generator/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,13 @@ class APIConfig(BaseModel):
content: str


class StaticFile(BaseModel):
file_name: str
content: str


class ConversionResult(BaseModel):
models: List[Model]
services: List[Service]
api_config: APIConfig
static_files: List[StaticFile] = []
73 changes: 73 additions & 0 deletions tests/test_static_files.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
"""Test static file generation and inclusion."""

import tempfile
from pathlib import Path

from openapi_python_generator.common import Formatter
from openapi_python_generator.generate_data import write_data
from openapi_python_generator.models import ConversionResult, APIConfig, StaticFile


def test_static_files_are_written():
"""Test that static files are written to the output directory."""
# Create a minimal ConversionResult with static files
result = ConversionResult(
models=[],
services=[],
api_config=APIConfig(
file_name="api_config",
base_url="https://api.example.com",
content="class APIConfig:\n pass\n",
),
static_files=[
StaticFile(
file_name="errors",
content='"""Error types."""\nclass APIError(Exception):\n pass\n',
),
StaticFile(
file_name="response",
content='"""Response wrapper."""\nclass DetailedResponse:\n pass\n',
),
],
)

# Write to temp directory
with tempfile.TemporaryDirectory() as tmpdir:
output_path = Path(tmpdir) / "generated"
write_data(result, output_path, Formatter.NONE)

# Verify static files were created
assert (output_path / "errors.py").exists()
assert (output_path / "response.py").exists()

# Verify content
errors_content = (output_path / "errors.py").read_text()
assert "class APIError" in errors_content

response_content = (output_path / "response.py").read_text()
assert "class DetailedResponse" in response_content


def test_empty_static_files():
"""Test that empty static files list doesn't cause issues."""
result = ConversionResult(
models=[],
services=[],
api_config=APIConfig(
file_name="api_config",
base_url="https://api.example.com",
content="class APIConfig:\n pass\n",
),
static_files=[], # Empty list
)

# Write to temp directory
with tempfile.TemporaryDirectory() as tmpdir:
output_path = Path(tmpdir) / "generated"
write_data(result, output_path, Formatter.NONE)

# Verify basic structure still created
assert (output_path / "api_config.py").exists()
assert (output_path / "__init__.py").exists()
assert (output_path / "models").is_dir()
assert (output_path / "services").is_dir()