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
Original file line number Diff line number Diff line change
Expand Up @@ -1423,6 +1423,10 @@ public void postProcessParameter(CodegenParameter parameter) {
@Override
public void postProcessModelProperty(CodegenModel model, CodegenProperty property) {
postProcessPattern(property.pattern, property.vendorExtensions);

if (property.isArray) {
postProcessPattern(property.items.pattern, property.items.vendorExtensions);
}
}

/*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,36 @@ class {{classname}}({{#parent}}{{{.}}}{{/parent}}{{^parent}}BaseModel{{/parent}}
raise ValueError(r"must validate the regular expression {{{vendorExtensions.x-pattern}}}")
return value
{{/vendorExtensions.x-regex}}
{{#isArray}}
{{#items}}
{{#vendorExtensions.x-regex}}

@field_validator('{{{name}}}')
def {{{name}}}_items_validate_regular_expression(cls, value):
"""Validates the regular expression"""
{{^required}}
if value is None:
return value
{{/required}}
{{#required}}
{{#isNullable}}
if value is None:
return value
{{/isNullable}}
{{/required}}

for item in value:
{{#isNullable}}
if item is None:
continue

{{/isNullable}}
if not re.match(r"{{{.}}}", item{{#vendorExtensions.x-modifiers}} ,re.{{{.}}}{{/vendorExtensions.x-modifiers}}):
raise ValueError(r"must validate the regular expression {{{vendorExtensions.x-pattern}}}")
return value
{{/vendorExtensions.x-regex}}
{{/items}}
{{/isArray}}
{{#isEnum}}

@field_validator('{{{name}}}')
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,4 +71,22 @@ public void testNoAdditionalSlashesInQueryRegex() throws IOException {
TestUtils.assertFileContains(Paths.get(output + "/src/openapi_server/apis/default_api.py"),
"r\"^[a-zA-Z0-9]+[a-zA-Z0-9\\.\\-_]*[a-zA-Z0-9]+$\"");
}

@Test
public void testRegexPatternCheckedForArrayItems() throws IOException {
File output = Files.createTempDirectory("test").toFile();
output.deleteOnExit();

final CodegenConfigurator configurator = new CodegenConfigurator()
.setGeneratorName("python-fastapi")
.setOutputDir(output.getAbsolutePath().replace("\\", "/"))
.setInputSpec("src/test/resources/3_1/issue_23102.yaml");

DefaultGenerator generator = new DefaultGenerator();
List<File> files = generator.opts(configurator.toClientOptInput()).generate();
files.forEach(File::deleteOnExit);

TestUtils.assertFileContains(Paths.get(output + "/src/openapi_server/models/test_object.py"),
"raise ValueError(r\"must validate the regular expression /^[A-Z0-9_\\- ]+$/\")");
}
}
26 changes: 26 additions & 0 deletions modules/openapi-generator/src/test/resources/3_1/issue_23102.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
openapi: 3.1.0
info:
title: List items regex test
version: 0.0.1
paths:
/test:
get:
responses:
"200":
description: test
content:
application/json:
schema:
$ref: "#/components/schemas/TestObject"
components:
schemas:
TestObject:
properties:
tags:
items:
pattern: "/^[A-Z0-9_\\- ]+$/"
type:
oneOf:
- string
- type: "null"
type: array
Loading