Skip to content

Latest commit

 

History

History
178 lines (136 loc) · 6.76 KB

File metadata and controls

178 lines (136 loc) · 6.76 KB

OpenAPI 3.1 Support Status Summary

Overview

This document provides a comprehensive assessment of OpenAPI 3.1 schema feature support in the openapi-python-generator project.

Current Status: 176 ✅ / 11 ❌ (94% Pass Rate)

The project has excellent OpenAPI 3.1 support for core features, with the new keyword-only API design improvements successfully implemented. The only remaining limitations are around advanced JSON Schema Draft 2020-12 features that require boolean schema values.

Fully Supported OpenAPI 3.1 Features

1. Core 3.1 Features

  • const keyword for fixed values
  • jsonSchemaDialect metadata field
  • Numeric exclusiveMinimum/exclusiveMaximum (as numbers, not booleans)
  • Enhanced discriminator support with anyOf/oneOf

2. Advanced JSON Schema Features

  • prefixItems (tuple validation)
  • contains, minContains, maxContains (array content validation)
  • dependentSchemas (conditional schema dependencies)
  • patternProperties (dynamic property validation)
  • if/then/else conditional logic (as schema_if/then/schema_else)

3. API Design Improvements

  • Keyword-only parameters: All service functions now use *, param=value syntax
  • Consistent parameter ordering: api_config_override is always the first parameter
  • Prevents parameter confusion: No more accidental passing of config as operation parameter

4. Code Generation

  • ✅ Full model generation with 3.1 schema features
  • ✅ Service generation with improved parameter handling
  • ✅ Compilation validation for all generated code
  • ✅ Support for all HTTP libraries (httpx, requests, aiohttp)

Limited Support (Library Constraint)

The following OpenAPI 3.1 features are NOT currently supported due to limitations in the underlying openapi-pydantic library (version 0.5.1, latest available):

1. Boolean Schemas

{
  "schemas": {
    "AlwaysValid": true,     // ❌ Not supported
    "AlwaysInvalid": false   // ❌ Not supported
  }
}

2. Boolean Values for Schema Properties

{
  "type": "array",
  "prefixItems": [{"type": "string"}],
  "items": false,  // ❌ Not supported (expects Schema object)
  "unevaluatedProperties": false  // ❌ Not supported (expects Schema object)
}

Root Cause: The openapi-pydantic library's Schema model expects Schema/Reference objects for these fields, not boolean values, despite JSON Schema Draft 2020-12 allowing booleans.

📊 Test Coverage Analysis

Existing Test Suite: 176 Passing Tests

  • OpenAPI 3.0 compatibility: ✅ Full support
  • OpenAPI 3.1 core features: ✅ Full support
  • Regression tests: ✅ All passing
  • Code generation: ✅ All libraries working
  • Parameter ordering: ✅ Fixed and validated

New 3.1 Coverage Tests: 13 Passing Tests

  • Supported feature validation: ✅ 10/10 tests pass
  • Unsupported feature detection: ✅ 2/2 tests correctly fail
  • Feature comparison (3.0 vs 3.1): ✅ 1/1 test passes

Failed Tests: 11 Expected Failures

All failures are in test_openapi_31_schema_features.py and are expected because they test features not supported by the current library version.

🚀 Recent Improvements Completed

1. API Design Enhancement

Problem: Service functions had parameter ordering issues where api_config could be confused with operation parameters.

Solution: Implemented keyword-only parameter design:

# Before (confusing)
def create_user(api_config, name, email, age)

# After (robust)  
def create_user(api_config_override=None, *, name, email, age)

Templates Updated:

  • src/openapi_python_generator/language_converters/python/templates/httpx.jinja2
  • src/openapi_python_generator/language_converters/python/templates/requests.jinja2
  • src/openapi_python_generator/language_converters/python/templates/aiohttp.jinja2

2. Comprehensive Testing Framework

Created tests/test_openapi_31_coverage.py with systematic validation of:

  • All supported 3.1 features
  • Detection of unsupported features
  • Code generation with 3.1 schemas
  • Comparison between 3.0 and 3.1 behavior

🔬 Technical Analysis

Library Limitation Investigation

The openapi-pydantic library (v0.5.1, latest available) has the following field definitions:

# These fields exist but don't accept boolean values:
items: Union[Schema, Reference, None] = None          # Should accept False
unevaluatedProperties: Union[Schema, Reference, None] = None  # Should accept False

# These work correctly:
const: Any = None                    # ✅ Accepts any value
prefixItems: List[Schema] = None     # ✅ Works correctly
contains: Schema = None              # ✅ Works correctly
dependentSchemas: Dict[str, Schema] = None  # ✅ Works correctly

Validation Errors

When boolean values are used where Schema objects are expected:

pydantic_core._pydantic_core.ValidationError: 
  Input should be a valid dictionary or instance of Schema 
  [type=model_type, input_value=False, input_type=bool]

📋 Recommendations

1. Short Term: Document Limitations

  • ✅ Current status is well-documented
  • ✅ Clear test coverage shows what works vs doesn't work
  • ✅ Users can avoid unsupported boolean schema features

2. Medium Term: Library Contribution

Consider contributing to openapi-pydantic to add support for:

  • Boolean schemas (True/False as schema values)
  • Boolean values for items, unevaluatedProperties, etc.

3. Long Term: Custom Handling

If library updates aren't available, could implement custom pre-processing to handle boolean schemas by converting them to equivalent object schemas:

  • True{} (empty schema, allows anything)
  • False{"not": {}} (schema that matches nothing)

🎯 Summary

The OpenAPI 3.1 support is excellent (94% test pass rate) with the following status:

Production Ready:

  • All core OpenAPI 3.1 features work
  • Enhanced API design prevents parameter confusion
  • Full code generation capability
  • Comprehensive test coverage

Known Limitations (library-level constraints):

  • Boolean schemas (true/false as schema values)
  • Boolean values for certain schema properties

Recommendation: The current implementation provides robust OpenAPI 3.1 support suitable for most real-world use cases. The boolean schema limitations are edge cases that rarely appear in production APIs.

📈 Testing Results

# Full test suite results:
Total Tests: 187
✅ Passing: 176 (94%)
❌ Expected Failures: 11 (6%)

# OpenAPI 3.1 specific results:
✅ Core 3.1 features: 100% working
✅ API improvements: 100% working  
❌ Boolean schemas: 0% working (library limitation)

The project successfully implements comprehensive OpenAPI 3.1 support with modern, robust API design patterns.