Skip to content
GitLab
    • Explore Projects Groups Snippets
Projects Groups Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
  • O openapi-generator
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 3,476
    • Issues 3,476
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 402
    • Merge requests 402
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Packages and registries
    • Packages and registries
    • Package Registry
    • Infrastructure Registry
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • OpenAPI Tools
  • openapi-generator
  • Merge requests
  • !1539

Fix escaped regex values in Python client (#1517).

  • Review changes

  • Download
  • Email patches
  • Plain diff
Merged Administrator requested to merge github/fork/Raznic/fix_issue_1517 into master 6 years ago
  • Overview 0
  • Commits 7
  • Pipelines 0
  • Changes 25

Created by: Raznic

PR checklist

  • Read the contribution guidelines.
  • Ran the shell script under ./bin/ to update Petstore sample so that CIs can verify the change. (For instance, only need to run ./bin/{LANG}-petstore.sh and ./bin/security/{LANG}-petstore.sh if updating the {LANG} (e.g. php, ruby, python, etc) code generator or {LANG} client's mustache templates). Windows batch files can be found in .\bin\windows\.
  • Filed the PR against the correct branch: master, 3.4.x, 4.0.x. Default: master.
  • Copied the technical committee to review the pull request if your PR is targeting a particular programming language.

Description of the PR

Fixes issue #1517 (closed).

This PR corrects an issue with the PythonClientCodegen class improperly generating regular expression strings. It overrides the toRegularExpression() method to not escape backslashes.

CC: @tomplus @taxpon @frol @mbohlool @cbornet @kenjones-cisco

Compare
  • master (base)

and
  • latest version
    c0919478
    7 commits, 2 years ago

25 files
+ 343
- 149

    Preferences

    File browser
    Compare changes
modules/openap‎i-generator/src‎
main/java/org/…/‎codegen/languages‎
PythonClient‎Codegen.java‎ +18 -0
te‎st‎
java/org/openapito‎ols/codegen/python‎
PythonClientCo‎degenTest.java‎ +26 -0
resour‎ces/3_0‎
issue_1‎517.yaml‎ +51 -0
samples‎/client‎
pets‎tore‎
pyt‎hon‎
.openapi-‎generator‎
VER‎SION‎ +1 -1
do‎cs‎
FakeA‎pi.md‎ +8 -2
petstore‎_api/api‎
fake_‎api.py‎ +31 -7
python-‎asyncio‎
.openapi-‎generator‎
VER‎SION‎ +1 -1
do‎cs‎
FakeA‎pi.md‎ +8 -2
petstore‎_api/api‎
fake_‎api.py‎ +31 -7
python-‎tornado‎
.openapi-‎generator‎
VER‎SION‎ +1 -1
do‎cs‎
FakeA‎pi.md‎ +8 -2
petstore‎_api/api‎
fake_‎api.py‎ +31 -7
petstore-secur‎ity-test/python‎
.openapi-‎generator‎
VER‎SION‎ +1 -1
do‎cs‎
FakeA‎pi.md‎ +8 -6
petsto‎re_api‎
a‎pi‎
fake_‎api.py‎ +31 -32
mod‎els‎
__ini‎t__.py‎ +3 -3
model_r‎eturn.py‎ +9 -8
__ini‎t__.py‎ +5 -3
api_cl‎ient.py‎ +42 -28
configur‎ation.py‎ +6 -17
res‎t.py‎ +4 -4
READ‎ME.md‎ +9 -7
git_p‎ush.sh‎ +2 -2
setu‎p.py‎ +6 -6
tox‎.ini‎ +2 -2
modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PythonClientCodegen.java
+ 18
- 0
  • View file @ c0919478

  • Edit in single-file editor

  • Open in Web IDE


@@ -379,6 +379,19 @@ public class PythonClientCodegen extends DefaultCodegen implements CodegenConfig
return toApiName(name);
}
@Override
public String addRegularExpressionDelimiter(String pattern) {
if (StringUtils.isEmpty(pattern)) {
return pattern;
}
if (!pattern.matches("^/.*")) {
// Perform a negative lookbehind on each `/` to ensure that it is escaped.
return "/" + pattern.replaceAll("(?<!\\\\)\\/", "\\\\/") + "/";
}
return pattern;
}
@Override
public String apiFileFolder() {
@@ -633,6 +646,11 @@ public class PythonClientCodegen extends DefaultCodegen implements CodegenConfig
return null;
}
@Override
public String toRegularExpression(String pattern) {
return addRegularExpressionDelimiter(pattern);
}
@Override
public void setParameterExampleValue(CodegenParameter p) {
String example;
modules/openapi-generator/src/test/java/org/openapitools/codegen/python/PythonClientCodegenTest.java
+ 26
- 0
  • View file @ c0919478

  • Edit in single-file editor

  • Open in Web IDE


@@ -17,6 +17,11 @@
package org.openapitools.codegen.python;
import io.swagger.parser.OpenAPIParser;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.Operation;
import io.swagger.v3.parser.core.models.ParseOptions;
import org.openapitools.codegen.CodegenOperation;
import org.testng.Assert;
import org.testng.annotations.Test;
@@ -54,4 +59,25 @@ public class PythonClientCodegenTest {
Assert.assertEquals(codegen.isHideGenerationTimestamp(), false);
}
@Test(description = "test regex patterns")
public void testRegularExpressionOpenAPISchemaVersion3() {
final OpenAPI openAPI = new OpenAPIParser()
.readLocation("src/test/resources/3_0/issue_1517.yaml", null, new ParseOptions()).getOpenAPI();
final PythonClientCodegen codegen = new PythonClientCodegen();
final String path = "/ping";
final Operation p = openAPI.getPaths().get(path).getGet();
final CodegenOperation op = codegen.fromOperation(path, "get", p, openAPI.getComponents().getSchemas());
// pattern_no_forward_slashes '^pattern$'
Assert.assertEquals(op.allParams.get(0).pattern, "/^pattern$/");
// pattern_two_slashes '/^pattern$/'
Assert.assertEquals(op.allParams.get(1).pattern, "/^pattern$/");
// pattern_dont_escape_backslash '/^pattern\d{3}$/'
Assert.assertEquals(op.allParams.get(2).pattern, "/^pattern\\d{3}$/");
// pattern_dont_escape_escaped_forward_slash '/^pattern\/\d{3}$/'
Assert.assertEquals(op.allParams.get(3).pattern, "/^pattern\\/\\d{3}$/");
// pattern_escape_unescaped_forward_slash '^pattern/\d{3}$'
Assert.assertEquals(op.allParams.get(4).pattern, "/^pattern\\/\\d{3}$/");
// pattern_with_modifiers '/^pattern\d{3}$/i
Assert.assertEquals(op.allParams.get(5).pattern, "/^pattern\\d{3}$/i");
}
}
modules/openapi-generator/src/test/resources/3_0/issue_1517.yaml 0 → 100644
+ 51
- 0
  • View file @ c0919478

  • Edit in single-file editor

  • Open in Web IDE

openapi: 3.0.1
info:
title: Test Regex generation for parameter validation
version: 1.0.0
components:
headers:
responses:
OK_200:
description: OK
paths:
/ping:
get:
summary: Get Payment Information
description: Returns the content of a payment object
parameters:
- name: pattern_no_forward_slashes
in: header
schema:
type: string
pattern: '^pattern$'
- name: pattern_two_slashes
in: header
schema:
type: string
pattern: '/^pattern$/'
- name: pattern_dont_escape_backslash
in: header
schema:
type: string
pattern: '^pattern\d{3}$'
- name: pattern_dont_escape_escaped_forward_slash
in: header
schema:
type: string
pattern: '^pattern\/\d{3}$'
- name: pattern_escape_unescaped_forward_slash
in: header
schema:
type: string
pattern: '^pattern/\d{3}$'
- name: pattern_with_modifiers
in: header
schema:
type: string
pattern: '/^pattern\d{3}$/i'
responses:
'200':
$ref: "#/components/responses/OK_200"
\ No newline at end of file
samples/client/petstore/python/.openapi-generator/VERSION
+ 1
- 1
  • View file @ c0919478

  • Edit in single-file editor

  • Open in Web IDE

4.0.0-SNAPSHOT
\ No newline at end of file
4.0.0-SNAPSHOT
samples/client/petstore/python/docs/FakeApi.md
+ 8
- 2
  • View file @ c0919478

  • Edit in single-file editor

  • Open in Web IDE


@@ -488,7 +488,7 @@ No authorization required
[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
# **test_group_parameters**
> test_group_parameters(string_group=string_group, boolean_group=boolean_group, int64_group=int64_group)
> test_group_parameters(required_string_group, required_boolean_group, required_int64_group, string_group=string_group, boolean_group=boolean_group, int64_group=int64_group)
Fake endpoint to test group parameters (optional)
@@ -504,13 +504,16 @@ from pprint import pprint
# create an instance of the API class
api_instance = petstore_api.FakeApi()
required_string_group = 56 # int | Required String in group parameters
required_boolean_group = True # bool | Required Boolean in group parameters
required_int64_group = 56 # int | Required Integer in group parameters
string_group = 56 # int | String in group parameters (optional)
boolean_group = True # bool | Boolean in group parameters (optional)
int64_group = 56 # int | Integer in group parameters (optional)
try:
# Fake endpoint to test group parameters (optional)
api_instance.test_group_parameters(string_group=string_group, boolean_group=boolean_group, int64_group=int64_group)
api_instance.test_group_parameters(required_string_group, required_boolean_group, required_int64_group, string_group=string_group, boolean_group=boolean_group, int64_group=int64_group)
except ApiException as e:
print("Exception when calling FakeApi->test_group_parameters: %s\n" % e)
```
@@ -519,6 +522,9 @@ except ApiException as e:
Name | Type | Description | Notes
------------- | ------------- | ------------- | -------------
**required_string_group** | **int**| Required String in group parameters |
**required_boolean_group** | **bool**| Required Boolean in group parameters |
**required_int64_group** | **int**| Required Integer in group parameters |
**string_group** | **int**| String in group parameters | [optional]
**boolean_group** | **bool**| Boolean in group parameters | [optional]
**int64_group** | **int**| Integer in group parameters | [optional]
0 Assignees
None
Assign to
0 Reviewers
Request review from
Labels
0
None
0
None
    Assign labels
  • Manage project labels

Milestone
No milestone
None
None
Time tracking
Lock merge request
Unlocked
2
2 participants
Administrator
Tomasz Prus
Reference:
Source branch: github/fork/Raznic/fix_issue_1517

Menu

Explore Projects Groups Snippets